欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 金融 > java根据Word模板实现动态填充导出

java根据Word模板实现动态填充导出

2025/4/18 14:29:53 来源:https://blog.csdn.net/weixin_39789340/article/details/144702286  浏览:    关键词:java根据Word模板实现动态填充导出

最近项目中需要导出Word,根据不同的信息导出不同的内容,包含文本、列表、图片等,本文使用poi-tl实现在次做以记录。

  • 添加依赖
<!-- word导出 -->
<dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.7.3</version>
</dependency>
<!--  上面需要的依赖-->
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>4.1.2</version>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version>
</dependency>

如果项目功能简单只是使用Word导出功能,只添加poi-tl包就可以,我这里添加的包多是因为还有其他功能,相互之间有影响,升级的话又牵扯太多,所以你懂的~

  • 制作模板

文本标签:使用{{属性名}}做处理
图片

列表集合:列表中集合使用{{集合名}},列表属性用[属性名]处理
图片

图片列表:集合处理方式都一样{{集合名}},图片属性增加@[@属性名]
图片

  • 编写代码

数据构建

/*** 填充数据源* 其中data存放的key值与模板中的文本域值相对应*/
public static Map<String, Object> newData() {Map<String, Object> data = new HashMap<String, Object>();//key要与模板中的别名一一对应data.put("custNo", "bb2");data.put("custCnName", "特特我");data.put("productCategory", "官方的");data.put("orgKey", "4433");data.put("riskLevel", "1001");List<Map<String,Object>> list = new ArrayList<>();Map<String,Object> job ;int num = 1;while (num<3){job = new HashMap<>();job.put("id",num);job.put("reviewStatusName","aaa");job.put("reviewAdvice","bbb");job.put("controlWay","ccc");job.put("reviewUser","ddd");job.put("reviewDate",LocalDateTime.now());job.put("fileName","zipfile.zip");list.add(job);num++;}data.put("approvals", list);List<Map<String,Object>> maps1 = new ArrayList<>();for (int i = 1; i <= 5; i++) {Map<String,Object> m = new HashMap<>();if(i%2==0){// 读取本地磁盘图片m.put("pho", new PictureRenderData(50, 50, "D:\\timg.jpg"));}else {// 读取本地磁盘图片m.put("pho", new PictureRenderData(30, 30, "D:\\bug2.png"));}m.put("date",LocalDateTime.now());m.put("text", "共" + 5 + "张图片,当前为第" + (i) + "张");maps1.add(m);}data.put("imgCollection", maps1);data.put("img", new PictureRenderData(100, 100, "D:\\需求1.png"));return data;
}

数据处理

public static void main(String[] args) {try {String filePath = "G:\\产品详情.docx";//模板路径Map<String,Object> pdfMap = newData();log.info("响应信息:{}",pdfMap);String custCnName = pdfMap.get("custCnName")+"";String stt = "download" + File.separator + "产品详情页.docx";log.info("--------------{}----{}--------" , File.separator + "产品详情页.docx",stt);InputStream inputStream = new FileInputStream(filePath);String fileName = custCnName + "-产品风险查询详情";HackLoopTableRenderPolicy policy = new HackLoopTableRenderPolicy();Configure config = Configure.newBuilder().bind("approvals", policy).bind("imgCollection",policy).build();XWPFTemplate template = XWPFTemplate.compile(inputStream, config).render(pdfMap);String url = "G:\\"+fileName + ".docx";File file = new File(url);file.createNewFile();template.write(new FileOutputStream(file));template.close();} catch (Exception e) {log.error("导出异常:{}",e);}
}
  • 导出样例
    ☆ 文本
    图片

    ☆ 列表
    图片

    ☆ 图片
    图片
    参考:文章 FC464782123

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词