Подтвердить что ты не робот

Как я могу преобразовать документ Word в PDF?

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

4b9b3361

Ответ 1

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

Ваши основные параметры:

  • Использование веб-службы JNI/С#/etc script MS Office (только для 100% отличных результатов)
  • Использование доступных API script Open Office (90 +% отлично)
  • Использование Apache POI и iText (очень большая работа, никогда не будет идеальной).

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

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

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

yeokm1/docs-to-pdf-converter Нерегулярно поддерживается, Чистая Java, Open Source Связывает вместе несколько библиотек для выполнения преобразования.

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

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

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

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

Ответ 2

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

  • Microsoft Office для OpenDocument и наоборот
  • Любой формат для PDF
  • И поддерживает еще много конверсий.
  • Он также может конвертировать документы MS Office 2007 в формат PDF, а также практически со всеми форматами.

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

Ответ 3

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

Зачем?

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

Ответ 4

Вы можете использовать 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 преобразования документов на портале.

Ответ 5

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

Ответ 7

Я не пробовал использовать его для MS Word, но у меня был хороший успех при чтении документов MS Excel с использованием Apache POI - http://poi.apache.org/

Ответ 8

Посмотрите на сценарий OpenOffice.org, чтобы выполнить эту работу для вас.

Ответ 9

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

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

Ответ 10

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

  1. Скачать архив JACOB (последняя версия 1.19);
  2. Добавьте jacob.jar в classpath вашего проекта;
  3. Добавьте jacob-1.19-x32.dll или jacob-1.19-x64.dll (зависит от вашей версии jdk) в... \Java\jdk1.x.x_xxx\jre\bin
  4. Используя JACOB API, вызовите 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();
            }
        }
    }
    

    }

Ответ 11

Это уже 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");

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