Génération de rapports PDF en JavaScript (Node.js) : Puppeteer, PDFKit, jsPDF
La création de documents PDF est l'une des tâches les plus courantes en développement web. Rapports, factures, certificats, documentation — tout cela nécessite un outil fiable pour générer des fichiers côté serveur. Dans l'écosystème Node.js, il existe plusieurs bibliothèques puissantes, chacune résolvant le problème à sa manière. Dans cet article, nous allons examiner trois approches principales : l'émulation de navigateur avec Puppeteer, le travail de bas niveau avec PDF via PDFKit et la solution client-serveur jsPDF.
1. Puppeteer — génération de PDF à partir de HTML/CSS
Puppeteer est une bibliothèque pour contrôler un navigateur Chromium sans tête. Elle permet de charger n'importe quelle page HTML, d'appliquer des styles et de la « photographier » en PDF. C'est le choix idéal si vous avez déjà une mise en page de rapports en HTML/CSS et que vous souhaitez une reproduction exacte en PDF.
Fonctionnalités principales :
- Prise en charge de toutes les propriétés CSS (Flexbox, Grid, polices, ombres).
- Interaction avec JavaScript sur la page (graphiques Chart.js, tableaux dynamiques).
- Configuration du format, des marges, des en-têtes/pieds de page, des arrière-plans.
- Prise en charge des polices personnalisées (TTF, OTF).
Exemple de génération de rapport :
const puppeteer = require('puppeteer');
async function generateReport() { const browser = await puppeteer.launch(); const page = await browser.newPage();
// Charger le HTML directement (ou par URL) await page.setContent(` <html> <head> <style> body { font-family: Arial; padding: 40px; } h1 { color: #2c3e50; } .data { background: #ecf0f1; padding: 20px; } </style> </head> <body> <h1>Rapport de ventes</h1> <div class="data"> <p>Chiffre d'affaires : 1 200 000 roubles</p> <p>Nombre de commandes : 345</p> </div> </body> </html> `, { waitUntil: 'networkidle0' });
await page.pdf({ path: 'report.pdf', format: 'A4', printBackground: true, margin: { top: '20mm', bottom: '20mm' } });
await browser.close(); console.log('PDF créé !');}
generateReport();Avantages : précision de la mise en page, prise en charge des mises en page complexes, travail avec des graphiques.
Inconvénients : consommation mémoire élevée (Chromium pèse ~200 Mo), démarrage lent.
2. PDFKit — création de PDF de bas niveau
PDFKit est une bibliothèque pour manipuler directement la structure PDF. Vous n'utilisez pas de HTML, mais construisez le document par programmation : vous dessinez des lignes, ajoutez du texte, insérez des images. Cela vous donne un contrôle total sur chaque pixel du document.
Fonctionnalités principales :
- Graphiques vectoriels (lignes, rectangles, courbes).
- Prise en charge d'Unicode et intégration de polices.
- Création de tableaux, numérotation des pages.
- Travail avec des annotations et des liens.
Exemple de création d'une facture simple :
const PDFDocument = require('pdfkit');const fs = require('fs');
const doc = new PDFDocument({ size: 'A4', margin: 50 });doc.pipe(fs.createWriteStream('invoice.pdf'));
// Titredoc.fontSize(24).text('Facture n° 12345', { align: 'center' });doc.moveDown();
// Tableau (manuellement)doc.fontSize(12).text('Désignation', 50, 150);doc.text('Quantité', 350, 150);doc.text('Prix', 450, 150);
doc.moveTo(50, 170).lineTo(550, 170).stroke();
doc.text('Services de développement', 50, 180);doc.text('1', 350, 180);doc.text('150 000 roubles', 450, 180);
doc.moveDown(2);doc.fontSize(16).text('Total : 150 000 roubles', Aussi dans la bibliothèque
Travailler avec CSV en Go (Golang) : guide complet pour l'analyse et l'écriture
Cobra pour Go : guide complet avec exemples
Symfony/Console PHP : guide complet avec exemples pratiques
Guide complet gRPC Java : tutoriel avec exemples
Génération de rapports PDF en PHP : aperçu des bibliothèques et outils