JAVA使用POI对Word docx模板文件替换数据工具类并通过浏览器下载到本地

需求:需要上传一个带有占位符的模板至数据库保存,然后解析模板的占位符,通过类计算结果替换模板中的占位符,并且保存至本地

难点:1.由于我数据库保存是本地保存,并没有path 所以获取模板的path是个难点

 String fileBucket = sysFileInfo.getFileBucket();
        if(fileBucket==null) fileBucket = DEFAULT_BUCKET;
        // 返回文件地址
        String fileUrl = fileOperator.getFilePath(fileBucket, sysFileInfo.getFileObjectName());

2.如何使用计算类,由于我的类是和占位符绑定的,什么样的占位符调用对应的接口

​
//获取执行类
String fullHandleClassName = rotationAnalysisProject.getHandleClass();
if(StringUtil.isNotEmpty(fullHandleClassName)){
    int index = StrUtil.lastIndexOf(fullHandleClassName, ".", fullHandleClassName.length() - 1 , false);
     String handleClassName = StrUtil.sub(fullHandleClassName, index + 1, fullHandleClassName.length());
     handleClassName = StrUtil.lowerFirst(handleClassName);
     RotationAnalysisReport handleClass = SpringUtil.getBean(handleClassName);
     if(ObjectUtil.isNull(handleClass)){
        throw new ServiceException(10001, "模板内"+key+"数据无法计算,请修改");
       }
    //替换内容
    params.put(key, handleClass.calc(rotationAnalysisTemplateParam.getDate()));
}

​

3.如何下载到本地

注意点:这里不适合用ajax请求

效果实现如下图

 

 

具体代码如下

前段请求(一定不能用ajax请求)

  //请求地址
  var url = getProjectUrl() + 'rotationAnalysisTemplate/download';
  console.log(url+ "?id="+ data.field.id);
  //打开新页面下载
  window.open(url+ "?id="+ data.field.id + "&date="+data.field.date);
  //关闭当前弹框
  layer.closeAll()

severviceImpl


    public void downLoad (RotationAnalysisTemplateParam rotationAnalysisTemplateParam, HttpServletResponse response) throws IOException {
        RotationAnalysisTemplate rotationAnalysisTemplate = this.getById(rotationAnalysisTemplateParam.getId());
        SysFileInfo sysFileInfo = sysFileInfoService.getById(rotationAnalysisTemplate.getFileInfoId());

        LocalFileOperator fileOperator = SpringUtil.getBean(LocalFileOperator.class);

        //获取文件地址
        String fileBucket = sysFileInfo.getFileBucket();
        if(fileBucket==null) fileBucket = DEFAULT_BUCKET;
        // 返回文件地址
        String fileUrl = fileOperator.getFilePath(fileBucket,                 
        sysFileInfo.getFileObjectName());


        //解析文档
        //读取文件
        OPCPackage opcPackage = POIXMLDocument.ope
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值