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() Também na biblioteca
Serialização de objetos em Swift (iOS/macOS): Codable, JSON e PropertyList
Swashbuckle para C# (.NET): guia completo com exemplos práticos
Trabalhando com YAML em Swift: biblioteca Yams para iOS/macOS
Processamento de Imagens em Node.js: Bibliotecas Sharp, Jimp e gm