Безкоштовний 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 та роз’єднання логіки конвертації з основним застосунком через віддалений сервер. Використовуючи нативні додатки, він забезпечує незрівнянну точність порівняно з традиційними бібліотеками. Підтримка локальної та віддаленої обробки, паралельного виконання та балансування навантаження робить його надзвичайно підходящим для корпоративних систем.
Початок роботи з 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‑автентифікацію, щоб забезпечити, що лише авторизовані клієнти можуть надсилати запити на конвертацію. Обидві функції безпеки можна ввімкнути з мінімальними налаштуваннями, роблячи documents4j життєздатним рішенням навіть у регульованих галузях.
Асинхронна та пріоритетна обробка
Конвертації можуть вимагати багато ресурсів. documents4j дозволяє планувати конвертації, які будуть виконуватись у фоні (асинхронно) з використанням типу повернення Future