Generación de PDF en Kotlin: mejores bibliotecas y ejemplos de código

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Generación de PDF en Kotlin: resumen de bibliotecas y ejemplos prácticos



La generación de documentos PDF es una de las tareas más comunes en las aplicaciones modernas: desde la creación de informes y facturas hasta la generación de certificados y libros electrónicos. Kotlin, gracias a su concisión y compatibilidad con Java, brinda a los desarrolladores acceso a potentes bibliotecas Java para trabajar con PDF. En este artículo, analizaremos tres bibliotecas principales: iText, Apache PDFBox y OpenPDF, y proporcionaremos ejemplos de código en Kotlin.



1. iText — una biblioteca potente y flexible



iText es una de las bibliotecas más populares para crear y manipular documentos PDF en la JVM. Admite formato complejo, tablas, imágenes, marcas de agua, cifrado y mucho más. Para Kotlin, está disponible el envoltorio oficial iText7 con extensiones de Kotlin.



Configuración (Gradle)

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


Ejemplo: creación de un PDF simple con 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("¡Hola, mundo PDF en Kotlin!")) document.add(Paragraph("Este es un ejemplo de uso de iText7."))

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

fun main() { createSimplePdf("example_itext.pdf")}


Ejemplo: tabla con datos

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 columnas table.addHeaderCell("Nombre") table.addHeaderCell("Edad") table.addHeaderCell("Ciudad")

table.addCell("Ana") table.addCell("28") table.addCell("Moscú")

table.addCell("Iván") table.addCell("35") table.addCell("San Petersburgo")

document.add(table) document.close() println("PDF con tabla creado: $fileName")}


2. Apache PDFBox — una alternativa ligera y gratuita



Apache PDFBox es una biblioteca de código abierto (licencia Apache 2.0). Es ideal para tareas básicas: creación de documentos, extracción de texto, relleno de formularios. A diferencia de iText, PDFBox no requiere regalías por licencia para uso comercial.



Configuración (Gradle)

dependencies {    implementation("org.apache.pdfbox:pdfbox:2.0.27")}


Ejemplo: creación de un PDF con 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 = genial!") contentStream.endText() contentStream.close()

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


Ejemplo: agregar una imagen

import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject

fun createPdfWithImage(fileName: String, imagePath: String) { val document = PDDocument() val

Recommendations