在 Java 开发中,将 Word 文档(.docx)转换为 PDF 是一个常见的需求。本文介绍如何通过开源库实现这一功能,并提供完整的配置说明。
1. 所需依赖库
推荐使用以下组合:
- Apache POI:用于读取 Word 文档内容。
- iText 或 OpenPDF:用于生成 PDF 文件。
- Docx4j(可选):更强大的 Word 处理能力,支持直接导出 PDF。
2. Maven 依赖配置(pom.xml)
<dependencies>
<!-- Apache POI for .docx -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.4</version>
</dependency>
<!-- OpenPDF (open-source fork of iText) -->
<dependency>
<groupId>com.github.librepdf</groupId>
<artifactId>openpdf</artifactId>
<version>1.3.30</version>
</dependency>
<!-- Optional: docx4j for direct conversion -->
<dependency>
<groupId>org.docx4j</groupId>
<artifactId>docx4j-export-fo</artifactId>
<version>11.4.7</version>
</dependency>
</dependencies>
3. 简单转换示例(使用 Docx4j)
import org.docx4j.convert.in.xhtml.XHTMLImporterImpl;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
public class WordToPdfConverter {
public static void convert(String wordPath, String pdfPath) throws Exception {
InputStream in = Files.newInputStream(Paths.get(wordPath));
WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(in);
OutputStream out = Files.newOutputStream(Paths.get(pdfPath));
XHTMLImporterImpl.convert(wordMLPackage, out, null);
}
}
4. 注意事项
- 确保 Word 文档格式为
.docx(不支持旧版.doc)。 - 复杂样式(如表格、图片)可能在转换后略有差异。
- 生产环境建议增加异常处理和日志记录。
5. 常见问题
Q:转换后中文显示乱码?
A:需在 PDF 生成时嵌入中文字体,或使用支持中文的字体配置。
Q:能否批量转换?
A:可以,只需循环调用转换方法即可。