Geração de Relatórios PDF em Kotlin: 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 Relatórios PDF em Kotlin: visão geral das bibliotecas e exemplos práticos



Kotlin, sendo uma linguagem moderna para JVM, é excelente para criar aplicações servidoras, incluindo a geração de relatórios PDF complexos. Ao contrário do Python, onde são populares ReportLab ou FPDF, no ecossistema Kotlin/Java são usadas bibliotecas consolidadas: iText, Apache PDFBox e OpenPDF. Neste artigo, analisaremos cada uma delas, mostraremos exemplos de código em Kotlin e daremos recomendações de escolha.



1. iText (versões 7 e 8)

iText é o padrão de facto para geração de PDF na JVM. A biblioteca fornece uma API poderosa para criar documentos do zero, trabalhar com formulários, marcas d'água e assinaturas digitais. No entanto, a partir da versão 7, o iText mudou para a licença AGPL (ou comercial), o que é importante considerar no uso comercial.



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

import com.itextpdf.kernel.pdf.PdfDocumentimport com.itextpdf.kernel.pdf.PdfWriterimport com.itextpdf.layout.Documentimport com.itextpdf.layout.element.Paragraphimport com.itextpdf.layout.element.Tableimport com.itextpdf.layout.property.UnitValue

fun generateReportItext(outputPath: String) { val writer = PdfWriter(outputPath) val pdf = PdfDocument(writer) val document = Document(pdf)

// Título document.add(Paragraph("Relatório de Vendas").setFontSize(20))

// Tabela val table = Table(UnitValue.createPercentArray(3)).useAllAvailableWidth() table.addCell("Produto") table.addCell("Quantidade") table.addCell("Preço") table.addCell("Notebook") table.addCell("10") table.addCell("75000") table.addCell("Monitor") table.addCell("5") table.addCell("25000")

document.add(table) document.close() println("PDF criado: $outputPath")}


2. Apache PDFBox

PDFBox é uma biblioteca gratuita (licença Apache 2.0) que permite não apenas criar PDF, mas também extrair texto, preencher formulários, renderizar páginas em imagens. A API é um pouco mais de baixo nível do que a do iText, mas oferece controle total sobre o conteúdo.



Exemplo com imagem e formatação de texto:

import org.apache.pdfbox.pdmodel.PDDocumentimport org.apache.pdfbox.pdmodel.PDPageimport org.apache.pdfbox.pdmodel.PDPageContentStreamimport org.apache.pdfbox.pdmodel.font.PDType0Fontimport org.apache.pdfbox.pdmodel.graphics.image.PDImageXObjectimport java.io.File

fun generateReportPdfBox(outputPath: String) { val document = PDDocument() val page = PDPage() document.addPage(page)

val contentStream = PDPageContentStream(document, page) // Carregar fonte (TrueType) val font = PDType0Font.load(document, File("fonts/DejaVuSans.ttf")) contentStream.setFont(font, 14f)

// Texto contentStream.beginText() contentStream.newLineAtOffset(50f, 750f) contentStream.showText("Relatório de Janeiro 2025") contentStream.endText()

// Imagem (logotipo) val image = PDImageXObject.createFromFile("logo.png", document) contentStream.drawImage(image, 50f, 650f, 100f, 50f)

contentStream.close() document.save(outputPath) document.close() println("Relatório PDFBox pronto: $outputPath")}


3. OpenPDF

OpenPDF é um fork da versão antiga do iText (LGPL), que permanece totalmente livre. É ideal para relatórios simples: texto, tabelas, primitivas gráficas básicas. A API lembra o iText 2.x, mas no código Kotlin moderno isso não é um problema.



Exemplo de criação de PDF com parágrafos e lista:

import com.lowagie.text.Documentimport com.lowagie.text.Paragraphimport com.lowagie.text.pdf.PdfWriterimport java.io.FileOutputStream

fun generateReportOpenPdf(outputPath: String) {

Recommendations