使用 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内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论