java根据模板实现填充word内容并转换为pdf
1.word模板填充内容
使用EasyPoi写入Word文档。
import cn.afterturn.easypoi.word.WordExportUtil;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class WriteWordtemplate {
public static void main(String[] args) throws Exception {
Map<String, Object> params = createDate();
String sourceFile = "d:/temp/模版word3.docx";
String targetFile = "d:/temp/输出结果3.docx";
FileOutputStream fos = null;
try {
//获取模板文档
File templateFile = new File(sourceFile);
System.out.println(templateFile.getName());
// 写入word
XWPFDocument doc = WordExportUtil.exportWord07(templateFile.getPath(), params);
fos = FileUtils.openOutputStream(new File(targetFile));
doc.write(fos);
} catch (Exception e) {
System.out.println(e);
} finally {
IOUtils.closeQuietly(fos);
}
}
private static Map<String, Object> createDate() {
//填充数据
List<WordExportBatch> resultList = new ArrayList<>();
WordExportBatch wordExport = new WordExportBatch();
WordExportBatch wordExport1 = new WordExportBatch();
wordExport.setCreateDate("2022/9/30");
wordExport1.setCreateDate("2022/9/28");
wordExport.setNumber("11");
wordExport.setExMoneny("11");
wordExport.setExFunc("支付宝");
wordExport1.setNumber("15");
wordExport.setAmount("1234.5");
wordExport1.setAmount("2345.77");
wordExport.setEndDate("2022/12/31");
wordExport1.setEndDate("2022/11/30");
wordExport.setType("支付宝");
wordExport1.setType("微信");
wordExport1.setExMoneny("22");
wordExport1.setExFunc("微信");
resultList.add(wordExport);
resultList.add(wordExport1);
//准备数据
Map<String, Object> params = new HashMap<>();
params.put("number", "112");
params.put("amount", "1234.5");
params.put("endDate", "2022/11/30");
params.put("resultList", resultList);
return params;
}
}
pom依赖可以参考:使用EasyPoi实现word文档生成和段落循环
2.把word转换为pdf
word生成pdf的方法比较多,调研了常用的方式
一种方式是部署一台windowserver,对外提供接口来进行生成,能最大程度还原格式。
第二种方式就是利用jodconverter,会有少许的失真。
现在介绍的是基于jodconverter把word转换为PDF。首先引入jar包
<dependency>
<groupId>org.jodconverter</groupId>
<artifactId>jodconverter-local</artifactId>
<version>4.2.2</version>
</dependency>
<dependency>
<groupId>org.jodconverter</groupId>
<artifactId>jodconverter-spring-boot-starter</artifactId>
<version>4.2.2</version>
</dependency>
在配置文件中加入如下配置
jodconverter:
local:
enabled: true # 启用本地模式
office-home: /opt/libreoffice7.5 # LibreOffice 的安装路径
max-tasks-per-process: 10 # 每个 Office 进程处理的最大任务数
port-numbers: 8202 # LibreOffice 后台服务使用的端口号,可修改
在处理类中注入,之所以使用@Lazy是因为加载的使用会报错,让它延迟加载。
@Lazy
@Autowired
private DocumentConverter converter;
public void wordConvertToPdf(File wordFile, File pdfFile) {
try {
logger.info("word转换pdf开始");
converter.convert(wordFile).to(pdfFile).execute();
logger.info("word转换pdf结束");
} catch (Exception e) {
logger.error("word转pdf异常", e);
}
}
3.后续使用
之前写过word模板生成段落和生成表格的段落。
结合起来就能生成相对完整的word了。后续如果需要盖章什么的直接拿生成的pdf文件就可以了。
到此这篇关于java根据模板实现填充word内容并转换为pdf的文章就介绍到这了,更多相关java模板填充word内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Struts2的配置 struts.xml Action详解
这篇文章主要介绍了Struts2的配置 struts.xml Action详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2017-10-10
在SpringBoot中使用UniHttp简化天地图路径规划调用实践记录(场景分析)
本文介绍了如何在SpringBoot项目中使用UniHttp简化天地图路径规划接口的调用,通过一个具体的例子展示了如何根据中文地址获取经纬度坐标,并使用UniHttp调用天地图路径规划服务,感兴趣的朋友一起看看吧2025-02-02
spring boot配置dubbo方式(properties)
这篇文章主要介绍了spring boot配置dubbo方式(properties),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2023-01-01


最新评论