Geração de relatórios PDF em Kotlin: bibliotecas e exemplos

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 a JVM, oferece aos desenvolvedores ferramentas poderosas para criar documentos PDF. Independentemente de você estar criando relatórios financeiros, faturas, painéis analíticos ou apenas exportando dados, o Kotlin possui várias bibliotecas maduras que permitem resolver essa tarefa. Neste artigo, vamos explorar as principais bibliotecas para geração de PDF em Kotlin, comparar seus recursos e fornecer exemplos práticos de código.



1. iText 7 — ferramenta poderosa e flexível



iText é uma das bibliotecas mais populares para trabalhar com PDF no mundo Java e Kotlin. Ela oferece controle total sobre o conteúdo do documento: texto, tabelas, imagens, anotações, marcadores e muito mais. O iText 7 é uma versão reformulada com arquitetura melhorada.



Instalação (Gradle)

implementation("com.itextpdf:itext7-core:8.0.2")


Exemplo: criação de um relatório PDF simples

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 java.io.FileOutputStream

fun generateReport(fileName: String, data: List<Pair<String, Int>>) { val writer = PdfWriter(FileOutputStream(fileName)) val pdf = PdfDocument(writer) val document = Document(pdf)

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

// Tabela val table = Table(2) table.addCell("Produto") table.addCell("Quantidade") data.forEach { (product, quantity) -> table.addCell(product) table.addCell(quantity.toString()) } document.add(table)

document.close() println("PDF criado: $fileName")}

// Usofun main() { val salesData = listOf( "Notebooks" to 150, "Monitores" to 230, "Teclados" to 340 ) generateReport("report_itext.pdf", salesData)}


O iText oferece uma API rica para formatação: é possível definir fontes, cores, margens, alinhamento, adicionar imagens e até incorporar fontes (por exemplo, cirílicas). No entanto, o iText possui restrições de licenciamento: o uso comercial requer a compra de uma licença (AGPL para projetos de código aberto).



2. Apache PDFBox — alternativa gratuita



Apache PDFBox é uma biblioteca de código aberto (licença Apache 2.0) que não possui restrições para uso comercial. O PDFBox permite criar PDFs do zero, preencher formulários, extrair texto e até trabalhar com assinaturas digitais.



Instalação (Gradle)

implementation("org.apache.pdfbox:pdfbox:3.0.1")


Exemplo: criação de PDF com tabela

import org.apache.pdfbox.pdmodel.PDDocumentimport org.apache.pdfbox.pdmodel.PDPageimport org.apache.pdfbox.pdmodel.PDPageContentStreamimport org.apache.pdfbox.pdmodel.font.PDType1Fontimport java.awt.Color

fun createPdfBoxReport(fileName: String, data: List<Pair<String, Int>>) { val document = PDDocument() val page = PDPage() document.addPage(page)

val contentStream = PDPageContentStream(document, page) contentStream.beginText() contentStream.setFont(PDType1Font.HELVETICA_BOLD, 18f) contentStream.newLineAtOffset(50f, 750f) contentStream.showText("Relatório de Vendas (PDFBox)") contentStream.endText()

// Desenhamos a tabela manualmente var y = 700f contentStream.setFont(PDType1Font.HELVETICA, 12f) contentStream.setNonStrokingColor(Color.BLACK) data.forEach { (product, quantity) -> contentStream.beginText() contentStream.newLineAtOffset(50f, y) contentStream.showText("$product — $quantity un.") contentStream.endText()

Recommendations