Генерация PDF в Java: обзор лучших библиотек (iText, Apache PDFBox, OpenPDF)

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Генерация PDF в Java: обзор библиотек iText, Apache PDFBox и OpenPDF

Создание PDF-документов — одна из частых задач в корпоративных и веб-приложениях на Java: от формирования отчётов и счетов до экспорта данных и создания электронных книг. В Java существует несколько成熟 библиотек, каждая со своими сильными сторонами. В этой статье мы рассмотрим три основные: iText, Apache PDFBox и OpenPDF, приведём примеры кода и поможем выбрать подходящий инструмент.

1. iText — мощный, но с коммерческой лицензией

iText — самая популярная библиотека для работы с PDF. Она предоставляет полный контроль над содержимым: текст, изображения, таблицы, формы, водяные знаки, подписи. Начиная с версии 5.5.x, iText распространяется под двойной лицензией AGPL (бесплатно для open-source проектов) и коммерческой (для проприетарного ПО). Версия 7.x (iText 7) — более современная, модульная и высокопроизводительная.

Пример: создание простого PDF с текстом (iText 7)


import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Paragraph;

public class CreatePdfWithIText {
    public static void main(String[] args) throws Exception {
        String dest = "output_itext.pdf";
        PdfWriter writer = new PdfWriter(dest);
        PdfDocument pdf = new PdfDocument(writer);
        Document document = new Document(pdf);
        document.add(new Paragraph("Привет, мир PDF!"));
        document.add(new Paragraph("Это создано с помощью iText 7."));
        document.close();
        System.out.println("PDF успешно создан: " + dest);
    }
}

Плюсы iText:

  • Максимальная гибкость: поддержка таблиц, списков, стилей, шрифтов, изображений.
  • Работа с PDF/A, шифрованием, цифровыми подписями.
  • Высокая производительность и качество рендеринга.

Минусы:

  • Сложная лицензия (AGPL) — для коммерческого использования требуется покупка.
  • Довольно объёмный API, требующий изучения.

2. Apache PDFBox — бесплатный и открытый

Apache PDFBox — библиотека с открытым исходным кодом (лицензия Apache 2.0), которая позволяет создавать, редактировать и извлекать содержимое PDF. В отличие от iText, PDFBox не требует коммерческой лицензии для проприетарных проектов. Она также поддерживает работу с формами, шифрованием, встраиванием шрифтов.

Пример: создание PDF с текстом (PDFBox 2.x)


import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDType1Font;

import java.io.IOException;

public class CreatePdfWithPdfBox {
    public static void main(String[] args) throws IOException {
        try (PDDocument document = new PDDocument()) {
            PDPage page = new PDPage();
            document.addPage(page);
            try (PDPageContentStream contentStream = new PDPageContentStream(document, page)) {
                contentStream.beginText();
                contentStream.setFont(PDType1Font.HELVETICA, 14);
                contentStream.newLineAtOffset(50, 700);
                contentStream.showText("Привет, мир PDF!");
                contentStream.newLineAtOffset(0, -20);
                contentStream.showText("Это создано с помощью Apache PDFBox.");
                contentStream.endText();
            }
            document.save("output_pdfbox.pdf");
            System.out.println("PDF успешно создан: output_pdfbox.pdf");
        }
    }
}

Плюсы Apache PDFBox:

  • Полностью бесплатно (лицензия Apache 2.0) — подходит для любых проектов.
  • Поддержка извлечения текста, изображений, метаданных.
  • Простой API для базовых операций.

Минусы:

  • Меньше возможностей для сложного форматирования (таблицы, стили) — часто приходится позиционировать элементы вручную.
  • Производительность может быть ниже, чем у iText при работе с большими документами.

3. OpenPDF — форк iText с открытой лицензией

OpenPDF — это форк старой версии iText (5.x), который был выпущен под лицензией LGPL. Он сохранил привычный API iText, но при этом является полностью открытым и бесплатным. Подходит для проектов, где важна совместимость с legacy-кодом, написанным под iText 5.

Пример: создание PDF с таблицей (OpenPDF)


import com.lowagie                    

Рекомендаций