#java #pdf #ms-word
#java #PDF #ms-word
Вопрос:
Я работаю над программным обеспечением, которое должно иметь возможность автоматически конвертировать документы Word в PDF-файлы. Есть ли какая-либо библиотека, предпочтительно поддерживающая Java, которая может достичь этого? Она может быть бесплатной или коммерческой, это не имеет значения.
Спасибо
Ответ №1:
docx2pdf
это инструмент командной строки и библиотека python, которые могут достичь этого в macOS и Windows. С Java вы должны иметь возможность вызывать инструмент с помощью командной строки. Внутренне эта библиотека python вызывает AppleScript из командной строки, чтобы заставить его работать на macOS.
https://github.com/AlJohri/docx2pdf/
Преимущество этого подхода в том, что он использует собственные API Word для создания идеального преобразования в пикселях.
Отказ от ответственности: я написал этот инструмент.
Комментарии:
1. Примечание: Это может быть очевидно, но для работы скрипта в этой библиотеке требуется установка Word.
Ответ №2:
Я ею не пользовался, но вы могли бы попробовать JODConverter
Ответ №3:
Большинство пользователей StackOverflow рекомендуют Apache POI, который может конвертировать большинство форматов Microsoft Office в PDF и наоборот. Это с открытым исходным кодом.
Комментарии:
1. POI не поддерживает формат PDF. Я позволю вам программно прочитать документ Office, который вы затем можете перенести в программу PDF Writer, если хотите.
Ответ №4:
@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);
Смотрите далее пример docx4j CreatePdf.java .
Ответ №5:
Доступно несколько решений с открытым исходным кодом, но ни одно из них не сохраняет форматирование исходного документа полностью.
Ознакомьтесь с сервисами Muhimbi PDF Converter. Она устанавливается в вашей среде как масштабируемая и надежная служба Windows и специально разработана для использования в серверных приложениях, таких как Java и ASP.NET .
Она поставляется с удобным интерфейсом на основе веб-сервисов, который позволяет использовать ее в большинстве современных сред, таких как Java и .NET. Она поддерживает все распространенные, а также некоторые не очень распространенные форматы файлов. Также включены водяные знаки и защита PDF.
Отказ от ответственности, я работал над этим продуктом, поэтому применяются обычные оговорки. Сказав это, она отлично работает.
Ответ №6:
Вы можете использовать apache-poi в тандеме с opensagres-xdocreport.
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
Я выложу полный рабочий код на githubhttps://github.com/donniexyz/ms-donniexyz-poi-azure-function