Geração de relatórios PDF em Kotlin: biblioteca iText 7

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 com iText 7



No desenvolvimento moderno, surge frequentemente a necessidade de criar documentos PDF estruturados: relatórios, faturas, contratos ou análises. A linguagem Kotlin, graças à sua concisão e compatibilidade com Java, é perfeita para esta tarefa. Uma das bibliotecas mais poderosas e populares para trabalhar com PDF é a iText 7 (anteriormente iTextSharp para .NET). Neste artigo, vamos explorar como usá-la para gerar relatórios PDF profissionais em Kotlin.



Por que iText 7?

  • Controle total sobre o conteúdo: texto, tabelas, imagens, fontes.
  • Desempenho: a biblioteca é otimizada para trabalhar com documentos grandes.
  • Multiplataforma: funciona na JVM, Android e na web.
  • Licenciamento: AGPL para projetos de código aberto ou licença comercial.


Instalação (Gradle)

Adicione a dependência no build.gradle.kts:

dependencies {    implementation("com.itextpdf:itext7-core:7.2.5")}


Exemplo básico: "Olá, PDF!"

Vamos criar um documento 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 main() { val writer = PdfWriter("hello.pdf") val pdf = PdfDocument(writer) val document = Document(pdf)

document.add(Paragraph("Olá, mundo PDF em Kotlin!")) document.close() println("PDF criado: hello.pdf")}


Criação de relatório com tabelas e estilos

Para um relatório real, é necessário mais do que apenas texto. Vamos adicionar uma tabela, cabeçalhos e estilos:

import com.itextpdf.kernel.colors.ColorConstantsimport 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.Tableimport com.itextpdf.layout.properties.UnitValue

fun generateReport() { val writer = PdfWriter("report.pdf") val pdf = PdfDocument(writer) val document = Document(pdf)

// Título val title = Paragraph("Relatório mensal de vendas") .setFontSize(20) .setBold() .setTextAlignment(com.itextpdf.layout.properties.TextAlignment.CENTER) document.add(title)

// Tabela val table = Table(UnitValue.createPercentArray(floatArrayOf(1f, 2f, 1.5f, 1.5f))) table.setWidth(UnitValue.createPercentValue(100))

// Cabeçalhos da tabela val headers = listOf("ID", "Produto", "Quantidade", "Preço") headers.forEach { header -> val cell = Cell().add(Paragraph(header).setBold()) cell.setBackgroundColor(ColorConstants.LIGHT_GRAY) table.addCell(cell) }

// Dados val data = listOf( listOf("1", "Notebook", "3", "150000"), listOf("2", "Mouse", "10", "5000"), listOf("3", "Teclado", "5", "12500") ) data.forEach { row -> row.forEach { value -> table.addCell(Cell().add(Paragraph(value))) } }

document.add(table) document.close() println("Relatório criado: report.pdf")}

fun main() { generateReport()}


Adicionando imagens e estilos

Frequentemente, é necessário inserir logotipos ou gráficos nos relatórios. O iText 7 suporta imagens:

import com.itextpdf.kernel.pdf.PdfDocumentimport com.itextpdf.kernel.pdf.PdfWriterimport com.itextpdf.layout.Documentimport com.itextpdf.layout.element.Imageimport com.itextpdf.io.image.ImageDataFactory

fun addImageExample() { val writer = PdfWriter("report_with_image.pdf") val pdf = PdfDocument(writer) val document = Documen

Recommendations