Génération de PDF en Kotlin : aperçu des bibliothèques et exemples pratiques
La génération de documents PDF est l'une des tâches courantes dans les applications modernes : de la création de rapports et de factures à l'exportation de données. Kotlin, en tant que langage JVM moderne, offre aux développeurs un accès à de puissantes bibliothèques Java pour travailler avec les PDF. Dans cet article, nous examinerons les principaux outils de génération de PDF en Kotlin, leurs caractéristiques et des exemples d'utilisation.
Bibliothèques populaires pour travailler avec les PDF en Kotlin
Puisque Kotlin est entièrement compatible avec Java, vous pouvez utiliser n'importe quelle bibliothèque Java pour les PDF. Les options les plus populaires sont :
- iText (version 7/8) — bibliothèque commerciale open source (AGPL). Offre de nombreuses possibilités : création de documents à partir de zéro, travail avec des formulaires, des filigranes, le chiffrement. Pour une utilisation commerciale, l'achat d'une licence est nécessaire.
- Apache PDFBox — bibliothèque gratuite (Apache 2.0). Permet de créer des PDF, d'extraire du texte, de remplir des formulaires. Fonctionne à un niveau plus bas qu'iText, mais offre un contrôle total sur le contenu.
- OpenPDF — fork d'iText 4 (LGPL/MPL). Bibliothèque légère pour les tâches de base : création de texte, de tableaux, d'images. Convient aux projets simples sans mise en page complexe.
- Jetpack Compose + PDF — approche moderne : vous décrivez l'interface utilisateur avec Compose, puis la convertissez en PDF à l'aide des bibliothèques Android (par exemple,
android.graphics.pdf.PdfDocument). Convient aux applications Android.
Configuration du projet et ajout des dépendances
Pour la démonstration, nous utiliserons iText 7 et Apache PDFBox. Ajoutez les dépendances dans build.gradle.kts :
// Pour iText 7implementation("com.itextpdf:itext7-core:8.0.4")
// Pour Apache PDFBoximplementation("org.apache.pdfbox:pdfbox:3.0.2")Exemple 1 : Création d'un PDF avec du texte (iText 7)
Créons un document simple avec un titre et un paragraphe :
import com.itextpdf.kernel.pdf.PdfDocumentimport com.itextpdf.kernel.pdf.PdfWriterimport com.itextpdf.layout.Documentimport com.itextpdf.layout.element.Paragraph
fun createSimplePdf() { val writer = PdfWriter("output.pdf") val pdf = PdfDocument(writer) val document = Document(pdf)
document.add(Paragraph("Привет, мир!")) document.add(Paragraph("Это PDF, созданный с помощью iText в Kotlin."))
document.close()}Exemple 2 : Travail avec des tableaux et le cyrillique (iText 7)
Pour un affichage correct du cyrillique, il est nécessaire de charger une police prenant en charge Unicode. Utilisons la police standard FreeSans ou toute police TTF :
import com.itextpdf.kernel.font.PdfFontFactoryimport 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.Table
fun createTableWithCyrillic() { val writer = PdfWriter("table.pdf") val pdf = PdfDocument(writer) val document = Document(pdf)
// Chargement de la police prenant en charge le cyrillique val font = PdfFontFactory.createFont("fonts/FreeSans.ttf", "Identity-H") document.setFont(font)
val table = Table(2) // deux colonnes table.addCell(Cell().add(Paragraph("Имя"))) table.addCell(Cell().add(Paragraph("Возраст"))) table.addCell(Cell().add(Paragraph("Анна"))) table.addCell(Cell().add(Paragraph("25"))) table.addCell(Cell().add(Paragraph("Иван"))) table.addCell(Cell().add(Paragraph("30")))
document.add(table) document.close()}Exemple 3 : Création d'un PDF avec une image (Apache PDFBox)
PDFBox nécessite un travail plus détaillé avec les coordonnées, mais offre une grande flexibilité :
Aussi dans la bibliothèque
Validation des données en Rust : bibliothèques et approches pour un code fiable
Travailler avec YAML en Kotlin : bibliothèques et exemples
Jetons JWT en Java : guide complet pour travailler avec les JSON Web Tokens
Mockery pour Go : guide complet avec exemples
ORM pour Swift (iOS/macOS) : comparaison et exemples d'utilisation
Recommendations