Безплатен 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 среда и отделяне на логиката за конвертиране от вашето основно приложение чрез отдалечен сървър. Като се възползва от родни приложения, тя осигурява несравнима точност в сравнение с традиционните библиотеки. Поддръжката ѝ за локална и отдалечена обработка, конкурентно изпълнение и балансиране на натоварването я прави изключително подходяща за корпоративни системи.
Започнете с 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