Безплатен Java API за конвертиране на висококачествен Word документ в PDF

Водеща open source библиотека дава възможност на Java разработчиците да конвертират MS Office DOCX, XLSX и PDF файлове с висока точност, използвайки родни приложения.

Какво е Documents4j?

documents4j е мощна open-source Java библиотека, създадена за конвертиране на документи между различни формати, като DOCX към PDF или XLSX към PDF. За разлика от много традиционни библиотеки, documents4j делегира процеса на конвертиране към родни приложения като Microsoft Word и Excel, гарантирайки висококачествен изход с минимални проблеми с форматирането. Библиотеката използва различен подход. Вместо да реимплементира логиката на конвертиране, тя действа като мост, делегирайки тежката работа на родни приложения (като Microsoft Word или Excel), които вече перфектно разбират тези формати. Това осигурява, че изходният документ — например PDF, генериран от Word файл — изглежда точно както би изглеждал, ако щяхте ръчно да кликнете "Save As" в MS Office.

Основната стойност на documents4j се състои в нейната точност. За бизнеси, които изискват професионално ниво на документиране, където всеки маргин и шрифт трябва да останат непокътнати, разчитането на open-source парсери може да е рисково. 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 решава това чрез вградената архитектура Remote Converter. Самостоятелен сървър за конвертиране (който вътрешно използва 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 Basic Authentication, за да се гарантира, че само упълномощени клиенти могат да изпращат заявки за конвертиране. Двете функции за сигурност могат да бъдат активирани с минимална конфигурация, което прави documents4j жизнеспособно решение дори в регулирани индустрии.

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

Конвертирането може да бъде ресурсоемко. documents4j ви позволява да планирате конвертирания да се изпълняват във фонов режим (асинхронно) с помощта на тип връщане Future. Освен това, тя поддържа механизъм за приоритизиране. Ако вашето приложение обработва голям обем заявки, можете да зададете по-висок приоритет на критичните документи, за да се гарантира, че те се преместят в началото на вътрешната опашка за задачи.

 Български