Génération de rapports PDF en Java : aperçu des bibliothèques iText et Apache PDFBox
La création de documents PDF est l'une des tâches fréquentes dans les applications Java d'entreprise. Rapports, factures, bons de livraison, certificats — tout cela peut être facilement généré par programmation. Dans l'écosystème Java, il existe deux bibliothèques principales pour travailler avec les PDF : iText (standard industriel, mais avec une licence commerciale pour les nouvelles versions) et Apache PDFBox (entièrement gratuite et open source). Dans cet article, nous analyserons les deux, montrerons des exemples de code et vous aiderons à choisir l'outil adapté à votre projet.
1. Apache PDFBox — une alternative gratuite aux fonctionnalités étendues
Apache PDFBox est une bibliothèque open source (licence Apache 2.0). Elle permet de créer des PDF à partir de zéro, de modifier des PDF existants, d'extraire du texte et des métadonnées. PDFBox ne nécessite pas de licence commerciale, ce qui en fait un choix idéal pour les startups et les projets open source.
Fonctionnalités principales :
- Création de documents avec du texte, des images, des tableaux.
- Gestion des polices (y compris le cyrillique).
- Ajout de signets, de liens hypertextes, de filigranes.
- Chiffrement et protection par mot de passe.
- Extraction de texte et d'images à partir de PDF existants.
Exemple : création d'un rapport PDF simple avec un tableau
import org.apache.pdfbox.pdmodel.PDDocument;import org.apache.pdfbox.pdmodel.PDPage;import org.apache.pdfbox.pdmodel.PDPageContentStream;import org.apache.pdfbox.pdmodel.font.PDType0Font;import org.apache.pdfbox.pdmodel.common.PDRectangle;import java.io.File;import java.io.IOException;
public class PdfBoxReport { public static void main(String[] args) throws IOException { try (PDDocument document = new PDDocument()) { PDPage page = new PDPage(PDRectangle.A4); document.addPage(page);
// Chargement de la police avec support du cyrillique PDType0Font font = PDType0Font.load(document, new File("fonts/arial.ttf"));
try (PDPageContentStream cs = new PDPageContentStream(document, page)) { // Titre cs.beginText(); cs.setFont(font, 18); cs.newLineAtOffset(50, 750); cs.showText("Rapport des ventes pour le T1 2025"); cs.endText();
// Tableau (implémentation simple via lignes et texte) cs.setFont(font, 12); // Dessiner les en-têtes de colonnes float margin = 50; float yStart = 700; float tableWidth = 500; float rowHeight = 25; String[] headers = {"Produit", "Quantité", "Prix, €"}; String[][] data = {{"Ordinateur portable", "10", "85000"}, {"Souris", "50", "1500"}, {"Clavier", "30", "3500"}};
// En-tête du tableau cs.setLineWidth(1f); for (int i = 0; i < headers.length; i++) { cs.addRect(margin + i * (tableWidth / 3), yStart - rowHeight, tableWidth / 3, rowHeight); cs.stroke(); cs.beginText(); cs.newLineAtOffset(margin + i * (tableWidth / 3) + 5, yStart - rowHeight + 5); cs.showText(headers[i]); cs.endText(); }
// Données float yPos = yStart - rowHeight; for (String[] row : data) { yPos -= rowHeight; for (int i = 0; i < row.length; i++) { cs.addRect(margin + i * (tableWidth / 3), yPos, tableWidth / 3, rowHeight); cs.stroke(); cs.beginText(); cs.newLineAtOffset(margin + i * (tableWidth / 3) + 5, yPos + 5); cs.showText(row[i]); cs.endText(); Aussi dans la bibliothèque
Jetons JWT en C# (.NET) : travailler avec System.IdentityModel.Tokens.Jwt
DataStore Kotlin : guide complet avec exemples pratiques
GraphQL en PHP : Guide complet de la bibliothèque webonyx/graphql-php
Internationalisation (i18n) en Swift : NSLocalizedString et String Catalog