Как я могу преобразовать документ Word в PDF? - PullRequest
44 голосов
/ 11 июня 2010

Как я могу преобразовать документ Word в PDF, где документ содержит различные вещи, такие как таблицы. При попытке использовать iText исходный документ выглядит иначе, чем преобразованный PDF. Существует ли API / библиотека с открытым исходным кодом вместо вызова исполняемого файла, который я могу использовать?

Ответы [ 11 ]

46 голосов
/ 11 июня 2010

Это довольно сложная задача, еще сложнее, если вы хотите получить идеальные результаты (невозможно без использования Word), так как количество API, которые просто делают все это для вас на чистой Java и имеют открытый исходный код, равно нулю ( Обновление: я не прав, см. Ниже ).

Ваши основные параметры следующие:

  1. Использование сценария JNI / веб-службы C # и т. Д. MS Office (только опция для 100% идеальных результатов)
  2. Использование доступного скрипта API Open Office (на 90% лучше)
  3. Используйте Apache POI & iText (очень большая работа, она никогда не будет идеальной).

Обновление - 2016-02-11 Вот урезанная копия моего сообщения в блоге на эту тему, в которой описаны существующие продукты, поддерживающие преобразование Word в PDF в Java.

Преобразование документов Microsoft Office (Word, Excel) в PDF-файлы на Java

Три продукта, о которых я знаю, могут отображать документы Office:

yeokm1 / документы к PDF-конвертер Неправильное обслуживание, Чистая Java, Открытый исходный код Связывает несколько библиотек для выполнения преобразования.

xdocreport Активно разработано, Pure Java, Open Source Это Java API для объединения XML-документа, созданного с помощью MS Office (docx) или OpenOffice (odt), LibreOffice (odt) с моделью Java для генерации отчета и преобразования его, если вам нужен другой формат (PDF, XHTML ...).

SDK со снежными изображениями Закрытый источник, чистая Java Snowbound является 100% Java-решением и стоит более 2500 долларов. Он содержит примеры, описывающие, как конвертировать документы в ознакомительную загрузку.

OpenOffice API Открытый исходный код, а не чистая Java - требуется установленный Open Office OpenOffice - это встроенный пакет Office, который поддерживает API Java. Это поддерживает чтение документов Office и написание документов PDF. SDK содержит пример преобразования документов (examples / java / DocumentHandling / DocumentConverter.java). Для записи PDF-файлов вам нужно передать писателя «writer_pdf_Export», а не «MS Word 97». Или вы можете использовать API-оболочку JODConverter .

JDocToPdf - Мертв с 2016-02-11 Использует Apache POI для чтения документа Word и iText для записи PDF. Полностью бесплатная, 100% Java, но имеет некоторые ограничения .

8 голосов
/ 13 августа 2010

Вы можете использовать JODConverter для этой цели.Он может быть использован для преобразования документов между различными офисными форматами.такие как:

  1. Microsoft Office для OpenDocument и наоборот
  2. Любой формат в PDF
  3. И также поддерживает много других преобразований
  4. также может конвертировать документы MS Office 2007 в PDF, а также почти во всех форматах

Более подробную информацию об этом можно найти здесь: http://www.artofsolving.com/opensource/jodconverter

5 голосов
/ 02 февраля 2016

Проверьте docs-to-pdf-конвертер на github . Это легкое решение, разработанное специально для преобразования документов в PDF.

Почему?

Я хотел простую программу, которая может конвертировать документы Microsoft Office в PDF, но без таких зависимостей, как LibreOffice или дорого запатентованные решения. Видя как конвертировать код и библиотеки каждый отдельный формат разбросан по сети, я решил объединить все эти решения в одну программу. По пути я решил добавить поддержку ODT, так как я тоже столкнулся с кодом.

2 голосов
/ 18 августа 2018

Вы можете использовать Cloudmersive нативную библиотеку Java.Он бесплатен для 50 000 конверсий в месяц и, по моему опыту, гораздо более точен, чем другие методы, такие как методы iText или Apache, основанные на POI.Документы на самом деле выглядят так же, как и в Microsoft Word, который для меня является ключевым.Между прочим, он также может выполнять XLSX, PPTX и устаревшие преобразования DOC, XLS и PPT в PDF.

Вот как выглядит код, сначала добавьте свой импорт:

import com.cloudmersive.client.invoker.ApiClient;
import com.cloudmersive.client.invoker.ApiException;
import com.cloudmersive.client.invoker.Configuration;
import com.cloudmersive.client.invoker.auth.*;
import com.cloudmersive.client.ConvertDocumentApi;

Затемпреобразовать файл:

ApiClient defaultClient = Configuration.getDefaultApiClient();

// Configure API key authorization: Apikey
ApiKeyAuth Apikey = (ApiKeyAuth) defaultClient.getAuthentication("Apikey");
Apikey.setApiKey("YOUR API KEY");

ConvertDocumentApi apiInstance = new ConvertDocumentApi();
File inputFile = new File("/path/to/input.docx"); // File to perform the operation on.
try {
  byte[] result = apiInstance.convertDocumentDocxToPdf(inputFile);
  System.out.println(result);
} catch (ApiException e) {
  System.err.println("Exception when calling ConvertDocumentApi#convertDocumentDocxToPdf");
e.printStackTrace();
}

Вы можете бесплатно получить ключ API для преобразования документов на портале.

1 голос
/ 19 марта 2019

Использование JACOB вызов Office Word - это идеальное решение на 100%. Но он поддерживается только на платформе Windows , поскольку требуется Office Word .

  1. Загрузить архив JACOB (последняя версия 1.19);
  2. Добавьте jacob.jar в путь к классам вашего проекта;
  3. Добавьте jacob-1.19-x32.dll или jacob-1.19-x64.dll (зависит от вашей версии jdk) в ... \ Java \ jdk1.x.x_xxx \ jre \ bin
  4. Используя API JACOB, вызовите Office Word для преобразования doc / docx в pdf.

    public void convertDocx2pdf(String docxFilePath) {
    File docxFile = new File(docxFilePath);
    String pdfFile = docxFilePath.substring(0, docxFilePath.lastIndexOf(".docx")) + ".pdf";
    
    if (docxFile.exists()) {
        if (!docxFile.isDirectory()) { 
            ActiveXComponent app = null;
    
            long start = System.currentTimeMillis();
            try {
                ComThread.InitMTA(true); 
                app = new ActiveXComponent("Word.Application");
                Dispatch documents = app.getProperty("Documents").toDispatch();
                Dispatch document = Dispatch.call(documents, "Open", docxFilePath, false, true).toDispatch();
                File target = new File(pdfFile);
                if (target.exists()) {
                    target.delete();
                }
                Dispatch.call(document, "SaveAs", pdfFile, 17);
                Dispatch.call(document, "Close", false);
                long end = System.currentTimeMillis();
                logger.info("============Convert Finished:" + (end - start) + "ms");
            } catch (Exception e) {
                logger.error(e.getLocalizedMessage(), e);
                throw new RuntimeException("pdf convert failed.");
            } finally {
                if (app != null) {
                    app.invoke("Quit", new Variant[] {});
                }
                ComThread.Release();
            }
        }
    }
    

    }

1 голос
/ 06 мая 2015

Я думаю, что JOD Converter является самым простым способом реализации, пожалуйста, обратитесь к ссылке ниже для получения дополнительной информации.

http://mytechbites.blogspot.in/2014/10/convert-documents-to-pdf-in-java.html

1 голос
/ 11 июня 2010

Я согласен с плакатами, в которых OpenOffice представлен как высококачественный инструмент для импорта / экспорта документов word / pdf с API Java, и он также работает на разных платформах. Фильтры импорта / экспорта OpenOffice довольно мощные и сохраняют большинство форматирования при конвертации в различные форматы, включая PDF. Docmosis и JODReports добавьте стоимость, чтобы упростить жизнь, чем непосредственное изучение API OpenOffice, что может быть сложным из-за стиля API UNO и ошибок, связанных с падением.

0 голосов
/ 31 марта 2019

Это уже 2019 год, я не могу поверить, что до сих пор нет простого и удобного способа конвертировать самый популярный документ Micro $ oft Word в формат Adobe PDF в мире Java.

Я почти опробовал все методы, упомянутые выше, и нашел лучший, и единственный способ удовлетворить мои требования - использовать OpenOffice или LibreOffice. На самом деле я точно не знаю разницу между ними, кажется, они оба предоставляют soffice командную строку.

Мое требование:

  1. Он должен работать в Linux, а точнее в CentOS, а не в Windows, поэтому мы не можем установить на него Microsoft Office;
  2. Он должен поддерживать символы китайского языка, поэтому кодировка символов ISO-8859-1 не является выбором, она должна поддерживать Unicode.

Первое, что пришло в голову, это doc-to-pdf-converter, но он не нуждается в обслуживании, последнее обновление произошло 4 года назад, я не буду использовать решение "никто не поддерживает". Xdocreport кажется многообещающим выбором, но он может конвертировать только docx, но не doc двоичный файл, который является для меня обязательным. Использование Java для вызова OpenOffice API кажется хорошим, но слишком сложным для такого простого требования.

Наконец-то я нашел лучшее решение: используйте командную строку OpenOffice для завершения задания:

Runtime.getRuntime().exec("soffice --convert-to pdf -outdir . /path/some.doc");

Я всегда считаю, что самый короткий код - это лучший код (конечно, он должен быть понятен), вот и все.

0 голосов
/ 17 ноября 2013

unoconv , это инструмент python, работающий в UNIX. Хотя я использую Java для вызова оболочки в UNIX, она отлично работает для меня. Мой исходный код: UnoconvTool.java . Говорят, что и JODConverter, и unoconv используют open office / libre office.

docx4j / docxreport, POI, PDFBox хороши, но им не хватает некоторых форматов при конвертации.

0 голосов
/ 11 июня 2010

Изучите сценарии OpenOffice.org, чтобы выполнить эту работу за вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...