Geração de PDF em Java: visão geral das bibliotecas iText, Apache PDFBox e OpenPDF
A criação de documentos PDF é uma das tarefas comuns em aplicações corporativas e web em Java: desde a geração de relatórios e faturas até a exportação de dados e criação de livros eletrônicos. Em Java, existem várias bibliotecas maduras, cada uma com seus pontos fortes. Neste artigo, examinaremos três principais: iText, Apache PDFBox e OpenPDF, forneceremos exemplos de código e ajudaremos você a escolher a ferramenta adequada.
1. iText — poderoso, mas com licença comercial
iText é a biblioteca mais popular para trabalhar com PDF. Ela oferece controle total sobre o conteúdo: texto, imagens, tabelas, formulários, marcas d'água, assinaturas. A partir da versão 5.5.x, o iText é distribuído sob licença dupla AGPL (gratuita para projetos open-source) e comercial (para software proprietário). A versão 7.x (iText 7) é mais moderna, modular e de alto desempenho.
Exemplo: criação de um PDF simples com texto (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("Olá, mundo PDF!")); document.add(new Paragraph("Isso foi criado com iText 7.")); document.close(); System.out.println("PDF criado com sucesso: " + dest); }}Vantagens do iText:
- Máxima flexibilidade: suporte a tabelas, listas, estilos, fontes, imagens.
- Trabalho com PDF/A, criptografia, assinaturas digitais.
- Alto desempenho e qualidade de renderização.
Desvantagens:
- Licença complexa (AGPL) — para uso comercial, é necessária a compra.
- API bastante extensa, exigindo aprendizado.
2. Apache PDFBox — gratuito e aberto
Apache PDFBox é uma biblioteca de código aberto (licença Apache 2.0) que permite criar, editar e extrair conteúdo de PDF. Ao contrário do iText, o PDFBox não exige licença comercial para projetos proprietários. Ele também suporta trabalho com formulários, criptografia, incorporação de fontes.
Exemplo: criação de PDF com texto (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("Olá, mundo PDF!"); contentStream.newLineAtOffset(0, -20); contentStream.showText("Isso foi criado com Apache PDFBox."); contentStream.endText(); } document.save("output_pdfbox.pdf"); System.out.println("PDF criado com sucesso: output_pdfbox.pdf"); } }}Vantagens do Apache PDFBox:
- Completamente gratuito (licença Apache 2.0) — adequado para qualquer projeto.
- Suporte para extração de texto, imagens, metadados