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 Também na biblioteca
Gerenciamento de configuração de aplicações TypeScript: guia completo
Cliente OAuth para JavaScript (Node.js): visão geral e exemplos de uso
Processamento de JSON em Go (Golang): encoding/json e alternativas
Trabalho com imagens em TypeScript: redimensionar e recortar com Sharp e Jimp