Библиотека, которая может конвертировать документы Word doc (x) в pdf

#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