Génération de rapports PDF en Kotlin : iText, Apache PDFBox, OpenPDF

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 : revue des bibliothèques et exemples pratiques



Kotlin, en tant que langage moderne pour la JVM, est parfaitement adapté à la création d'applications serveur, y compris la génération de rapports PDF complexes. Contrairement à Python, où ReportLab ou FPDF sont populaires, l'écosystème Kotlin/Java utilise des bibliothèques éprouvées : iText, Apache PDFBox et OpenPDF. Dans cet article, nous analyserons chacune d'elles, montrerons des exemples de code en Kotlin et donnerons des recommandations pour le choix.



1. iText (versions 7 et 8)

iText est la norme de facto pour la génération de PDF sur la JVM. La bibliothèque fournit une API puissante pour créer des documents à partir de zéro, travailler avec des formulaires, des filigranes et des signatures numériques. Cependant, depuis la version 7, iText est passé sous licence AGPL (ou commerciale), ce qui est important à prendre en compte pour une utilisation commerciale.



Exemple de création d'un PDF simple avec un tableau en Kotlin :

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 com.itextpdf.layout.property.UnitValue

fun generateReportItext(outputPath: String) { val writer = PdfWriter(outputPath) val pdf = PdfDocument(writer) val document = Document(pdf)

// Titre document.add(Paragraph("Rapport de ventes").setFontSize(20))

// Tableau val table = Table(UnitValue.createPercentArray(3)).useAllAvailableWidth() table.addCell("Produit") table.addCell("Quantité") table.addCell("Prix") table.addCell("Ordinateur portable") table.addCell("10") table.addCell("75000") table.addCell("Moniteur") table.addCell("5") table.addCell("25000")

document.add(table) document.close() println("PDF créé : $outputPath")}


2. Apache PDFBox

PDFBox est une bibliothèque gratuite (licence Apache 2.0) qui permet non seulement de créer des PDF, mais aussi d'extraire du texte, de remplir des formulaires, de rendre des pages en images. L'API est légèrement plus bas niveau que celle d'iText, mais offre un contrôle total sur le contenu.



Exemple avec une image et un formatage de texte :

import org.apache.pdfbox.pdmodel.PDDocumentimport org.apache.pdfbox.pdmodel.PDPageimport org.apache.pdfbox.pdmodel.PDPageContentStreamimport org.apache.pdfbox.pdmodel.font.PDType0Fontimport org.apache.pdfbox.pdmodel.graphics.image.PDImageXObjectimport java.io.File

fun generateReportPdfBox(outputPath: String) { val document = PDDocument() val page = PDPage() document.addPage(page)

val contentStream = PDPageContentStream(document, page) // Chargement de la police (TrueType) val font = PDType0Font.load(document, File("fonts/DejaVuSans.ttf")) contentStream.setFont(font, 14f)

// Texte contentStream.beginText() contentStream.newLineAtOffset(50f, 750f) contentStream.showText("Rapport de janvier 2025") contentStream.endText()

// Image (logo) val image = PDImageXObject.createFromFile("logo.png", document) contentStream.drawImage(image, 50f, 650f, 100f, 50f)

contentStream.close() document.save(outputPath) document.close() println("Rapport PDFBox prêt : $outputPath")}


3. OpenPDF

OpenPDF est un fork de l'ancienne version d'iText (LGPL), qui reste entièrement libre. Idéal pour les rapports simples : texte, tableaux, primitives graphiques de base. L'API rappelle iText 2.x, mais ce n'est pas un problème dans le code Kotlin moderne.



Exemple de création d'un PDF avec des paragraphes et une liste :

import com.lowagie.text.Documentimport com.lowagie.text.Paragraphimport com.lowagie.text.pdf.PdfWriterimport java.io.FileOutputStream

fun generateReportOpenPdf(outputPath: String) {

Recommendations