Java使用docx4j实现将Word文档转换为PDF

 更新时间:2026年04月02日 15:14:21   作者:XDOC  
这篇文章主要为大家详细介绍了Java如何使用docx4j实现将Word文档转换为PDF,核心是通过 XSL-FO + Apache FOP 进行格式转换,有需要的可以了解下

使用 docx4j 实现 DOCX 转 PDF,核心是通过 XSL-FO + Apache FOP 进行格式转换。以下是完整、可直接运行的方案(Maven + Java)。

一、核心依赖(Maven)

需引入 docx4j-core 和 PDF 导出模块 docx4j-export-fo

<dependencies>
    <!-- docx4j 核心库 -->
    <dependency>
        <groupId>org.docx4j</groupId>
        <artifactId>docx4j-core</artifactId>
        <version>11.5.4</version>
    </dependency>
    <!-- FO 导出(转PDF必需) -->
    <dependency>
        <groupId>org.docx4j</groupId>
        <artifactId>docx4j-export-fo</artifactId>
        <version>11.5.4</version>
    </dependency>
    <!-- JAXB 实现(JDK 9+ 必须显式引入) -->
    <dependency>
        <groupId>org.docx4j</groupId>
        <artifactId>docx4j-JAXB-ReferenceImpl</artifactId>
        <version>11.5.4</version>
    </dependency>
</dependencies>

二、最简转换代码(含中文支持)

import org.docx4j.Docx4J;
import org.docx4j.fonts.IdentityPlusMapper;
import org.docx4j.fonts.Mapper;
import org.docx4j.fonts.PhysicalFonts;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
public class DocxToPdfConverter {
    public static void convert(String docxPath, String pdfPath) throws Exception {
        // 1. 加载 DOCX 文件
        WordprocessingMLPackage pkg = WordprocessingMLPackage.load(new File(docxPath));
        // 2. 配置字体映射(解决中文乱码/方框问题)
        Mapper fontMapper = new IdentityPlusMapper();
        // 自动扫描系统字体
        PhysicalFonts.discoverPhysicalFonts();
        // 常用中文字体映射(Windows/Linux通用)
        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("LiSu"));
        pkg.setFontMapper(fontMapper);
        // 3. 转换并输出 PDF
        try (OutputStream os = new FileOutputStream(pdfPath)) {
            // FLAG_EXPORT_PREFER_XSL:兼容性最好
            Docx4J.toPDF(pkg, os);
        }
    }
    // 测试
    public static void main(String[] args) throws Exception {
        convert("input.docx", "output.pdf");
        System.out.println("转换完成");
    }
}

三、测试结果

原始文档

转换效果

四、结论

格式兼容性问题比较多,简单文档可以使用,兼容性要求高的情况下,建议放弃

由于不能预知要转换的文档中使用了哪些中文字体,可能出现###,这个问题比较严重

到此这篇关于Java使用docx4j实现将Word文档转换为PDF的文章就介绍到这了,更多相关Java docx4j实现Word转PDF内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 深入解析Java反射之基础篇

    深入解析Java反射之基础篇

    JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,这篇文章主要给大家介绍了关于Java反射之基础篇的相关资料,需要的朋友可以参考下
    2021-11-11
  • Springboot项目启动到一半卡住了,不报错问题及解决

    Springboot项目启动到一半卡住了,不报错问题及解决

    这篇文章主要介绍了Springboot项目启动到一半卡住了,不报错问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • Java处理日期时间的方法汇总

    Java处理日期时间的方法汇总

    这篇文章主要给大家介绍了利用Java中的Calendar 类处理日期时间的方法汇总,其中包括取日期的每部分、取当月的第一天或最后一天、求两个日期之间相隔的天数以及一年前的日期等等的示例代码,有需要的朋友们可以直接参考借鉴,下面来一起看看吧。
    2016-12-12
  • apollo与springboot集成实现动态刷新配置的教程详解

    apollo与springboot集成实现动态刷新配置的教程详解

    这篇文章主要介绍了apollo与springboot集成实现动态刷新配置,本文分步骤给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • Java OSS批量下载并压缩为ZIP代码实例

    Java OSS批量下载并压缩为ZIP代码实例

    这篇文章主要介绍了Java OSS批量下载并压缩为ZIP代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • 基于SpringMVC拦截器实现接口耗时监控功能

    基于SpringMVC拦截器实现接口耗时监控功能

    本文呢主要介绍了基于SpringMVC拦截器实现的接口耗时监控功能,统计接口的耗时情况属于一个可以复用的功能点,因此这里直接使用 SpringMVC的HandlerInterceptor拦截器来实现,需要的朋友可以参考下
    2024-02-02
  • Springboot实现前后端分离excel下载

    Springboot实现前后端分离excel下载

    这篇文章主要介绍了Springboot实现前后端分离excel下载,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • 详解Spring框架入门

    详解Spring框架入门

    这篇文章主要介绍了详解Spring框架入门,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • Java正则表达式实现在文本中匹配查找换行符的方法【经典实例】

    Java正则表达式实现在文本中匹配查找换行符的方法【经典实例】

    这篇文章主要介绍了Java正则表达式实现在文本中匹配查找换行符的方法,结合具体实例分析了java正则匹配查找换行符的实现技巧与匹配模式相关操作注意事项,需要的朋友可以参考下
    2017-04-04
  • 谈谈你可能并不了解的java枚举

    谈谈你可能并不了解的java枚举

    这篇文章主要给大家介绍了一些关于你可能并不了解的java枚举的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09

最新评论