Génération de PDF en JavaScript (Node.js) : aperçu des bibliothèques et outils
La création de documents PDF est l'une des tâches courantes en développement web. Qu'il s'agisse de générer des factures, des rapports, des certificats ou simplement d'exporter des données, Node.js propose plusieurs solutions puissantes. Dans cet article, nous examinerons les principales bibliothèques pour travailler avec des PDF côté serveur en JavaScript, leurs fonctionnalités et des exemples d'utilisation.
Pourquoi générer des PDF sur le serveur ?
La génération de PDF sur le serveur (en Node.js) présente plusieurs avantages :
- Uniformité — le document a le même aspect sur tous les appareils
- Sécurité — les données ne quittent pas le serveur
- Automatisation — possibilité de créer des PDF selon un planning ou lors d'événements spécifiques
- Prise en charge de logique complexe — accès aux bases de données, au système de fichiers et à d'autres ressources
Bibliothèques principales pour la génération de PDF en Node.js
1. PDFKit
PDFKit est la bibliothèque la plus populaire pour créer des PDF "à partir de zéro". Elle ne nécessite aucune dépendance externe et permet un contrôle total du contenu du document.
Exemple d'utilisation :
const PDFDocument = require('pdfkit');const fs = require('fs');
const doc = new PDFDocument();doc.pipe(fs.createWriteStream('output.pdf'));
// Ajout de contenudoc.fontSize(25).text('Bonjour le monde !', 100, 100);doc.fontSize(12).text('Ceci est un PDF créé avec PDFKit.', 100, 150);
// Dessiner une lignedoc.moveTo(100, 200).lineTo(500, 200).stroke();
// Finaliser le documentdoc.end();Fonctionnalités :
- Ajout de texte avec différentes polices et tailles
- Insertion d'images (JPEG, PNG)
- Dessin de lignes, rectangles et cercles
- Prise en charge des liens et des signets
- Création de documents multipages
2. Puppeteer
Puppeteer est un outil de contrôle du navigateur Chrome/Chromium. Il permet de générer des PDF à partir de pages HTML, ce qui est pratique pour les mises en page complexes.
Exemple d'utilisation :
const puppeteer = require('puppeteer');
async function generatePDF() { const browser = await puppeteer.launch(); const page = await browser.newPage();
await page.setContent('<h1>Titre</h1><p>Texte du document</p>'); await page.pdf({ path: 'page.pdf', format: 'A4' });
await browser.close();}
generatePDF();Caractéristiques :
- Prise en charge de CSS, JavaScript et de toutes les technologies web modernes
- Idéal pour convertir des modèles HTML en PDF
- Possibilité d'impression avec des paramètres définis (format, marges, échelle)
- Nécessite l'installation de Chromium (~300 Mo)
3. jsPDF (avec adaptation pour Node.js)
jsPDF est une bibliothèque côté client, mais il existe des wrappers pour une utilisation en Node.js (par exemple, jspdf-autotable).
Exemple (avec jspdf et html2canvas) :
const { jsPDF } = require('jspdf');const fs = require('fs');
const doc = new jsPDF();doc.text('Bonjour depuis Node.js !', 10, 10);doc.save('output.pdf');Limitations : jsPDF ne prend pas en charge les mises en page complexes et nécessite des bibliothèques supplémentaires pour fonctionner avec HTML.
4. pdfmake
pdfmake est une bibliothèque basée sur une description déclarative du document au format JSON.
Exemple :
const pdfmake = require('pdfmake');const fs = require('fs');
const fonts = { Roboto: { normal: 'fonts/Roboto-Regular.ttf', bold: 'fonts/Roboto-Medium.ttf' }};
const printer = new pdfmake(fonts);
const docDefinition = { content: [ { text: