Génération de PDF en JavaScript (Node.js) : guide complet des bibliothèques et outils
La génération de documents PDF est l'une des tâches les plus demandées dans le développement web. De la création de factures et de rapports à la réalisation de documents complexes de plusieurs pages, Node.js offre des outils puissants pour travailler avec les PDF. Dans cet article, nous examinerons les principales bibliothèques et approches pour créer des fichiers PDF côté serveur en JavaScript.
Pourquoi générer des PDF sur le serveur ?
La génération de PDF côté serveur permet de :
- Créer des documents dynamiquement à partir de données issues de la base
- Assurer une cohérence de formatage
- Traiter de grands volumes de données sans solliciter le client
- S'intégrer aux systèmes de reporting existants
Principales bibliothèques pour la génération de PDF en Node.js
1. pdfkit — la solution classique
pdfkit est l'une des bibliothèques les plus populaires pour créer des PDF à partir de zéro. Elle offre un contrôle total sur le contenu du document : texte, images, tableaux, graphiques vectoriels.
const PDFDocument = require('pdfkit');const fs = require('fs');
const doc = new PDFDocument();doc.pipe(fs.createWriteStream('output.pdf'));
// Ajout de textedoc.fontSize(25).text('Bonjour le monde !', 100, 100);
// Dessin d'une lignedoc.moveTo(100, 150).lineTo(400, 150).stroke();
// Insertion d'une imagedoc.image('logo.png', 100, 200, { width: 100 });
doc.end();Avantages : léger, rapide, prend en charge Unicode et le cyrillique, nombreuses polices.
Inconvénients : nécessite une configuration manuelle de la mise en page, pas de support HTML intégré.
2. Puppeteer — génération à partir de HTML
Puppeteer est une bibliothèque pour contrôler un navigateur Chrome headless. Elle permet de convertir des pages HTML en PDF en conservant tous les styles et scripts.
const puppeteer = require('puppeteer');
async function generatePDF() { const browser = await puppeteer.launch(); const page = await browser.newPage(); await page.setContent('<h1 style="color: red;">Titre du PDF</h1><p>Texte du document</p>'); await page.pdf({ path: 'output.pdf', format: 'A4', margin: { top: '20px', bottom: '20px' } }); await browser.close();}
generatePDF();Avantages : idéal pour les mises en page HTML complexes, prend en charge CSS, JavaScript, polices.
Inconvénients : lourd (nécessite Chromium), plus lent que les autres bibliothèques.
3. pdf-lib — modification de PDF existants
pdf-lib est spécialisée dans l'édition de documents PDF existants. Elle permet d'ajouter du texte, des images, de remplir des formulaires.
const { PDFDocument } = require('pdf-lib');const fs = require('fs');
async function editPDF() { const existingPdfBytes = fs.readFileSync('template.pdf'); const pdfDoc = await PDFDocument.load(existingPdfBytes); const pages = pdfDoc.getPages(); const firstPage = pages[0]; firstPage.drawText('Nouveau texte', { x: 50, y: 50, size: 20, color: rgb(0, 0, 0) }); const pdfBytes = await pdfDoc.save(); fs.writeFileSync('modified.pdf', pdfBytes);}
editPDF();Avantages : léger, ne nécessite pas de dépendances externes, fonctionne très bien avec les formulaires.
Inconvénients : capacités limitées pour créer des mises en page complexes à partir de zéro.
4. jsPDF — solution client-serveur
jsPDF a été initialement créée pour le navigateur, mais fonctionne également dans Node.js. Convient aux documents simples.
const { jsPDF } = require("jspdf");
const doc = new jsPDF();doc.text("Hello world!", 10, 10);doc.save("output.pdf");Avantages : API simple, fonctionne côté client et serveur.
Inconvénients :
Aussi dans la bibliothèque
Travailler avec Excel en TypeScript : bibliothèques, outils et exemples de code
Ehcache Java : guide complet avec exemples
Traitement d'images en Rust : redimensionnement et recadrage avec image et imageproc
Rate Limiting en C++ : bibliothèques et implémentation pour la protection d'API
ShareLink Swift : guide complet avec exemples
Recommendations