最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot使用Docx4j實現(xiàn)DOCX轉PDF功能

 更新時間:2026年02月05日 09:02:15   作者:小沈同學呀  
在當今的企業(yè)級應用中,文檔格式轉換是一個高頻但又容易被低估的需求,從合同簽署、報表生成到知識庫管理,DOCX轉PDF的需求無處不在,今天我們就介紹一款使用純Java實現(xiàn) DOCX 轉 PDF的方案,超級簡單,簡直不要太爽,需要的朋友可以參考下

前言

在當今的企業(yè)級應用中,文檔格式轉換是一個高頻但又容易被低估的需求。從合同簽署、報表生成到知識庫管理,DOCX轉PDF的需求無處不在。市面上的解決方案五花八門,但真正能平衡"成本、質量、可維護性"的方案卻寥寥無幾。今天我們就介紹一款使用純Java實現(xiàn) DOCX 轉 PDF的方案,超級簡單,簡直不要太爽。

Docx4j的核心優(yōu)勢

Docx4j之所以成為企業(yè)級應用的首選方案,主要得益于其以下核心優(yōu)勢:
1.純Java實現(xiàn):無需安裝任何外部軟件,部署簡單
2.開源免費:采用Apache 2.0 License,可商用
3.樣式保真度高:能完美保留Word文檔中的圖片、表格、頁眉頁腳等復雜格式
4.易于集成:可以無縫集成到SpringBoot項目中

實戰(zhàn)演示

項目依賴配置

在pom.xml中添加docx4j相關依賴:

<dependency>
    <groupId>org.docx4j</groupId>
    <artifactId>docx4j-core</artifactId>
    <!-- 使用兼容 Java 8 的版本  Java 11  11.4.8-->
    <version>8.3.4</version>
</dependency>
<dependency>
    <groupId>org.docx4j</groupId>
    <artifactId>docx4j-JAXB-ReferenceImpl</artifactId>
    <version>8.3.4</version>
</dependency>
<dependency>
    <groupId>org.docx4j</groupId>
    <artifactId>docx4j-export-fo</artifactId>
    <version>8.3.4</version>
</dependency>

核心工具類

創(chuàng)建DocxToPdfUtil工具類,封裝DOCX轉PDF的核心邏輯:

/**
 * DocxToPdfUtil
 * @author senfel
 * @version 1.0
 * @date 2026/2/4 17:21
 */
@Slf4j
public class DocxToPdfUtil {
    /**
     * 將docx文件轉換為 PDF
     * @param docxPath
     * @param pdfPath
     * @author senfel
     * @date 2026/2/4 17:22
     * @return void
     */
    public static void convert(String docxPath, String pdfPath) {
        try {
            // 1. 加載 Word 文檔
            WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(new File(docxPath));
            // 2. 配置字體映射(防止中文亂碼)
            Mapper fontMapper = new IdentityPlusMapper();
            PhysicalFonts.discoverPhysicalFonts();
            PhysicalFont simsun = PhysicalFonts.get("SimSun");
            if (simsun != null) {
                fontMapper.put("SimSun", simsun);
                // 常用中文字體映射表
                fontMapper.put("隸書", PhysicalFonts.get("LiSu"));
                fontMapper.put("宋體", PhysicalFonts.get("SimSun"));
                fontMapper.put("微軟雅黑", PhysicalFonts.get("Microsoft YaHei"));
                fontMapper.put("黑體", PhysicalFonts.get("SimHei"));
                fontMapper.put("楷體", PhysicalFonts.get("KaiTi"));
                fontMapper.put("新宋體", PhysicalFonts.get("NSimSun"));
                fontMapper.put("華文行楷", PhysicalFonts.get("STXingkai"));
                fontMapper.put("華文仿宋", PhysicalFonts.get("STFangsong"));
                fontMapper.put("仿宋", PhysicalFonts.get("FangSong"));
                fontMapper.put("幼圓", PhysicalFonts.get("YouYuan"));
                fontMapper.put("華文宋體", PhysicalFonts.get("STSong"));
                fontMapper.put("華文中宋", PhysicalFonts.get("STZhongsong"));
                fontMapper.put("等線", PhysicalFonts.get("SimSun"));
                fontMapper.put("等線 Light", PhysicalFonts.get("SimSun"));
                fontMapper.put("華文琥珀", PhysicalFonts.get("STHupo"));
                fontMapper.put("華文隸書", PhysicalFonts.get("STLiti"));
                fontMapper.put("華文新魏", PhysicalFonts.get("STXinwei"));
                fontMapper.put("華文彩云", PhysicalFonts.get("STCaiyun"));
                fontMapper.put("方正姚體", PhysicalFonts.get("FZYaoti"));
                fontMapper.put("方正舒體", PhysicalFonts.get("FZShuTi"));
                fontMapper.put("華文細黑", PhysicalFonts.get("STXihei"));
                fontMapper.put("宋體擴展", PhysicalFonts.get("simsun-extB"));
                fontMapper.put("仿宋_GB2312", PhysicalFonts.get("FangSong_GB2312"));
                fontMapper.put("新細明體", PhysicalFonts.get("SimSun"));
                // 修復體(正文)/宋體(標題亂碼
                PhysicalFonts.put("PMingLiU", PhysicalFonts.get("SimSun"));
                PhysicalFonts.put("新細明體", PhysicalFonts.get("SimSun"));
                wordMLPackage.setFontMapper(fontMapper);
            }
            // 3. 創(chuàng)建輸出流并執(zhí)行轉換
            try (FileOutputStream os = new FileOutputStream(pdfPath)) {
                Docx4J.toPDF(wordMLPackage, os);
            }
            log.info("PDF 生成成功:{}" ,pdfPath);
        } catch (Exception e) {
            log.error("轉換失?。簕}",e.getMessage(),e);
        }
    }
}

測試用例

創(chuàng)建類DocxToPdfTest,驗證提供DOCX轉PDF的工具類:

/**
 * DocxToPdfTest
 * @author senfel
 * @version 1.0
 * @date 2026/2/4 17:26
 */
@SpringBootTest
public class DocxToPdfTest {


    /**
     * covertTest
     * @author senfel
     * @date 2026/2/4 17:27
     * @return void
     */
    @Test
    public void covertTest() {
        String docxPath = "D:\\blank\\小程序簡介中英文.docx";
        String pdfPath = "D:\\blank\\小程序簡介中英文.pdf";
        DocxToPdfUtil.convert(docxPath, pdfPath);
    }
}

解決中文亂碼

Windows

在Windows環(huán)境中,中文亂碼主要是由于字體映射問題導致的。我們需要在工具類中添加中文字體映射表,確保docx4j能夠正確識別和轉換中文字體。

Linux

在Linux環(huán)境中,中文亂碼問題更為復雜,需要安裝Windows字體。具體步驟如下:

1.新建字體文件夾:

sudo mkdir -p /usr/share/fonts/win_font

2.拷貝Windows字體文件:將Windows系統(tǒng)中路徑為C:\Windows\Fonts的字體文件拷貝到Linux的/usr/share/fonts/win_font目錄中。

3.加載字體文件:

cd /usr/share/fonts/win_font
sudo mkfontscale     # 生成字體縮放文件
sudo mkfontdir       # 生成字體目錄索引
sudo fc-cache -fv    # 刷新字體緩存

4.驗證字體安裝:

fc-list :lang=zh

總結

Docx4j是一個優(yōu)秀的開源文檔處理工具,它為SpringBoot項目提供了一種輕量級、高性能的DOCX轉PDF解決方案。通過本文的介紹,我們了解了docx4j的核心優(yōu)勢、并使用springboot實戰(zhàn)落了一個簡單的案例。在實際項目中,我們可以根據(jù)業(yè)務需求和技術選型戰(zhàn)略,選擇最適合的文檔轉換方案。對于大多數(shù)企業(yè)級應用來說,Docx4j無疑是一個性價比極高的選擇。

以上就是SpringBoot使用Docx4j實現(xiàn)DOCX轉PDF功能的詳細內容,更多關于SpringBoot DOCX轉PDF的資料請關注腳本之家其它相關文章!

相關文章

  • idea實現(xiàn)讓打開的文件名tab多行顯示

    idea實現(xiàn)讓打開的文件名tab多行顯示

    本文介紹了IDEA中關于編輯標簽頁的設置,特別是當打開的文件太多時,可以通過設置將編輯標簽頁全部顯示在同一行,方便進行點擊選中操作
    2026-03-03
  • Spring boot整合log4j2過程解析

    Spring boot整合log4j2過程解析

    這篇文章主要介紹了Spring boot整合log4j2過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • Java 實現(xiàn)鏈表結點插入

    Java 實現(xiàn)鏈表結點插入

    這篇文章主要介紹了Java 實現(xiàn)鏈表結點插入操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • springboot實現(xiàn)極驗校驗的項目實踐

    springboot實現(xiàn)極驗校驗的項目實踐

    在系統(tǒng)業(yè)務中,需要想客戶發(fā)送手機驗證碼,進行驗證后,才能提交,本文主要介紹了springboot實現(xiàn)極驗校驗的項目實踐,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • Guava中這些Map技巧可以讓代碼量減少了50%

    Guava中這些Map技巧可以讓代碼量減少了50%

    guava提供了非常強大的操作,可以讓我們把java代碼寫的很簡潔,下面這篇文章主要給大家介紹了關于Guava中這些Map使用技巧可以讓代碼量減少了50%的相關資料,需要的朋友可以參考下
    2022-11-11
  • Java實現(xiàn)多線程聊天室

    Java實現(xiàn)多線程聊天室

    這篇文章主要為大家詳細介紹了Java實現(xiàn)多線程聊天室,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • Java8中List轉Map(Collectors.toMap) 的技巧分享

    Java8中List轉Map(Collectors.toMap) 的技巧分享

    在最近的工作開發(fā)之中,慢慢習慣了很多Java8中的Stream的用法,很方便而且也可以并行的去執(zhí)行這個流,這篇文章主要給大家介紹了關于Java8中List轉Map(Collectors.toMap) 的相關資料,需要的朋友可以參考下
    2021-07-07
  • 使用java swing實現(xiàn)qq登錄界面示例分享

    使用java swing實現(xiàn)qq登錄界面示例分享

    這篇文章主要介紹了使用java swing實現(xiàn)qq登錄界面示例,需要的朋友可以參考下
    2014-04-04
  • MyBatis-Plus攔截器對敏感數(shù)據(jù)實現(xiàn)加密

    MyBatis-Plus攔截器對敏感數(shù)據(jù)實現(xiàn)加密

    做課程項目petstore時遇到需要加密屬性的問題,而MyBatis-Plus為開發(fā)者提供了攔截器的相關接口,本文主要介紹通過MyBatis-Plus的攔截器接口自定義一個攔截器類實現(xiàn)敏感數(shù)據(jù)如用戶密碼的加密功能,感興趣的可以了解一下
    2021-11-11
  • Java實現(xiàn)郵件發(fā)送QQ郵箱帶附件

    Java實現(xiàn)郵件發(fā)送QQ郵箱帶附件

    這篇文章主要為大家詳細介紹了Java實現(xiàn)郵件發(fā)送QQ郵箱帶附件功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03

最新評論

同江市| 沧源| 天全县| 扶余县| 德州市| 巢湖市| 泾源县| 玛多县| 察隅县| 民勤县| 金阳县| 洱源县| 延边| 丘北县| 高平市| 盖州市| 花莲市| 德阳市| 津市市| 陵川县| 林周县| 鄄城县| 尚志市| 磐安县| 彩票| 会同县| 扶余县| 江达县| 马鞍山市| 陆良县| 景东| 彭州市| 福鼎市| 佛坪县| 牡丹江市| 乐东| 常德市| 洞头县| 东源县| 佛坪县| 买车|