Génération de PDF en Java : aperçu des meilleures bibliothèques
La génération de documents PDF est l'une des tâches typiques du développement Java en entreprise. Rapports, factures, contrats, certificats — tout cela peut être facilement généré par programmation. Dans cet article, nous examinerons les trois bibliothèques les plus populaires pour travailler avec les PDF en Java : iText, Apache PDFBox et OpenPDF. Nous analyserons leurs capacités, leurs particularités et fournirons des exemples pratiques de code.
1. iText — un standard puissant et commercial
iText est de facto le standard pour la création de PDF en Java. La bibliothèque existe depuis l'an 2000 et offre une fonctionnalité très étendue : du texte simple aux formulaires complexes, filigranes, signatures numériques et travail avec PDF/A.
Licence : iText est distribué sous une double licence. Pour les projets open source (AGPL) — gratuit, pour une utilisation commerciale, l'achat d'une licence est requis.
Exemple : création d'un PDF simple avec un tableau
import com.itextpdf.kernel.pdf.PdfDocument;import com.itextpdf.kernel.pdf.PdfWriter;import com.itextpdf.layout.Document;import com.itextpdf.layout.element.Cell;import com.itextpdf.layout.element.Paragraph;import com.itextpdf.layout.element.Table;import com.itextpdf.layout.property.UnitValue;
public class ItextExample { public static void main(String[] args) throws Exception { String dest = "example_itext.pdf"; PdfWriter writer = new PdfWriter(dest); PdfDocument pdfDoc = new PdfDocument(writer); Document document = new Document(pdfDoc);
// Ajout d'un titre document.add(new Paragraph("Rapport de ventes"));
// Création d'un tableau Table table = new Table(UnitValue.createPercentArray(3)).useAllAvailableWidth(); table.addHeaderCell(new Cell().add(new Paragraph("Produit"))); table.addHeaderCell(new Cell().add(new Paragraph("Quantité"))); table.addHeaderCell(new Cell().add(new Paragraph("Prix")));
table.addCell(new Cell().add(new Paragraph("Ordinateur portable"))); table.addCell(new Cell().add(new Paragraph("10"))); table.addCell(new Cell().add(new Paragraph("1200 $")));
table.addCell(new Cell().add(new Paragraph("Souris"))); table.addCell(new Cell().add(new Paragraph("50"))); table.addCell(new Cell().add(new Paragraph("25 $")));
document.add(table); document.close();
System.out.println("PDF créé : " + dest); }}Avantages d'iText : immense communauté, excellente documentation, prise en charge de scénarios complexes (signatures, formulaires, PDF/UA). Inconvénients : coût élevé de la licence commerciale.
2. Apache PDFBox — gratuit et open source
Apache PDFBox est une bibliothèque entièrement gratuite sous licence Apache 2.0. Elle permet non seulement de créer des PDF à partir de zéro, mais aussi de modifier des documents existants, d'extraire du texte, de travailler avec des formulaires et des images.
Exemple : création d'un document avec du texte et une image
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.graphics.image.PDImageXObject;
import java.io.File;
public class PdfBoxExample { public static void main(String[] args) throws Exception { PDDocument document = new PDDocument(); PDPage page = new PDPage(); document.addPage(page);
PDPageContentStream contentStream = new PDPageContentStream(document, page);
// Chargement de la police (fichier de police requis) PDType0Font font = PDType0Font.load(document, new File("/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf")); contentStream.setFont(font, 14); contentStream.beginText(); contentStream.newLineAtOffset(50, 700); conte