Generación de PDF en Kotlin: resumen de bibliotecas y ejemplos prácticos
Kotlin, como lenguaje moderno para JVM, ofrece a los desarrolladores potentes herramientas para trabajar con documentos PDF. Gracias a la compatibilidad total con el ecosistema Java, puede utilizar bibliotecas probadas como iText y Apache PDFBox, así como frameworks modernos de Kotlin. En este artículo, revisaremos los enfoques principales para la generación de PDF en Kotlin, proporcionaremos ejemplos de código y compararemos las soluciones más populares.
¿Por qué Kotlin para trabajar con PDF?
Kotlin ofrece varias ventajas sobre Java al trabajar con PDF:
- Sintaxis concisa — menos código repetitivo para crear documentos
- Seguridad contra nulos — reduce el riesgo de errores al trabajar con campos anulables
- Funciones de extensión — permiten ampliar la funcionalidad de las bibliotecas
- Constructores DSL — ideales para describir la estructura del PDF
- Compatibilidad total — todas las bibliotecas Java funcionan sin cambios
Bibliotecas principales para la generación de PDF
1. iText (iText 7 / iText 8)
iText es la biblioteca comercial más popular para trabajar con PDF. Para Kotlin está disponible a través de la interoperabilidad con Java. Incluye módulos:
kernel— operaciones básicas con PDFlayout— construcción de documentos de alto nivelhtml2pdf— conversión de HTML a PDFpdfa— soporte para PDF/A
Ejemplo de creación de un PDF simple con iText 7 en Kotlin:
import com.itextpdf.kernel.pdf.PdfDocumentimport com.itextpdf.kernel.pdf.PdfWriterimport com.itextpdf.layout.Documentimport com.itextpdf.layout.element.Paragraphimport java.io.FileOutputStream
fun createSimplePdf() { val writer = PdfWriter(FileOutputStream("hello_kotlin.pdf")) val pdfDoc = PdfDocument(writer) val document = Document(pdfDoc) document.add(Paragraph("¡Hola, Kotlin!")) document.add(Paragraph("Este es un PDF creado con iText 7")) document.close() println("PDF creado exitosamente")}2. Apache PDFBox
Apache PDFBox es una biblioteca gratuita de código abierto. Es ideal para tareas básicas: creación, edición, extracción de texto. En Kotlin se utiliza a través de la API de Java.
Ejemplo con PDFBox:
import org.apache.pdfbox.pdmodel.PDDocumentimport org.apache.pdfbox.pdmodel.PDPageimport org.apache.pdfbox.pdmodel.PDPageContentStreamimport org.apache.pdfbox.pdmodel.font.PDType1Fontimport java.io.File
fun createPdfWithBox() { val document = PDDocument() val page = PDPage() document.addPage(page) val contentStream = PDPageContentStream(document, page) contentStream.beginText() contentStream.setFont(PDType1Font.HELVETICA_BOLD, 14f) contentStream.newLineAtOffset(50f, 700f) contentStream.showText("PDFBox + Kotlin = ❤") contentStream.endText() contentStream.close() document.save(File("pdfbox_example.pdf")) document.close() println("Documento guardado")}3. Kotlin DSL para PDF (KPDF)
KPDF es una biblioteca nativa de Kotlin que utiliza constructores DSL. Permite describir el documento de forma declarativa:
// Ejemplo con un DSL hipotético (adaptación a bibliotecas reales)fun generateInvoice() { pdfDocument { page { paragraph("Factura Nº123") { fontSize = 24 bold() } table { row { cell("Producto"); cell("Precio") } row { cell("Consultoría Kotlin"); cell("5000 RUB") } } } }.save("invoice.pdf")} También en la biblioteca
GraphQL en C++: biblioteca cppgraphqlgen para API modernas
GraphQL en Node.js: Guía completa sobre la biblioteca graphql-http
Planificador de tareas Kotlin: kotlinx-coroutines-core y la biblioteca korGE
Pruebas en TypeScript: Guía completa de frameworks y herramientas