Generación de informes PDF en Kotlin: descripción general de bibliotecas y ejemplos prácticos
Kotlin, al ser un lenguaje moderno para la JVM, proporciona a los desarrolladores herramientas potentes para crear documentos PDF. Ya sea que esté creando informes financieros, facturas, paneles analíticos o simplemente exportando datos, Kotlin tiene varias bibliotecas maduras que le permiten resolver esta tarea. En este artículo, revisaremos las principales bibliotecas para la generación de PDF en Kotlin, compararemos sus capacidades y proporcionaremos ejemplos prácticos de código.
1. iText 7 — una herramienta potente y flexible
iText es una de las bibliotecas más populares para trabajar con PDF en el mundo de Java y Kotlin. Proporciona control total sobre el contenido del documento: texto, tablas, imágenes, anotaciones, marcadores y mucho más. iText 7 es una versión rediseñada con una arquitectura mejorada.
Instalación (Gradle)
implementation("com.itextpdf:itext7-core:8.0.2")Ejemplo: creación de un informe PDF simple
import com.itextpdf.kernel.pdf.PdfDocumentimport com.itextpdf.kernel.pdf.PdfWriterimport com.itextpdf.layout.Documentimport com.itextpdf.layout.element.Paragraphimport com.itextpdf.layout.element.Tableimport java.io.FileOutputStream
fun generateReport(fileName: String, data: List<Pair<String, Int>>) { val writer = PdfWriter(FileOutputStream(fileName)) val pdf = PdfDocument(writer) val document = Document(pdf)
// Título document.add(Paragraph("Informe de ventas").setFontSize(20).setBold())
// Tabla val table = Table(2) table.addCell("Producto") table.addCell("Cantidad") data.forEach { (product, quantity) -> table.addCell(product) table.addCell(quantity.toString()) } document.add(table)
document.close() println("PDF creado: $fileName")}
// Usofun main() { val salesData = listOf( "Portátiles" to 150, "Monitores" to 230, "Teclados" to 340 ) generateReport("report_itext.pdf", salesData)}iText proporciona una API rica para el formateo: se pueden definir fuentes, colores, márgenes, alineación, agregar imágenes e incluso incrustar fuentes (por ejemplo, cirílicas). Sin embargo, iText tiene restricciones de licencia: el uso comercial requiere la compra de una licencia (AGPL para proyectos de código abierto).
2. Apache PDFBox — una alternativa gratuita
Apache PDFBox es una biblioteca de código abierto (licencia Apache 2.0) que no tiene restricciones para uso comercial. PDFBox permite crear PDF desde cero, rellenar formularios, extraer texto e incluso trabajar con firmas digitales.
Instalación (Gradle)
implementation("org.apache.pdfbox:pdfbox:3.0.1")Ejemplo: creación de un PDF con tabla
import org.apache.pdfbox.pdmodel.PDDocumentimport org.apache.pdfbox.pdmodel.PDPageimport org.apache.pdfbox.pdmodel.PDPageContentStreamimport org.apache.pdfbox.pdmodel.font.PDType1Fontimport java.awt.Color
fun createPdfBoxReport(fileName: String, data: List<Pair<String, Int>>) { val document = PDDocument() val page = PDPage() document.addPage(page)
val contentStream = PDPageContentStream(document, page) contentStream.beginText() contentStream.setFont(PDType1Font.HELVETICA_BOLD, 18f) contentStream.newLineAtOffset(50f, 750f) contentStream.showText("Informe de ventas (PDFBox)") contentStream.endText()
// Dibujamos la tabla manualmente var y = 700f contentStream.setFont(PDType1Font.HELVETICA, 12f) contentStream.setNonStrokingColor(Color.BLACK) data.forEach { (product, quantity) -> contentStream.beginText() contentStream.newLineAtOffset(50f, y) contentStream.showText("$product — $quantity uds.") contentStream.endText() También en la biblioteca
Autorización y autenticación en Swift: guía completa para iOS/macOS
Event Bus y patrón Observer en C++: implementación en C++ moderno
Generación de Swagger/OpenAPI para Go (Golang): guía completa