Generación de PDF en Kotlin: revisión de bibliotecas y herramientas

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: revisión de bibliotecas y ejemplos prácticos



La generación de documentos PDF es una de las tareas comunes en las aplicaciones modernas: desde la creación de informes y facturas hasta la exportación de datos. Kotlin, al ser un lenguaje moderno para la JVM, brinda a los desarrolladores acceso a potentes bibliotecas de Java para trabajar con PDF. En este artículo, revisaremos las principales herramientas para la generación de PDF en Kotlin, sus características y ejemplos de uso.



Bibliotecas populares para trabajar con PDF en Kotlin



Dado que Kotlin es completamente compatible con Java, puede usar cualquier biblioteca Java para PDF. Las opciones más populares son:



  • iText (versión 7/8) — biblioteca comercial con código abierto (AGPL). Ofrece amplias capacidades: creación de documentos desde cero, trabajo con formularios, marcas de agua, cifrado. Para uso comercial se requiere la compra de una licencia.
  • Apache PDFBox — biblioteca gratuita (Apache 2.0). Permite crear PDF, extraer texto, rellenar formularios. Funciona a un nivel más bajo que iText, pero brinda control total sobre el contenido.
  • OpenPDF — bifurcación (fork) de iText 4 (LGPL/MPL). Biblioteca ligera para tareas básicas: creación de texto, tablas, imágenes. Adecuada para proyectos simples sin maquetación compleja.
  • Jetpack Compose + PDF — enfoque moderno: describe la interfaz de usuario en Compose y luego la convierte a PDF usando bibliotecas de Android (por ejemplo, android.graphics.pdf.PdfDocument). Adecuado para aplicaciones Android.


Configuración del proyecto y adición de dependencias



Para la demostración usaremos iText 7 y Apache PDFBox. Agregue las dependencias en build.gradle.kts:



// Para iText 7implementation("com.itextpdf:itext7-core:8.0.4")

// Para Apache PDFBoximplementation("org.apache.pdfbox:pdfbox:3.0.2")


Ejemplo 1: Creación de PDF con texto (iText 7)



Crearemos un documento simple con un título y un párrafo:



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("¡Hola, mundo!")) document.add(Paragraph("Este es un PDF creado con iText en Kotlin."))

document.close()}


Ejemplo 2: Trabajo con tablas y cirílico (iText 7)



Para la visualización correcta del cirílico es necesario cargar una fuente que admita Unicode. Usamos la fuente estándar FreeSans o cualquier fuente 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)

// Carga de fuente con soporte para cirílico val font = PdfFontFactory.createFont("fonts/FreeSans.ttf", "Identity-H") document.setFont(font)

val table = Table(2) // dos columnas table.addCell(Cell().add(Paragraph("Nombre"))) table.addCell(Cell().add(Paragraph("Edad"))) table.addCell(Cell().add(Paragraph("Ana"))) table.addCell(Cell().add(Paragraph("25"))) table.addCell(Cell().add(Paragraph("Iván"))) table.addCell(Cell().add(Paragraph("30")))

document.add(table) document.close()}


Ejemplo 3: Creación de PDF con imagen (Apache PDFBox)



PDFBox requiere un trabajo más detallado con coordenadas, pero ofrece flexibilidad:




                
    
    

Recommendations