Генерация PDF отчётов на Java: библиотеки и примеры

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

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

Начать курс

Генерация PDF отчётов на Java: обзор библиотек и примеры кода

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

1. iText — мощная и гибкая библиотека

iText (сейчас iText 8.x) — одна из самых популярных библиотек для работы с PDF на Java. Поддерживает создание документов с нуля, редактирование существующих, добавление изображений, таблиц, закладок, водяных знаков, а также работу с формами и цифровыми подписями.

Лицензирование: iText распространяется под двойной лицензией — AGPL (бесплатно для open-source проектов) и коммерческая (для проприетарного ПО).

Пример: создание простого PDF-документа с текстом и таблицей

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

public class ItextPdfExample {
    public static void main(String[] args) throws Exception {
        String dest = "report.pdf";
        PdfWriter writer = new PdfWriter(dest);
        PdfDocument pdf = new PdfDocument(writer);
        Document document = new Document(pdf);

        // Заголовок
        document.add(new Paragraph("Отчёт о продажах").setBold().setFontSize(18));

        // Таблица
        Table table = new Table(3);
        table.addCell(new Cell().add(new Paragraph("Товар")));
        table.addCell(new Cell().add(new Paragraph("Количество")));
        table.addCell(new Cell().add(new Paragraph("Сумма")));
        table.addCell("Ноутбук");
        table.addCell("5");
        table.addCell("450 000 ₽");
        table.addCell("Мышь");
        table.addCell("12");
        table.addCell("6 000 ₽");

        document.add(table);
        document.close();
        System.out.println("PDF создан!");
    }
}

Этот код создаёт PDF с заголовком «Отчёт о продажах» и таблицей из трёх колонок. iText автоматически обрабатывает переносы строк и разбивку на страницы.

2. Apache PDFBox — лёгкая и бесплатная альтернатива

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

Недостаток: работа с таблицами и сложной вёрсткой требует больше ручного кода, чем в iText.

Пример: создание PDF с текстом и изображением

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDType0Font;
import java.io.File;

public class PdfBoxExample {
    public static void main(String[] args) throws Exception {
        try (PDDocument document = new PDDocument()) {
            PDPage page = new PDPage();
            document.addPage(page);

            PDPageContentStream contentStream = new PDPageContentStream(document, page);
            // Загрузка шрифта (обязательно!)
            PDType0Font font = PDType0Font.load(document, new File("LiberationSans-Regular.ttf"));
            contentStream.setFont(font, 14);
            contentStream.beginText();
            contentStream.newLineAtOffset(50, 700);
            contentStream.showText("Привет, мир PDFBox!");
            contentStream.endText();
            contentStream.close();

            document.save("pdfbox_example.pdf");
        }
        System.out.println("PDFBox PDF создан!");
    }
}

Обратите внимание: в PDFBox необходимо явно загружать TrueType-шрифты для поддержки кириллицы (например, Liberation Sans).

3. JasperReports — профессиональное решение для отчётов

JasperReports — это не просто библиотека, а целая экосистема для генерации отчётов. Отчёты описываются в XML-шаблонах (.jrxml), которые можно визуально редактировать в Jaspersoft Studio (бесплатный дизайнер). Библиотека поддерживает группировку данных, подотчёты, диаграммы, кросс-таблицы и экспорт в PDF, Excel, HTML и другие форматы.

Когда использовать: для сложных корпоративных отчётов с большим объёмом данных, динамическими графиками и строгим форматированием.

Пример: простой отчёт из данных в памяти

import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.data.JRBean                    

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