java实现word模板文件填充
核心
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模板文件填充相关推荐
- java调用word模板文件_Java使用模板导出word文档
Java使用模板导出word文档 需要导入freemark的jar包 使用word模板,在需要填值的地方使用字符串代替,是因为word转换为xml文件时查找不到要填入内容的位置.尽量不要在写字符串的时 ...
- Java操作word模板文件
关于导出word文档,之前想过用ireport但模板文件比较复杂不容易画.所以采取了Java操作word文件,替换word中的元素方法 模板文件如下 单位名称:$ACCTNAME$ NO: $SN$ ...
- java word模版填充_[转载]java向word模板中填充数据(总结)
使用过PageOffice动态生成word文档的人都知道,PageOffice可以给word文档的指定位置进行填充,这里我们所说的指定位置在PageOffice的专业术语里面有两个概念,一个叫做数据区 ...
- java 解析word模板为xml, 动态填充数据到xml,最后输出word文档
java 解析word模板为xml, 动态填充数据到xml,最后输出word文档 在项目中, 一开始是使用java Apache poi 根据word模板生成word报表, 后面发现框架有个低版本的p ...
- 记录java使用POI实现word模板数据填充
一.前言 最近项目遇到个需求,在模板中填充数据,刚开始是用smartBi报表进行填充,输出参数都是必录,无法满足需求.在网上查了很多资料,有些需要把文档转成xml格式修改里面内容,IDEA里面修改要替 ...
- Java poi word模板填充数据、复制行删除行
Java poi word模板填充数据 1.明细表格式 ${list_xxxxx} 普通格式 ${xxxxxx} 2.replaceInTable方法中 table.removeRow(2); 第三行 ...
- java word模板poi生成文件_利用poi读取word模板文件生成新的word文档
利用poi读取word模板文件生成新的word文档 利用poi读取word模板文件,并回填逻辑数据,生成并导出需要的word文档源码.解决模板读取异常问题,提供wordUtils工具类(各种功能实现) ...
- Java使用ftl模板文件生成Word,以及Word转换图片或Pdf工具类
Java使用ftl模板文件生成Word 一.写在前面 最近在项目中使用打印功能,发现这个功能我已经写过多次了,下面这个文章的发步日期在2020年,不得不感慨时间之快啊. https://blog.cs ...
- Java根据word模板填充数据(使用poi-tl)
poi-tl 是Word模板引擎,使用Word模板和数据创建Word文档. 文档地址: Poi-tl Documentation 里面详细说明了如何使用,已在项目中实践过,确实很好用的一个插件. 依赖 ...
最新文章
- SUSE安装g++的两种方法
- MathType公式行距设置的方法
- 税收征收管理法律制度
- PHP5中的魔术方法
- 洛谷P4841 城市规划(多项式求逆)
- 如何确定autosar的版本_AUTOSAR编码指南(中文版)
- gateway动态路由_无语!SpringCloud Gateway动态路由之Nacos,我已经讲得很清楚了
- 贴一下目前的工作任务列表
- 2021-2025年中国传感器融合行业市场供需与战略研究报告
- python字符串 切片_Python切片字符串
- CXF WebService 教程
- 电子商务商品供应链概论
- excel财务案例建模_Pro Excel财务建模:技术创业公司的构建模型
- Vuex模块化用法 跨模块调用方法
- python更改下载源地址
- 体验服和平精英服务器维护,和平精英:体验服申请入口
- nofollow、noopener和noreferrer标签的区别
- python 3d绘图立方体_Python3使用turtle绘制超立方体图形示例
- 敏捷开发培训部分讲义内容
- Vue 项目飞鸟头条后台管理系统