java根據(jù)模板實(shí)現(xiàn)填充word內(nèi)容并轉(zhuǎn)換為pdf
1.word模板填充內(nèi)容
使用EasyPoi寫(xiě)入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/輸出結(jié)果3.docx";
FileOutputStream fos = null;
try {
//獲取模板文檔
File templateFile = new File(sourceFile);
System.out.println(templateFile.getName());
// 寫(xiě)入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() {
//填充數(shù)據(jù)
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);
//準(zhǔn)備數(shù)據(jù)
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依賴(lài)可以參考:使用EasyPoi實(shí)現(xiàn)word文檔生成和段落循環(huán)
2.把word轉(zhuǎn)換為pdf
word生成pdf的方法比較多,調(diào)研了常用的方式
一種方式是部署一臺(tái)windowserver,對(duì)外提供接口來(lái)進(jìn)行生成,能最大程度還原格式。
第二種方式就是利用jodconverter,會(huì)有少許的失真。
現(xiàn)在介紹的是基于jodconverter把word轉(zhuǎn)換為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 # 每個(gè) Office 進(jìn)程處理的最大任務(wù)數(shù)
port-numbers: 8202 # LibreOffice 后臺(tái)服務(wù)使用的端口號(hào),可修改
在處理類(lèi)中注入,之所以使用@Lazy是因?yàn)榧虞d的使用會(huì)報(bào)錯(cuò),讓它延遲加載。
@Lazy
@Autowired
private DocumentConverter converter;
public void wordConvertToPdf(File wordFile, File pdfFile) {
try {
logger.info("word轉(zhuǎn)換pdf開(kāi)始");
converter.convert(wordFile).to(pdfFile).execute();
logger.info("word轉(zhuǎn)換pdf結(jié)束");
} catch (Exception e) {
logger.error("word轉(zhuǎn)pdf異常", e);
}
}
3.后續(xù)使用
之前寫(xiě)過(guò)word模板生成段落和生成表格的段落。
結(jié)合起來(lái)就能生成相對(duì)完整的word了。后續(xù)如果需要蓋章什么的直接拿生成的pdf文件就可以了。
到此這篇關(guān)于java根據(jù)模板實(shí)現(xiàn)填充word內(nèi)容并轉(zhuǎn)換為pdf的文章就介紹到這了,更多相關(guān)java模板填充word內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
@Async異步線(xiàn)程池以及線(xiàn)程的命名方式
這篇文章主要介紹了@Async異步線(xiàn)程池以及線(xiàn)程的命名方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06
Struts2的配置 struts.xml Action詳解
這篇文章主要介紹了Struts2的配置 struts.xml Action詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10
在SpringBoot中使用UniHttp簡(jiǎn)化天地圖路徑規(guī)劃調(diào)用實(shí)踐記錄(場(chǎng)景分析)
本文介紹了如何在SpringBoot項(xiàng)目中使用UniHttp簡(jiǎn)化天地圖路徑規(guī)劃接口的調(diào)用,通過(guò)一個(gè)具體的例子展示了如何根據(jù)中文地址獲取經(jīng)緯度坐標(biāo),并使用UniHttp調(diào)用天地圖路徑規(guī)劃服務(wù),感興趣的朋友一起看看吧2025-02-02
Java讀取Excel文件內(nèi)容的簡(jiǎn)單實(shí)例
這篇文章主要介紹了Java讀取Excel文件內(nèi)容的簡(jiǎn)單實(shí)例,有需要的朋友可以參考一下2013-11-11
spring?boot配置dubbo方式(properties)
這篇文章主要介紹了spring?boot配置dubbo方式(properties),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01
Java微信小程序醫(yī)院掛號(hào)系統(tǒng)
這篇文章主要介紹了基于Java微信小程序醫(yī)院掛號(hào)系統(tǒng),可以實(shí)現(xiàn)遠(yuǎn)程處理事務(wù),遠(yuǎn)程提交工作和隨時(shí)追蹤工作的狀態(tài),文中提供了解決思路和部分實(shí)現(xiàn)代碼,需要的朋友可以參考下2023-03-03

