Geração de relatórios PDF em Java: visão geral das bibliotecas e ferramentas

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Geração de relatórios PDF em Java: visão geral das bibliotecas e ferramentas

Criar documentos PDF é uma das tarefas mais comuns no desenvolvimento corporativo em Java. Relatórios, faturas, notas fiscais, dashboards analíticos — tudo isso requer um conjunto de ferramentas flexível e eficiente. Neste artigo, analisaremos quatro bibliotecas principais para geração de PDF em Java: Apache PDFBox, iText, JasperReports e OpenPDF. Veremos seus pontos fortes, exemplos de código e cenários de uso.



1. Apache PDFBox — criação e edição de baixo nível

Apache PDFBox é uma biblioteca de código aberto (licença Apache 2.0) que permite criar documentos PDF do zero, bem como editar, extrair texto e preencher formulários. A principal vantagem é o controle total sobre o conteúdo: você trabalha diretamente com os objetos do documento.

Exemplo de criação de um PDF simples:

import org.apache.pdfbox.pdmodel.*;import org.apache.pdfbox.pdmodel.font.PDType1Font;import java.io.IOException;

public class PdfBoxExample { 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.setFont(PDType1Font.HELVETICA_BOLD, 14); contentStream.beginText(); contentStream.newLineAtOffset(100, 700); contentStream.showText("Olá, mundo PDFBox!"); contentStream.endText(); }

document.save("output.pdf"); System.out.println("PDF criado!"); } }}

Quando usar: se precisar de controle preciso sobre cada elemento (por exemplo, para gerar gráficos complexos ou preencher formulários). Não é adequado para grandes volumes de texto sem formatação prévia.



2. iText — potência comercial para relatórios complexos

iText é o padrão de facto na indústria. Existe em duas versões: iText 7 Community (AGPL) e iText 7 Commercial (licença comercial). A biblioteca suporta HTML-to-PDF, criação de formulários interativos, assinaturas digitais, criptografia e muito mais.

Exemplo de geração de PDF com tabela:

import com.itextpdf.kernel.pdf.*;import com.itextpdf.layout.*;import com.itextpdf.layout.element.*;

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

document.add(new Paragraph("Relatório mensal")); Table table = new Table(2); table.addCell("Indicador"); table.addCell("Valor"); table.addCell("Receita"); table.addCell("1 250 000 RUB"); table.addCell("Despesa"); table.addCell("890 000 RUB"); document.add(table);

document.close(); System.out.println("Relatório pronto!"); }}

Quando usar: para projetos comerciais que exigem alta performance, suporte a layouts complexos e documentos juridicamente relevantes (assinaturas, criptografia). Atenção: a versão AGPL exige abertura do código ao distribuir.



3. JasperReports — geração baseada em templates JRXML

JasperReports não é apenas uma biblioteca, mas todo um ecossistema para criação de relatórios. Você descreve o template em formato XML (ou através do editor visual Jaspersoft Studio), e a biblioteca o preenche com dados de bancos de dados, coleções ou JSON. O resultado pode ser exportado para PDF, Excel, HTML, CSV e outros formatos.

Exemplo de preenchimento programático de um template:

import net.sf.jasperre                    

Recommendations