Geração de PDF em Kotlin: visão geral de 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 exportação de dados. Kotlin, sendo uma linguagem JVM moderna, oferece aos desenvolvedores acesso a poderosas bibliotecas Java para trabalhar com PDF. Neste artigo, veremos as principais ferramentas para geração de PDF em Kotlin, suas características e exemplos de uso.
Bibliotecas populares para trabalhar com PDF em Kotlin
Como Kotlin é totalmente compatível com Java, você pode usar qualquer biblioteca Java para PDF. As opções mais populares são:
- iText (versão 7/8) — biblioteca comercial de código aberto (AGPL). Oferece amplas possibilidades: criação de documentos do zero, trabalho com formulários, marcas d'água, criptografia. Para uso comercial, é necessária a compra de uma licença.
- Apache PDFBox — biblioteca gratuita (Apache 2.0). Permite criar PDF, extrair texto, preencher formulários. Funciona em um nível mais baixo que o iText, mas oferece controle total sobre o conteúdo.
- OpenPDF — fork do iText 4 (LGPL/MPL). Biblioteca leve para tarefas básicas: criação de texto, tabelas, imagens. Adequada para projetos simples sem layout complexo.
- Jetpack Compose + PDF — abordagem moderna: você descreve a UI no Compose e depois a converte em PDF usando bibliotecas Android (por exemplo,
android.graphics.pdf.PdfDocument). Adequado para aplicativos Android.
Configuração do projeto e inclusão de dependências
Para demonstração, usaremos iText 7 e Apache PDFBox. Adicione as dependências no build.gradle.kts:
// Para iText 7implementation("com.itextpdf:itext7-core:8.0.4")
// Para Apache PDFBoximplementation("org.apache.pdfbox:pdfbox:3.0.2")Exemplo 1: Criando PDF com texto (iText 7)
Vamos criar um documento simples com título e parágrafo:
import com.itextpdf.kernel.pdf.PdfDocumentimport com.itextpdf.kernel.pdf.PdfWriterimport com.itextpdf.layout.Documentimport com.itextpdf.layout.element.Paragraph
fun createSimplePdf() { val writer = PdfWriter("output.pdf") val pdf = PdfDocument(writer) val document = Document(pdf)
document.add(Paragraph("Olá, mundo!")) document.add(Paragraph("Este é um PDF criado com iText em Kotlin."))
document.close()}Exemplo 2: Trabalhando com tabelas e cirílico (iText 7)
Para a exibição correta do cirílico, é necessário carregar uma fonte que suporte Unicode. Use a fonte padrão FreeSans ou qualquer fonte TTF:
import com.itextpdf.kernel.font.PdfFontFactoryimport com.itextpdf.kernel.pdf.PdfDocumentimport com.itextpdf.kernel.pdf.PdfWriterimport com.itextpdf.layout.Documentimport com.itextpdf.layout.element.Cellimport com.itextpdf.layout.element.Paragraphimport com.itextpdf.layout.element.Table
fun createTableWithCyrillic() { val writer = PdfWriter("table.pdf") val pdf = PdfDocument(writer) val document = Document(pdf)
// Carregando fonte com suporte a cirílico val font = PdfFontFactory.createFont("fonts/FreeSans.ttf", "Identity-H") document.setFont(font)
val table = Table(2) // duas colunas table.addCell(Cell().add(Paragraph("Nome"))) table.addCell(Cell().add(Paragraph("Idade"))) table.addCell(Cell().add(Paragraph("Ana"))) table.addCell(Cell().add(Paragraph("25"))) table.addCell(Cell().add(Paragraph("Ivan"))) table.addCell(Cell().add(Paragraph("30")))
document.add(table) document.close()}Exemplo 3: Criando PDF com imagem (Apache PDFBox)
O PDFBox exige um trabalho mais detalhado com coordenadas, mas oferece flexibilidade:
Também na biblioteca
Matchers do Catch2 para C++: guia completo com exemplos práticos
Testes em TypeScript: Guia Completo sobre Frameworks e Ferramentas
Cliente Elasticsearch para Go (Golang): guia completo
Migrações de banco de dados em C# (.NET): Entity Framework, FluentMigrator e outras abordagens
Processamento de Imagens em Java: Redimensionamento e Corte (resize, crop)
Recommendations