核心

import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
使用该包实现 word 文件填充,同时支持 pdf、excel 格式

步骤

word模板文件存放在项目 resource 文件夹下

  • 需要填充的数据封装到 Map
  • 获取模板文件
  • 填充模板
  • 将填充后的 word 临时保存到本地
  • 获取保存的临时文件转换成 Byte[ ]
  • 上传到公司文件服务器
  • 返回的文件下载预览地址透传给前端

代码实现

public FileDTO createNoticeLetter(NoticeCondition condition) {FileDTO res = null;// 封装填充数据Map philipp = getMap(condition);FileInputStream tempFile = null;InputStream inputStream = null;// 临时存储文件String uuid = UUID.randomUUID().toString();String tmpdir = uuid + ".docx";try {// 获取 resource 下的模板文件ClassPathResource classPathResource = new ClassPathResource("/docx-template/bankTemplate.docx");inputStream = classPathResource.getInputStream();log.info("获取模板文件输入流");// 设置变量内容WordprocessingMLPackage template = WordprocessingMLPackage.load(inputStream);// 填充模板文件Docx4JSRUtil.searchAndReplace(template, philipp);FileOutputStream outputStream = new FileOutputStream(new File(tmpdir),true);template.save(outputStream);outputStream.flush();log.info("模板文件填充完成{}", condition.getPolicyId());//获取本地文件tempFile = new FileInputStream(tmpdir);// 转换成 byte[]byte[] content = readInputStream(tempFile);// 上传到文件服务器res = Optional.ofNullable(ArrayUtils.toObject(content)).orElseThrow(() -> new ServiceException("查询失败"));} catch (Exception e) {log.error("模板下载失败", e);} finally {if(null != inputStream){try {inputStream.close();} catch (IOException e) {log.error("模板下载失败", e);}}if (tempFile != null) {try {tempFile.close();// 删除本地临时文件File file = new File(tmpdir);if(file.delete()){log.info(file.getName() + " 文件已被删除!");}else{log.info(file.getName() + " 文件删除失败!");}} catch (IOException e) {log.error("文件上传失败", e);}}}return res;}/*** 数据封装*/private Map getMap(NoticeCondition condition){Map<String, String> philipp = Maps.<String, String>builder().put("${name}", "panda").build();return philipp;}/*** 从输入流中获取字节数组*/private static byte[] readInputStream(FileInputStream inputStream) throws IOException {byte[] buffer = new byte[1024];int len = 0;ByteArrayOutputStream bos = new ByteArrayOutputStream();while ((len = inputStream.read(buffer)) != -1) {bos.write(buffer, 0, len);}bos.close();return bos.toByteArray();}

java实现word模板文件填充相关推荐

  1. java调用word模板文件_Java使用模板导出word文档

    Java使用模板导出word文档 需要导入freemark的jar包 使用word模板,在需要填值的地方使用字符串代替,是因为word转换为xml文件时查找不到要填入内容的位置.尽量不要在写字符串的时 ...

  2. Java操作word模板文件

    关于导出word文档,之前想过用ireport但模板文件比较复杂不容易画.所以采取了Java操作word文件,替换word中的元素方法 模板文件如下 单位名称:$ACCTNAME$ NO: $SN$ ...

  3. java word模版填充_[转载]java向word模板中填充数据(总结)

    使用过PageOffice动态生成word文档的人都知道,PageOffice可以给word文档的指定位置进行填充,这里我们所说的指定位置在PageOffice的专业术语里面有两个概念,一个叫做数据区 ...

  4. java 解析word模板为xml, 动态填充数据到xml,最后输出word文档

    java 解析word模板为xml, 动态填充数据到xml,最后输出word文档 在项目中, 一开始是使用java Apache poi 根据word模板生成word报表, 后面发现框架有个低版本的p ...

  5. 记录java使用POI实现word模板数据填充

    一.前言 最近项目遇到个需求,在模板中填充数据,刚开始是用smartBi报表进行填充,输出参数都是必录,无法满足需求.在网上查了很多资料,有些需要把文档转成xml格式修改里面内容,IDEA里面修改要替 ...

  6. Java poi word模板填充数据、复制行删除行

    Java poi word模板填充数据 1.明细表格式 ${list_xxxxx} 普通格式 ${xxxxxx} 2.replaceInTable方法中 table.removeRow(2); 第三行 ...

  7. java word模板poi生成文件_利用poi读取word模板文件生成新的word文档

    利用poi读取word模板文件生成新的word文档 利用poi读取word模板文件,并回填逻辑数据,生成并导出需要的word文档源码.解决模板读取异常问题,提供wordUtils工具类(各种功能实现) ...

  8. Java使用ftl模板文件生成Word,以及Word转换图片或Pdf工具类

    Java使用ftl模板文件生成Word 一.写在前面 最近在项目中使用打印功能,发现这个功能我已经写过多次了,下面这个文章的发步日期在2020年,不得不感慨时间之快啊. https://blog.cs ...

  9. Java根据word模板填充数据(使用poi-tl)

    poi-tl 是Word模板引擎,使用Word模板和数据创建Word文档. 文档地址: Poi-tl Documentation 里面详细说明了如何使用,已在项目中实践过,确实很好用的一个插件. 依赖 ...

最新文章

  1. SUSE安装g++的两种方法
  2. MathType公式行距设置的方法
  3. 税收征收管理法律制度
  4. PHP5中的魔术方法
  5. 洛谷P4841 城市规划(多项式求逆)
  6. 如何确定autosar的版本_AUTOSAR编码指南(中文版)
  7. gateway动态路由_无语!SpringCloud Gateway动态路由之Nacos,我已经讲得很清楚了
  8. 贴一下目前的工作任务列表
  9. 2021-2025年中国传感器融合行业市场供需与战略研究报告
  10. python字符串 切片_Python切片字符串
  11. CXF WebService 教程
  12. 电子商务商品供应链概论
  13. excel财务案例建模_Pro Excel财务建模:技术创业公司的构建模型
  14. Vuex模块化用法 跨模块调用方法
  15. python更改下载源地址
  16. 体验服和平精英服务器维护,和平精英:体验服申请入口
  17. nofollow、noopener和noreferrer标签的区别
  18. python 3d绘图立方体_Python3使用turtle绘制超立方体图形示例
  19. 敏捷开发培训部分讲义内容
  20. Vue 项目飞鸟头条后台管理系统

热门文章

  1. 工作4年感想:美团、360、陌陌、百度、阿里、京东面试
  2. 【NLP】OpenAI GPT算法理解
  3. 戴尔电脑最新bios设置图解介绍
  4. Map.containsKey() 的一个使用场景.
  5. 有些钱,即便不脏,但也有毒。
  6. 做短视频怎么赚钱,盈利模式包括哪些模式,如何做短视频自媒体赚钱
  7. 美度手表官网了解美度手表好去处
  8. 澄清烟台苹果果袋用药与果树种植
  9. 李 小 龙 个 人 训 练 表
  10. 工业物联网平台的效益有哪些