Geração de PDF em Kotlin: visão geral das bibliotecas e exemplos práticos
A geração de documentos PDF é uma das tarefas comuns em aplicações modernas: desde a criação de relatórios e faturas até a formação de certificados e livros eletrônicos. Kotlin, graças à sua concisão e compatibilidade com Java, oferece aos desenvolvedores acesso a poderosas bibliotecas Java para trabalhar com PDF. Neste artigo, vamos analisar três bibliotecas principais: iText, Apache PDFBox e OpenPDF, além de apresentar exemplos de código em Kotlin.
1. iText — biblioteca poderosa e flexível
iText é uma das bibliotecas mais populares para criação e manipulação de documentos PDF na JVM. Ela suporta formatação complexa, tabelas, imagens, marcas d'água, criptografia e muito mais. Para Kotlin, está disponível o wrapper oficial iText7 com extensões Kotlin.
Configuração (Gradle)
dependencies { implementation("com.itextpdf:itext7-core:7.2.5") implementation("com.itextpdf:itext7-kotlin-extensions:1.0.0")}Exemplo: criando um PDF simples com texto
import com.itextpdf.kernel.pdf.PdfDocumentimport com.itextpdf.kernel.pdf.PdfWriterimport com.itextpdf.layout.Documentimport com.itextpdf.layout.element.Paragraph
fun createSimplePdf(fileName: String) { val writer = PdfWriter(fileName) val pdf = PdfDocument(writer) val document = Document(pdf)
document.add(Paragraph("Olá, mundo PDF em Kotlin!")) document.add(Paragraph("Este é um exemplo de uso do iText7."))
document.close() println("PDF criado: $fileName")}
fun main() { createSimplePdf("example_itext.pdf")}Exemplo: tabela com dados
import com.itextpdf.layout.element.Tableimport com.itextpdf.layout.element.Cell
fun createTablePdf(fileName: String) { val writer = PdfWriter(fileName) val pdf = PdfDocument(writer) val document = Document(pdf)
val table = Table(3) // 3 colunas table.addHeaderCell("Nome") table.addHeaderCell("Idade") table.addHeaderCell("Cidade")
table.addCell("Ana") table.addCell("28") table.addCell("Moscou")
table.addCell("Ivan") table.addCell("35") table.addCell("São Petersburgo")
document.add(table) document.close() println("PDF com tabela criado: $fileName")}2. Apache PDFBox — alternativa leve e gratuita
Apache PDFBox é uma biblioteca open-source com código aberto (licença Apache 2.0). Ela é ideal para tarefas básicas: criação de documentos, extração de texto, preenchimento de formulários. Ao contrário do iText, o PDFBox não exige pagamento de licenças para uso comercial.
Configuração (Gradle)
dependencies { implementation("org.apache.pdfbox:pdfbox:2.0.27")}Exemplo: criando um PDF com texto
import org.apache.pdfbox.pdmodel.PDDocumentimport org.apache.pdfbox.pdmodel.PDPageimport org.apache.pdfbox.pdmodel.PDPageContentStreamimport org.apache.pdfbox.pdmodel.font.PDType1Font
fun createPdfWithPdfBox(fileName: String) { val document = PDDocument() val page = PDPage() document.addPage(page)
val contentStream = PDPageContentStream(document, page) contentStream.beginText() contentStream.setFont(PDType1Font.HELVETICA_BOLD, 14f) contentStream.newLineAtOffset(100f, 700f) contentStream.showText("PDFBox + Kotlin = ótimo!") contentStream.endText() contentStream.close()
document.save(fileName) document.close() println("PDF criado: $fileName")}Exemplo: adicionando uma imagem
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject
fun createPdfWithImage(fileName: String, imagePath: String) { val document = PDDocument() val