Génération de PDF en JavaScript (Node.js) : bibliothèques et outils
La génération de documents PDF est une tâche courante dans le développement web. Factures, rapports, certificats, billets — tout cela est facile à créer côté serveur. Dans l'écosystème Node.js, il existe plusieurs solutions matures, chacune adaptée à des scénarios spécifiques. Dans cet article, nous examinerons trois approches principales et les bibliothèques populaires pour créer des PDF en JavaScript.
Aperçu des bibliothèques populaires
Le choix de l'outil dépend de la complexité du document : rapports textuels simples, tableaux de données ou mises en page complexes avec HTML+CSS. Voici trois bibliothèques clés.
1. PDFKit — travail de bas niveau avec PDF
PDFKit est la bibliothèque la plus populaire pour créer des PDF « à partir de zéro ». Elle permet de dessiner du texte, des lignes, des rectangles, des images, en utilisant une grille de coordonnées. Idéale pour les documents dynamiques avec un positionnement précis.
Avantages de PDFKit :
- Contrôle total sur chaque élément de la page
- Ne nécessite ni navigateur ni Puppeteer
- Prise en charge de l'intégration de polices (TrueType, OpenType)
- Fonctionne de manière asynchrone avec les flux (Stream API)
Exemple de document simple :
const PDFDocument = require('pdfkit');const fs = require('fs');
const doc = new PDFDocument();doc.pipe(fs.createWriteStream('output.pdf'));
// Titredoc.fontSize(25).text('Bonjour, PDFKit !', 100, 100);
// Texte normaldoc.fontSize(12).text('Ceci est un document PDF simple créé sur Node.js.', 100, 150);
// Dessiner une lignedoc.moveTo(100, 200).lineTo(500, 200).stroke();
// Ajouter une imagedoc.image('logo.png', 100, 220, { width: 100 });
doc.end();2. Puppeteer — génération à partir de HTML/CSS
Puppeteer est une bibliothèque pour contrôler un navigateur headless Chrome. Elle permet de charger une page HTML (ou de la générer à la volée) et de l'enregistrer au format PDF. C'est le meilleur choix si vous avez déjà des modèles HTML ou des styles CSS complexes.
Avantages de Puppeteer :
- Affichage précis du CSS (flex, grid, polices)
- Prise en charge de JavaScript sur la page (graphiques, tableaux)
- Possibilité de définir le format, les marges, les en-têtes et pieds de page
- Idéal pour les rapports et les factures
Exemple de génération de PDF à partir de HTML :
const puppeteer = require('puppeteer');
(async () => { const browser = await puppeteer.launch(); const page = await browser.newPage();
const html = `<!DOCTYPE html> <html> <head><style> body { font-family: Arial; padding: 20px; } h1 { color: #2c3e50; } table { border-collapse: collapse; width: 100%; } td, th { border: 1px solid #ccc; padding: 8px; } </style></head> <body> <h1>Rapport mensuel</h1> <table> <tr><th>Produit</th><th>Quantité</th></tr> <tr><td>Ordinateur portable</td><td>5</td></tr> <tr><td>Souris</td><td>10</td></tr> </table> </body></html>`;
await page.setContent(html); await page.pdf({ path: 'report.pdf', format: 'A4', printBackground: true });
await browser.close(); console.log('PDF créé !');})();3. jsPDF — génération côté client (et Node.js)
jsPDF a été initialement créé pour le navigateur, mais possède une version pour Node.js. Il est léger et bien adapté aux documents simples. Dans Node.js, il est utilisé via le paquet jspdf avec des dépendances supplémentaires.
Avantages de jsPDF :
- Taille réduite
- Prise en charge de l'Unicode et du cyrillique (via le chargement de polices)
- Peut fonctionner à la fois côté client et
Aussi dans la bibliothèque
Traitement des images en Kotlin : bibliothèques, outils et exemples
Kotlinx.serialization et Valiktor : validation de données en Kotlin
Cryptographie en Java : chiffrement et hachage des données
Client HTTP pour JavaScript (Node.js) : top bibliothèques pour travailler avec les API
Sérialisation d'objets en TypeScript : bibliothèques, méthodes et exemples