Génération de rapports PDF en Kotlin : aperçu des bibliothèques et exemples pratiques
Kotlin, en tant que langage moderne pour la JVM, offre aux développeurs des outils puissants pour créer des documents PDF. Que vous créiez des rapports financiers, des factures, des tableaux de bord analytiques ou que vous exportiez simplement des données, Kotlin dispose de plusieurs bibliothèques matures pour accomplir cette tâche. Dans cet article, nous examinerons les principales bibliothèques pour la génération de PDF en Kotlin, comparerons leurs fonctionnalités et fournirons des exemples de code pratiques.
1. iText 7 — un outil puissant et flexible
iText est l'une des bibliothèques les plus populaires pour travailler avec les PDF dans le monde Java et Kotlin. Elle offre un contrôle total sur le contenu du document : texte, tableaux, images, annotations, signets et bien plus encore. iText 7 est une version remaniée avec une architecture améliorée.
Installation (Gradle)
implementation("com.itextpdf:itext7-core:8.0.2")Exemple : création d'un rapport 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)
// Titre document.add(Paragraph("Rapport de ventes").setFontSize(20).setBold())
// Tableau val table = Table(2) table.addCell("Produit") table.addCell("Quantité") data.forEach { (product, quantity) -> table.addCell(product) table.addCell(quantity.toString()) } document.add(table)
document.close() println("PDF créé : $fileName")}
// Utilisationfun main() { val salesData = listOf( "Ordinateurs portables" to 150, "Moniteurs" to 230, "Claviers" to 340 ) generateReport("report_itext.pdf", salesData)}iText fournit une API riche pour le formatage : vous pouvez définir des polices, des couleurs, des marges, l'alignement, ajouter des images et même intégrer des polices (par exemple, cyrilliques). Cependant, iText a des restrictions de licence : une utilisation commerciale nécessite l'achat d'une licence (AGPL pour les projets open source).
2. Apache PDFBox — une alternative gratuite
Apache PDFBox est une bibliothèque open source (licence Apache 2.0) qui n'a aucune restriction d'utilisation commerciale. PDFBox permet de créer des PDF à partir de zéro, de remplir des formulaires, d'extraire du texte et même de travailler avec des signatures numériques.
Installation (Gradle)
implementation("org.apache.pdfbox:pdfbox:3.0.1")Exemple : création d'un PDF avec un tableau
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("Rapport de ventes (PDFBox)") contentStream.endText()
// Dessiner le tableau manuellement 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 pcs.") contentStream.endText()