Geração de PDF em Java: visão geral das bibliotecas iText, Apache PDFBox, OpenPDF

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 PDF em Java: visão geral das melhores bibliotecas



A geração de documentos PDF é uma das tarefas típicas no desenvolvimento corporativo em Java. Relatórios, faturas, contratos, certificados — tudo isso é conveniente de gerar programaticamente. Neste artigo, vamos analisar as três bibliotecas mais populares para trabalhar com PDF em Java: iText, Apache PDFBox e OpenPDF. Vamos explorar seus recursos, particularidades e fornecer exemplos práticos de código.



1. iText — o padrão poderoso e comercial



iText é o padrão de facto para criar PDFs em Java. A biblioteca existe desde o ano 2000 e oferece a mais ampla gama de funcionalidades: desde texto simples até formulários complexos, marcas d'água, assinaturas digitais e suporte a PDF/A.



Licenciamento: O iText é distribuído sob licença dupla. Para projetos de código aberto (AGPL) é gratuito; para uso comercial, é necessária a compra de uma licença.



Exemplo: criação de um PDF simples com tabela



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

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

// Adiciona um título document.add(new Paragraph("Relatório de Vendas"));

// Cria uma tabela Table table = new Table(UnitValue.createPercentArray(3)).useAllAvailableWidth(); table.addHeaderCell(new Cell().add(new Paragraph("Produto"))); table.addHeaderCell(new Cell().add(new Paragraph("Quantidade"))); table.addHeaderCell(new Cell().add(new Paragraph("Preço")));

table.addCell(new Cell().add(new Paragraph("Notebook"))); table.addCell(new Cell().add(new Paragraph("10"))); table.addCell(new Cell().add(new Paragraph("1200 $")));

table.addCell(new Cell().add(new Paragraph("Mouse"))); table.addCell(new Cell().add(new Paragraph("50"))); table.addCell(new Cell().add(new Paragraph("25 $")));

document.add(table); document.close();

System.out.println("PDF criado: " + dest); }}


Prós do iText: grande comunidade, excelente documentação, suporte a cenários complexos (assinaturas, formulários, PDF/UA). Contras: alto custo da licença comercial.



2. Apache PDFBox — gratuito e de código aberto



Apache PDFBox é uma biblioteca totalmente gratuita com licença Apache 2.0. Ela permite não apenas criar PDFs do zero, mas também editar documentos existentes, extrair texto, trabalhar com formulários e imagens.



Exemplo: criação de um documento com texto e imagem



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 org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;

import java.io.File;

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

PDPageContentStream contentStream = new PDPageContentStream(document, page);

// Carrega a fonte (é necessário o arquivo da fonte) PDType0Font font = PDType0Font.load(document, new File("/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf")); contentStream.setFont(font, 14); contentStream.beginText(); contentStream.newLineAtOffset(50, 700); conte

Recommendations