2026/4/15 19:14:24
网站建设
项目流程
做钢管的去什么网站发信息,濮阳免费网站建设,品牌策划怎么写,移动互联网开发专业介绍在Java开发中#xff0c;使用EasyPOI导出Word合同文档是一种高效且灵活的解决方案。通过模板驱动的方式#xff0c;开发者可以轻松地将动态数据填充到预设的Word模板中#xff0c;生成格式规范的合同文件 。这种方法特别适合需要批量生成标准化合同、协议或报告的场景。
1、…在Java开发中使用EasyPOI导出Word合同文档是一种高效且灵活的解决方案。通过模板驱动的方式开发者可以轻松地将动态数据填充到预设的Word模板中生成格式规范的合同文件 。这种方法特别适合需要批量生成标准化合同、协议或报告的场景。1、需求使用easyPOI方式导出合同word文档。前几篇文章我们注重讲了使用EasyPoi操作Excel文件的详细流程使用Word模板和Excel模板用法基本一致支持的标签也是一致的仅仅**支持07版本的word**也是只能生成后缀是docx的文档本文我们就拿docx做导出功能2、导入依赖版本兼容性确保使用EasyPOI 4.3.0及以上版本旧版本可能不支持多图片循环导出等高级功能。同时注意Spring Boot版本与EasyPOI的兼容性dependencygroupIdcn.afterturn/groupIdartifactIdeasypoi-spring-boot-starter/artifactIdversion4.4.0/version/dependency3、模板指令EasyPOI提供了丰富的模板指令可以处理各种复杂的合同导出需求。掌握这些指令能让你的合同文档更加灵活和强大。下面列举下EasyPoi支持的指令以及作用最主要的就是各种fe的用法三元运算{{test ? obj:obj2}}n: 表示 这个cell是数值类型{{n:}}le: 代表长度{{le:()}}在if/else 运用{{le:()8? obj1:obj2}}fd: 格式化时间{{fd:(obj;yyyy-MM-dd)}}fn: 格式化数字{{fn:(obj;###.00)}}fe: 遍历数据,创建row!fe: 遍历数据不创建row$fe:下移插入,把当前行,下面的行全部下移.size()行,然后插入#fe: 横向遍历v_fe: 横向遍历值!if: 删除当前列{{!if:(test)}}单引号表示常量值 ‘’ 比如’1’ 那么输出的就是1NULL空格INDEX表示循环中的序号,自动添加]]换行符 多行遍历导出 sum 统计数据指令功能描述合同应用示例{{fe:resourceList }}遍历列表数据创建行合同条款列表、附件清单{{fd:date;yyyy-MM-dd}}格式化日期合同签署日期、生效日期{{fn:amount;.00}}格式化数字合同金额、违约金计算{{if:condition}}条件判断显示/隐藏可选条款、特殊约定{{}}换行符多行地址、条款换行对于复杂的合同表格可以使用{{fe:tableData}}指令动态生成多行数据。例如在合同附件清单中可以通过遍历List数据自动生成表格行每行包含附件名称、编号、页数等信息。4、制作模板根据上述的指令要求我们制作模板如下把制作好的模板放入到项目中5、代码实现5.1、UserController修改原来的导出合同的方法GetMapping(value/downloadContract,name导出用户合同)publicvoiddownloadContract(Longid,HttpServletResponseresponse)throwsException{// userService.downloadContract(id,response);userService.downloadContractWithEasyPOI(id,response);}5.2、IUserServicevoiddownloadContractWithEasyPOI(Longid,HttpServletResponseresponse)throwsException;5.3、UserServiceImplOverridepublicvoiddownloadContractWithEasyPOI(Longid,HttpServletResponseresponse)throwsException{FilerootPathnewFile(ResourceUtils.getURL(classpath:).getPath());//SpringBoot项目获取根目录的方式FiletemplatePathnewFile(rootPath.getAbsolutePath(),/word_template/contract_template2.docx);// 先获取导出word需要的数据Useruserthis.findById(id);// 把需要的数据放到map中方便替换SimpleDateFormatsimpleDateFormatnewSimpleDateFormat(yyyy-MM-dd);MapString,ObjectparamsnewHashMapString,Object();params.put(userName,user.getUserName());params.put(hireDate,simpleDateFormat.format(user.getHireDate()));params.put(address,user.getAddress());// 下面是表格中需要的数据ListMapresourceListnewArrayList();MapString,Objectmapnull;for(Resourceresource:user.getResourceList()){mapnewHashMapString,Object();map.put(name,resource.getName());map.put(price,resource.getPrice());map.put(needReturn,resource.getNeedReturn());ImageEntityimagenewImageEntity();image.setHeight(64);image.setWidth(72);image.setUrl(rootPath.getPath()\\staticresource.getPhoto());map.put(photo,image);resourceList.add(map);}// 把组建好的表格需要的数据放到大map中params.put(resourceList,resourceList);// 根据模板数据 导出文档XWPFDocumentxwpfDocumentWordExportUtil.exportWord07(templatePath.getPath(),params);Stringfilenameuser.getUserName()_合同.docx;// 设置文件的打开方式和mime类型ServletOutputStreamoutputStreamresponse.getOutputStream();response.setHeader(Content-Disposition,attachment;filenamenewString(filename.getBytes(),ISO8859-1));response.setContentType(application/vnd.openxmlformats-officedocument.wordprocessingml.document);xwpfDocument.write(outputStream);}其中findById方法代码如下OverridepublicUserfindById(Longid)throwsException{UseruseruserMapper.selectById(id);ListResourceresourcesresourceMapper.selectList(newQueryWrapperResource().in(user_id,id));user.setResourceList(resources);returnuser;}6、导出结果说明使用.docx格式模板必须保存为.docx格式Word 2007不支持旧的.doc格式占位符格式严格使用{{变量名}}格式前后不能有空格复杂表格处理对于动态行表格在模板中只需设计一行EasyPOI会自动复制并填充数据图片导出如果需要导出合同中的公司logo或签名图片使用ImageEntity类进行配置。“人的一生会经历很多痛苦但回头想想都是传奇”。