SpringBoot實(shí)現(xiàn)Word轉(zhuǎn)PDF?的完整思路與示例代碼詳解
下面給你一個(gè)在 Spring Boot 中實(shí)現(xiàn) Word 轉(zhuǎn) PDF? 的完整思路與示例,覆蓋主流可行方案、推薦做法以及注意事項(xiàng),你可以按項(xiàng)目需求選擇。
一、總體方案對(duì)比
| 方案 | 是否收費(fèi) | 轉(zhuǎn)換質(zhì)量 | 依賴環(huán)境 | 推薦指數(shù) |
|---|---|---|---|---|
| docx4j + Plutext PDF Converter? | 商業(yè)需授權(quán) | ????? | 無(wú)(Java) | ??? |
| LibreOffice(命令行) | 免費(fèi) | ???? | 需安裝LibreOffice | ??? |
| Apache POI + iText(間接) | 免費(fèi) | ?? | 復(fù)雜 | ? |
| Aspose.Words for Java | 商業(yè) | ????? | 無(wú) | ?(有錢) |
生產(chǎn)環(huán)境最推薦:
- Windows/Linux 服務(wù)器:LibreOffice
- 企業(yè)級(jí)高質(zhì)量:docx4j + Plutext(或 Aspose)
二、方案一:LibreOffice(最常用、免費(fèi))
原理
Spring Boot 調(diào)用服務(wù)器上的 soffice命令將 .docx→ .pdf
安裝 LibreOffice
# Ubuntu sudo apt install libreoffice # CentOS yum install libreoffice # Windows 下載安裝 LibreOffice
Spring Boot 示例代碼
Maven 依賴(無(wú)需額外)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>Service 示例
import java.io.*;
@Service
public class WordToPdfService {
public void convert(String wordPath, String pdfPath) throws Exception {
String command = "libreoffice --headless --convert-to pdf "
+ wordPath + " --outdir " + new File(pdfPath).getParent();
Process process = Runtime.getRuntime().exec(command);
int exitCode = process.waitFor();
if (exitCode != 0) {
throw new RuntimeException("Word轉(zhuǎn)PDF失敗");
}
}
}
優(yōu)點(diǎn)
- 免費(fèi)
- 支持
.doc / .docx - 格式還原度高
注意
- Linux 必須安裝字體(否則中文亂碼)
- 不支持并發(fā)過(guò)高(建議隊(duì)列或限制線程)
三、方案二:docx4j + Plutext(企業(yè)級(jí))
Maven 依賴
<dependency>
<groupId>org.docx4j</groupId>
<artifactId>docx4j</artifactId>
<version>11.4.9</version>
</dependency>
<dependency>
<groupId>org.plutext</groupId>
<artifactId>plutext-pdf-converter</artifactId>
<version>3.3.0</version>
</dependency>轉(zhuǎn)換代碼
import org.docx4j.Docx4J;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import java.io.FileOutputStream;
public void convert() throws Exception {
WordprocessingMLPackage wordMLPackage =
WordprocessingMLPackage.load(new File("input.docx"));
Docx4J.toPDF(wordMLPackage, new FileOutputStream("output.pdf"));
}
優(yōu)點(diǎn)
- 純 Java
- 不依賴外部軟件
- 樣式還原好
缺點(diǎn)
- Plutext 商用需授權(quán)
- 對(duì)復(fù)雜表格/頁(yè)眉頁(yè)腳偶有偏差
四、方案三:Aspose.Words(最強(qiáng)但貴)
Maven
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-words</artifactId>
<version>23.12</version>
</dependency>代碼示例
import com.aspose.words.Document;
Document doc = new Document("input.docx");
doc.save("output.pdf");
五、常見(jiàn)問(wèn)題 & 解決方案
中文亂碼
Linux 安裝中文字體
yum install wqy-microhei-fonts
并發(fā)問(wèn)題
- LibreOffice 不建議多線程同時(shí)轉(zhuǎn)換
- 可使用線程池 + 隊(duì)列
Web 接口示例
@PostMapping("/convert")
public ResponseEntity<?> convert(MultipartFile file) throws Exception {
// 保存word
// 調(diào)用轉(zhuǎn)換
// 返回pdf流
}
六、推薦選型總結(jié)
| 場(chǎng)景 | 推薦方案 |
|---|---|
| 普通后臺(tái)系統(tǒng) | LibreOffice |
| 企業(yè)文檔系統(tǒng) | docx4j + Plutext |
| 金融/合同/報(bào)表 | Aspose.Words |
到此這篇關(guān)于SpringBoot實(shí)現(xiàn)Word轉(zhuǎn)PDF?的完整思路與示例代碼詳解的文章就介紹到這了,更多相關(guān)SpringBoot Word轉(zhuǎn)PDF?內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot使用LibreOffice實(shí)現(xiàn)高保真Word轉(zhuǎn)PDF的方法
- SpringBoot項(xiàng)目實(shí)現(xiàn)Word轉(zhuǎn)PDF的完整解決方案
- SpringBoot三步將Word轉(zhuǎn)為PDF的實(shí)戰(zhàn)指南
- SpringBoot實(shí)現(xiàn)Word和PDF互相轉(zhuǎn)換的操作詳解
- Java SpringBoot將Word文檔轉(zhuǎn)為PDF的全流程解析
- SpringBoot實(shí)現(xiàn)Word轉(zhuǎn)PDF和TXT的實(shí)踐分享
- SpringBoot如何實(shí)現(xiàn)word文檔轉(zhuǎn)pdf
相關(guān)文章
Spring組件初始化擴(kuò)展點(diǎn)BeanPostProcessor的作用詳解
本文通過(guò)實(shí)戰(zhàn)案例和常見(jiàn)應(yīng)用場(chǎng)景詳細(xì)介紹了BeanPostProcessor的使用,并強(qiáng)調(diào)了其在Spring擴(kuò)展中的重要性,感興趣的朋友一起看看吧2025-03-03
SpringBoot任意版本集成Swagger各種版本的操作指南
在學(xué)習(xí)Swagger生成API文檔的時(shí)候經(jīng)常會(huì)遇到問(wèn)題,而目前市面上大部分技術(shù)分享者的SpringBoot版本并沒(méi)和我們的同步,導(dǎo)致一些一模一樣的代碼,在我們的項(xiàng)目上卻無(wú)法使用,這是一個(gè)經(jīng)常性的問(wèn)題,本文章就旨在和大家搞定SpringBoot任意版本集成Swagger各種版本2024-07-07
Java 重命名 Excel 工作表并設(shè)置工作表標(biāo)簽顏色的示例代碼
這篇文章主要介紹了Java 重命名 Excel 工作表并設(shè)置工作表標(biāo)簽顏色的示例代碼,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10
使用JAVA8 filter對(duì)List多條件篩選的實(shí)現(xiàn)
這篇文章主要介紹了使用JAVA8 filter對(duì)List多條件篩選的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
JAVA實(shí)現(xiàn)sm3加密簽名以及防止重復(fù)攻擊
這篇文章主要給大家介紹了關(guān)于JAVA實(shí)現(xiàn)sm3加密簽名以及防止重復(fù)攻擊的相關(guān)資料,SM3是簽名算法,和MD5一樣(對(duì)于應(yīng)用層來(lái)說(shuō)),SM4是對(duì)稱加密算法,和AES一樣(對(duì)于應(yīng)用層來(lái)說(shuō)),需要的朋友可以參考下2023-10-10

