Бесплатный Java API для конвертации документа Word высокого качества в PDF

Ведущая открытая библиотека позволяет разработчикам Java конвертировать файлы MS Office DOCX, XLSX и PDF с высокой точностью, используя нативные приложения.

Что такое Documents4j ?

documents4j — мощная открытая Java‑библиотека, разработанная для конвертации документов между различными форматами, такими как DOCX в PDF или XLSX в PDF. В отличие от многих традиционных библиотек, documents4j делегирует процесс конвертации нативным приложениям, таким как Microsoft Word и Excel, обеспечивая высококачественный результат с минимальными проблемами форматирования. Библиотека использует иной подход. Вместо того чтобы пере‑реализовывать логику конвертации, она служит мостом, передавая тяжёлую работу нативным приложениям (например, Microsoft Word или Excel), которые уже полностью понимают эти форматы. Это гарантирует, что полученный документ — например PDF, созданный из Word‑файла — выглядит точно так же, как если бы вы вручную нажали «Сохранить как» в MS Office.

Главное преимущество documents4j — его точность. Для компаний, которым требуется профессиональная документация, где каждое поле и шрифт должны оставаться неизменными, полагаться на открытые парсеры может быть рискованно. documents4j особенно полезен для генерации счетов или отчётов из шаблонов, автоматизации документооборота в среде Windows и отделения логики конвертации от основного приложения с помощью удалённого сервера. Используя нативные приложения, он обеспечивает непревзойдённую точность по сравнению с традиционными библиотеками. Поддержка локальной и удалённой обработки, параллельного выполнения и балансировки нагрузки делает его очень подходящим для корпоративных систем.

Previous Next

Начало работы с documents4j

Рекомендуемый способ установки documents4j — через репозиторий Maven. Вы можете легко добавить библиотеку documents4j напрямую в свои Maven‑проекты с простыми настройками.

Maven‑репозиторий для documents4j


// Here’s a commonly used dependency (Local converter): 

<dependency>
<groupId>com.documents4j</groupId>
<artifactId>documents4j-local</artifactId>
<version>1.1.13</version>
</dependency>

//If you only need the API:
<dependency>
<groupId>com.documents4j</groupId>
<artifactId>documents4j-api</artifactId>
<version>1.1.13</version>
</dependency>

Установить documents4j с GitHub


git clone https://github.com/documents4j/documents4j.git
cd documents4j
cd documents4j-local-demo
mvn jetty:run

Конвертация Word в PDF через Java-библиотеку

В основе documents4j лежит элегантно спроектированный fluent‑API, делающий процесс конвертации документов естественным и читаемым. Интерфейс IConverter предоставляет цепочку в стиле builder, позволяющую указать исходный файл или поток, задать типы входного и выходного документа, установить приоритет конвертации и выбрать синхронное или асинхронное выполнение — всё в одном чистом выражении. API скрывает все детали реализации, поэтому ваша бизнес‑логика никогда не должна знать, запущен ли локальный или удалённый конвертер под капотом. Ниже простой пример, показывающий, как выполнить процесс конвертации.

Как конвертировать Word в PDF через Java‑библиотеку?

import com.documents4j.api.DocumentType;
import com.documents4j.api.IConverter;
import com.documents4j.job.LocalConverter;

import java.io.File;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;

public class DocumentConverter {
    public static void main(String[] args) {
        // 1. Specify the source and target files
        File wordFile = new File("C:/documents/input.docx");
        File targetFile = new File("C:/documents/output.pdf");

        // 2. Initialize the converter (Local instance)
        IConverter converter = LocalConverter.builder()
                .workerPool(20, 25, 2, TimeUnit.SECONDS)
                .processTimeout(5, TimeUnit.SECONDS)
                .build();

        // 3. Execute the conversion fluently
        boolean success = converter.convert(wordFile).as(DocumentType.MS_WORD)
                                   .to(targetFile).as(DocumentType.PDF)
                                   .execute();

        if (success) {
            System.out.println("Conversion completed successfully!");
        }

        // 4. Always shut down the converter to release native resources
        converter.shutDown();
    }
}

Удаленный конвертер с REST API сервером

Не каждый сервер Java‑приложений имеет установленный MS Office — и не должен. documents4j решает эту проблему с помощью встроенной архитектуры удалённого конвертера. Автономный сервер конвертации (который внутри использует LocalConverter) работает на отдельной машине с Windows, где установлен MS Office, и предоставляет REST API. Ваше Java‑приложение использует RemoteConverter, который отправляет документы по HTTP и получает обратно сконвертированный файл. Весь процесс обмена невидим для кода приложения; тот же интерфейс IConverter используется с обеих сторон.

Как выполнить удаленную конвертацию Word‑документов внутри Java‑приложений?

import com.documents4j.api.DocumentType;
import com.documents4j.api.IConverter;
import com.documents4j.job.RemoteConverter;

import java.io.*;
import java.util.concurrent.TimeUnit;

public class RemoteConverterExample {

    public static void main(String[] args) throws Exception {

        // The RemoteConverter connects to the standalone server
        IConverter converter = RemoteConverter.builder()
                .baseFolder(new File("/tmp/documents4j"))
                .workerPool(10, 20, 5, TimeUnit.SECONDS)
                // Timeout for each HTTP conversion request
                .requestTimeout(30, TimeUnit.SECONDS)
                // URI of the running conversion server
                .baseUri("http://192.168.1.100:9998")
                .build();

        // Convert using InputStream / OutputStream — recommended for RemoteConverter
        // because data is already serialized for HTTP transport
        try (InputStream source = new FileInputStream("/input/contract.docx");
             OutputStream target = new FileOutputStream("/output/contract.pdf")) {

            boolean success = converter
                    .convert(source).as(DocumentType.MS_WORD)
                    .to(target).as(DocumentType.PDF)
                    .execute();

            System.out.println("Remote conversion success: " + success);
        }

        converter.shutDown();
    }
}          

SSL‑шифрование и базовая аутентификация

В производственных средах файлы документов часто содержат конфиденциальные бизнес‑, юридические или персональные данные. Передача их по обычному HTTP представляет серьёзный риск безопасности. Библиотека documents4j решает эту проблему, предоставляя встроенную поддержку SSL/TLS‑шифрования между клиентом и сервером конвертации, настраиваемую через стандартный SSLContext Java. Автономный сервер также поддерживает базовую HTTP‑аутентификацию, гарантируя, что только авторизованные клиенты могут отправлять запросы на конвертацию. Оба механизма безопасности могут быть включены с минимальными настройками, что делает documents4j жизнеспособным решением даже в регулируемых отраслях.

Асинхронная и приоритетная обработка

Конверсии могут требовать значительных ресурсов. documents4j позволяет планировать конверсии для выполнения в фоновом режиме (асинхронно), используя тип возврата Future. Кроме того, он поддерживает механизм приоритизации. Если ваше приложение обрабатывает большой объём запросов, вы можете назначить более высокий приоритет критическим документам, чтобы они перемещались в начало внутренней очереди задач.

 Русский