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 También en la biblioteca
GraphQL Java — biblioteca del lado del servidor para implementar API GraphQL en Java
Validación de datos en Swift con Validated
Spring Data JPA en Java: guía completa con ejemplos