Génération de rapports PDF en Kotlin : bibliothèques et exemples

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

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()

Recommendations