欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java SpringBoot將Word文檔轉(zhuǎn)為PDF的全流程解析

 更新時(shí)間:2025年05月30日 09:40:30   作者:天天摸魚的java工程師  
在 Java 里,能把 Word 轉(zhuǎn) PDF 的工具還真不少,本文主要來和大家聊聊Java如何整合SpringBoot實(shí)現(xiàn)將Word文檔轉(zhuǎn)為PDF的全流程,有需要的可以了解下

今天產(chǎn)品丟給我一個需求,說用戶希望在系統(tǒng)里上傳 Word 文檔,然后能一鍵轉(zhuǎn)成 PDF 格式。好家伙,乍一聽還挺簡單,但仔細(xì)想想,這需求門道可不少。咱們一點(diǎn)點(diǎn)來拆解。

一、需求分析

首先,用戶說的 “Word 文檔” 其實(shí)挺寬泛的。Word 文檔有.doc和.docx兩種常見格式,.doc是老版本的二進(jìn)制格式,.docx是基于 XML 的壓縮格式,處理方式完全不一樣。另外,文檔里可能有圖片、表格、公式、超鏈接,甚至還會有頁眉頁腳,這些內(nèi)容在轉(zhuǎn)換過程中都得保證原樣顯示,不能丟東西、亂排版。

還有,從系統(tǒng)角度看,得考慮轉(zhuǎn)換效率和穩(wěn)定性。要是用戶上傳個幾十 MB 的大文檔,轉(zhuǎn)換半天沒反應(yīng),或者直接把服務(wù)器搞崩了,那肯定不行。最后,還得做好異常處理,比如文檔格式不對、文件損壞,這些情況都得給用戶友好的提示。

二、技術(shù)選型

明確需求后,就得找趁手的工具了。在 Java 里,能把 Word 轉(zhuǎn) PDF 的工具還真不少。

第一個想到的是 Apache POI,它能讀寫 Word 文檔,但是它主要側(cè)重于文檔內(nèi)容的操作,直接轉(zhuǎn) PDF 還得配合其他庫,有點(diǎn)麻煩,而且對復(fù)雜格式支持不太好,就先 pass 掉。

然后是 Aspose.Words,這個庫功能超強(qiáng)大,幾乎能完美支持所有 Word 格式和元素,轉(zhuǎn)換效果也很好。但它是收費(fèi)的,要是公司預(yù)算充足,其實(shí)是個不錯的選擇。

最后,我盯上了 Docx4j。它是開源的,對.docx格式支持特別好,轉(zhuǎn)換 PDF 也很方便,社區(qū)資料也多,遇到問題能找到不少解決方案。雖然對老版本.doc支持差點(diǎn),但現(xiàn)在主流都是.docx,權(quán)衡之下,就它了!

三、Spring Boot 整合

確定用 Docx4j 后,就開始把它集成到 Spring Boot 項(xiàng)目里。

先打開pom.xml文件,加依賴:

<dependency>
    <groupId>org.docx4j</groupId>
    <artifactId>docx4j</artifactId>
    <version>8.3.3</version>
</dependency>
<dependency>
    <groupId>org.docx4j</groupId>
    <artifactId>docx4j-export-fo</artifactId>
    <version>8.3.3</version>
</dependency>

第一個依賴是 Docx4j 的核心庫,第二個是用來把 Word 文檔轉(zhuǎn)成 PDF 的模塊。加完依賴,Maven 會自動把需要的 jar 包下載下來。

四、代碼實(shí)現(xiàn)

接下來就是寫代碼了,咱們新建一個工具類WordToPdfConverter:

import org.docx4j.Docx4J;
import org.docx4j.fonts.IdentityPlusMapper;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart;
import org.docx4j.pdf2HTMLEx.PdfSettings;
import org.docx4j.utils.fonts.FontUtils;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
public class WordToPdfConverter {
    public static void convert(String inputFilePath, String outputFilePath) {
        try {
            // 加載Word文檔
            WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(new java.io.File(inputFilePath));
            // 處理字體,解決中文亂碼問題
            FontUtils.setFontInfo(wordMLPackage);
            IdentityPlusMapper fontMapper = new IdentityPlusMapper();
            fontMapper.put("隸書", "LiSu");
            fontMapper.put("宋體", "SimSun");
            fontMapper.put("黑體", "SimHei");
            fontMapper.put("楷體", "KaiTi");
            wordMLPackage.setFontMapper(fontMapper);
            // 獲取文檔的主部分
            MainDocumentPart documentPart = wordMLPackage.getMainDocumentPart();
            // 創(chuàng)建PDF設(shè)置
            PdfSettings pdfSettings = new PdfSettings();
            // 設(shè)置字體嵌入,防止在其他設(shè)備上顯示異常
            pdfSettings.setFontEmbeddingEnabled(true);
            // 執(zhí)行轉(zhuǎn)換
            OutputStream os = new FileOutputStream(new File(outputFilePath));
            Docx4J.toPDF(wordMLPackage, os, pdfSettings);
            os.close();
            System.out.println("轉(zhuǎn)換成功!");
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("轉(zhuǎn)換失?。? + e.getMessage());
        }
    }
}

代碼解釋:

  • WordprocessingMLPackage.load方法加載指定路徑的 Word 文檔。
  • 處理字體部分,因?yàn)槟J(rèn)可能會出現(xiàn)中文亂碼,通過IdentityPlusMapper指定常用中文字體的映射關(guān)系。
  • PdfSettings用來配置 PDF 轉(zhuǎn)換的參數(shù),這里開啟了字體嵌入,這樣生成的 PDF 在其他設(shè)備上打開,字體也不會錯亂。
  • 最后用Docx4J.toPDF方法執(zhí)行轉(zhuǎn)換,把轉(zhuǎn)換后的內(nèi)容輸出到指定的文件路徑。

在 Spring Boot 的 Controller 里調(diào)用這個方法,就能提供轉(zhuǎn)換接口了:

import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.util.UUID;
@RestController
@RequestMapping("/convert")
public class WordToPdfController {
    @PostMapping
    public String convertWordToPdf(@RequestParam("file") MultipartFile file) {
        try {
            // 生成臨時(shí)文件路徑
            String originalFilename = file.getOriginalFilename();
            String tempFilePath = System.getProperty("java.io.tmpdir") + File.separator + UUID.randomUUID() + "_" + originalFilename;
            file.transferTo(new File(tempFilePath));
            // 生成輸出PDF文件路徑
            String outputFilePath = System.getProperty("java.io.tmpdir") + File.separator + UUID.randomUUID() + ".pdf";
            // 執(zhí)行轉(zhuǎn)換
            WordToPdfConverter.convert(tempFilePath, outputFilePath);
            // 返回下載鏈接或者處理邏輯
            return "轉(zhuǎn)換成功,PDF路徑:" + outputFilePath;
        } catch (IOException e) {
            e.printStackTrace();
            return "文件處理失?。? + e.getMessage();
        }
    }
}

在這個 Controller 里,@PostMapping定義了一個接收文件上傳的接口。先把上傳的文件保存到臨時(shí)目錄,再調(diào)用WordToPdfConverter.convert方法進(jìn)行轉(zhuǎn)換,最后可以根據(jù)實(shí)際需求,把生成的 PDF 返回給用戶下載,或者存到指定位置。

五、總結(jié)

到這兒,從接到需求到代碼實(shí)現(xiàn),Java 用 Spring Boot 把 Word 轉(zhuǎn) PDF 的整個流程就走完了。當(dāng)然,實(shí)際項(xiàng)目里還得考慮更多,比如文件存儲優(yōu)化、并發(fā)處理、轉(zhuǎn)換進(jìn)度監(jiān)控。要是你在做這個功能時(shí)遇到啥問題,或者有更好的方案,歡迎一起嘮嘮!

到此這篇關(guān)于Java SpringBoot將Word文檔轉(zhuǎn)為PDF的全流程解析的文章就介紹到這了,更多相關(guān)SpringBoot Word轉(zhuǎn)PDF內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論