docx2pdf
是一个命令行工具和 Python 库,可在 macOS 和 Windows 上实现此功能。从 Java 中,您应该能够使用命令行调用该工具。在内部,这个 Python 库通过命令行调用 AppleScript 以使其在 macOS 上运行。
https://github.com/AlJohri/docx2pdf/
这种方法的好处是它使用了Word自己的API来创建像素完美的转换。
免责声明:我编写了这个工具。
我没有使用过它,但你可以尝试使用JODConverter
StackOverflow上的大多数人推荐Apache POI,它可以将大多数Microsoft Office格式转换为PDF,反之亦然。它是开源的。
有几个开源解决方案可用,但没有一个完全保留源文档的格式。
看看Muhimbi PDF 转换服务。它以可扩展和强大的 Windows 服务的形式安装在您的环境中,并专门为从基于服务器的应用程序(如 Java 和 ASP.NET)中使用而设计。
它附带了友好的基于 Web 服务的接口,允许它从大多数现代环境(如 Java 和 .NET)中使用。它支持所有常见的以及一些不太常见的文件格式。还包括水印和 PDF 安全功能。免责声明,我曾在这个产品上工作,因此通常的免责声明适用。话虽如此,它的工作效果非常好。
@BoffinbraiN,POI对于将Office文档转换为PDF并没有太大帮助。
Apache FOP可以用来完成这个任务,但如果你想使用FOP,首先需要将Office文档转换为XSL-FO。
在这里,docx4j可以提供帮助,因为它生成XSL-FO,并使用FOP 1.0创建PDF。
假设有OutputStream os和已加载的WordprocessingMLPackage wordMLPackage:
PdfConversion c = new org.docx4j.convert.out.pdf.viaXSLFO.Conversion(wordMLPackage);
c.output(os);
pom.xml
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.2</version>
</dependency>
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>fr.opensagres.poi.xwpf.converter.pdf</artifactId>
<version>2.0.4</version>
</dependency>
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>fr.opensagres.xdocreport.document</artifactId>
<version>2.0.4</version>
</dependency>
代码示例 - Java
try (XWPFDocument mailMergedXwpfDocument = PoiMailMerge.perform(templatePath, bodyMap);
ByteArrayOutputStream out = new ByteArrayOutputStream()) {
if (null == toFormat || "".equals(toFormat)) {
mailMergedXwpfDocument.write(out);
} else if ("pdf".equalsIgnoreCase(toFormat)){
try {
PdfOptions pdfOptions = PdfOptions.create();
// HERE convert docx as xwpf document into PDF
PdfConverter.getInstance().convert(mailMergedXwpfDocument, out, pdfOptions);
resultFileName = FilenameUtils.removeExtension(filename) + ".pdf";
} catch (IOException e) {
// ...
} catch (XWPFConverterException e) {
// ...
}
}
// here is the PDF as byte array
byte[] bytes = out.toByteArray();
将代码作为Azure函数完成
我将在Github上放置完整的可工作代码 https://github.com/donniexyz/ms-donniexyz-poi-azure-function