Génération de rapports PDF en Kotlin avec iText 7
Dans le développement moderne, il est souvent nécessaire de créer des documents PDF structurés : rapports, factures, contrats ou analyses. Le langage Kotlin, grâce à sa concision et sa compatibilité avec Java, est parfaitement adapté à cette tâche. L'une des bibliothèques les plus puissantes et populaires pour travailler avec les PDF est iText 7 (anciennement iTextSharp pour .NET). Dans cet article, nous verrons comment générer des rapports PDF professionnels en Kotlin avec cette bibliothèque.
Pourquoi iText 7 ?
- Contrôle total sur le contenu : texte, tableaux, images, polices.
- Performance : la bibliothèque est optimisée pour les grands documents.
- Multiplateforme : fonctionne sur JVM, Android et le web.
- Licence : AGPL pour les projets open source ou licence commerciale.
Installation (Gradle)
Ajoutez la dépendance dans build.gradle.kts :
dependencies { implementation("com.itextpdf:itext7-core:7.2.5")}Exemple de base : "Hello, PDF!"
Créons un document PDF très simple avec du texte :
import com.itextpdf.kernel.pdf.PdfDocumentimport com.itextpdf.kernel.pdf.PdfWriterimport com.itextpdf.layout.Documentimport com.itextpdf.layout.element.Paragraph
fun main() { val writer = PdfWriter("hello.pdf") val pdf = PdfDocument(writer) val document = Document(pdf)
document.add(Paragraph("Bonjour, monde PDF en Kotlin !")) document.close() println("PDF créé : hello.pdf")}Création d'un rapport avec tableaux et styles
Pour un vrai rapport, il faut plus que du simple texte. Ajoutons un tableau, des en-têtes et des styles :
import com.itextpdf.kernel.colors.ColorConstantsimport com.itextpdf.kernel.pdf.PdfDocumentimport com.itextpdf.kernel.pdf.PdfWriterimport com.itextpdf.layout.Documentimport com.itextpdf.layout.element.Cellimport com.itextpdf.layout.element.Paragraphimport com.itextpdf.layout.element.Tableimport com.itextpdf.layout.properties.UnitValue
fun generateReport() { val writer = PdfWriter("report.pdf") val pdf = PdfDocument(writer) val document = Document(pdf)
// Titre val title = Paragraph("Rapport mensuel des ventes") .setFontSize(20) .setBold() .setTextAlignment(com.itextpdf.layout.properties.TextAlignment.CENTER) document.add(title)
// Tableau val table = Table(UnitValue.createPercentArray(floatArrayOf(1f, 2f, 1.5f, 1.5f))) table.setWidth(UnitValue.createPercentValue(100))
// En-têtes du tableau val headers = listOf("ID", "Produit", "Quantité", "Prix") headers.forEach { header -> val cell = Cell().add(Paragraph(header).setBold()) cell.setBackgroundColor(ColorConstants.LIGHT_GRAY) table.addCell(cell) }
// Données val data = listOf( listOf("1", "Ordinateur portable", "3", "150000"), listOf("2", "Souris", "10", "5000"), listOf("3", "Clavier", "5", "12500") ) data.forEach { row -> row.forEach { value -> table.addCell(Cell().add(Paragraph(value))) } }
document.add(table) document.close() println("Rapport créé : report.pdf")}
fun main() { generateReport()}Ajout d'images et de styles
Il est souvent nécessaire d'insérer des logos ou des graphiques dans les rapports. iText 7 prend en charge les images :
import com.itextpdf.kernel.pdf.PdfDocumentimport com.itextpdf.kernel.pdf.PdfWriterimport com.itextpdf.layout.Documentimport com.itextpdf.layout.element.Imageimport com.itextpdf.io.image.ImageDataFactory
fun addImageExample() { val writer = PdfWriter("report_with_image.pdf") val pdf = PdfDocument(writer) val document = Documen Aussi dans la bibliothèque
Migrations de bases de données en Java : aperçu des outils et bibliothèques
Planificateur de tâches Java : Quartz Scheduler — guide complet
Parsing HTML en Java : meilleures bibliothèques et exemples de code
Travail avec les dates en Kotlin : bibliothèques et outils (Kotlinx-datetime, Joda-Time, java.time)