Génération de rapports PDF en JavaScript (Node.js) : bibliothèques et exemples

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Génération de rapports PDF en JavaScript (Node.js)



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 la génération côté serveur. Dans l'écosystème Node.js, il existe plusieurs bibliothèques puissantes permettant de créer des fichiers PDF de manière flexible. Dans cet article, nous allons détailler trois approches principales : PDFKit (programmation directe), Puppeteer (rendu HTML) et jsPDF (version légère).



Pourquoi générer des PDF sur le serveur ?

  • Contenu dynamique — données issues de la base, calculs, graphiques.
  • Sécurité — contrôle d'accès et gestion des versions.
  • Automatisation — envoi massif de rapports programmés.
  • Format unifié — affichage correct sur tous les appareils.


1. PDFKit — contrôle total du document

PDFKit est la bibliothèque la plus populaire pour créer des PDF « à partir de zéro ». Elle ne nécessite pas de navigateur et fonctionne exclusivement avec des objets JavaScript. Vous contrôlez chaque élément : texte, images, graphiques vectoriels, polices.



Installation

npm install pdfkit


Exemple : rapport simple avec tableau

const PDFDocument = require('pdfkit');const fs = require('fs');

const doc = new PDFDocument();

doc.pipe(fs.createWriteStream('report.pdf'));

// Titredoc.fontSize(24).text('Rapport mensuel', { align: 'center' });doc.moveDown();

// Sous-titredoc.fontSize(14).text('Période : Janvier 2025', { align: 'center' });doc.moveDown(2);

// Tableau (simulation)doc.fontSize(12).font('Helvetica-Bold');doc.text('Produit', 50, 150);doc.text('Quantité', 250, 150);doc.text('Prix', 400, 150);

doc.font('Helvetica');const data = [ { item: 'Ordinateurs portables', qty: 15, price: 75000 }, { item: 'Moniteurs', qty: 30, price: 25000 }, { item: 'Claviers', qty: 100, price: 1500 }];

let y = 170;data.forEach(row => { doc.text(row.item, 50, y); doc.text(String(row.qty), 250, y); doc.text(String(row.price), 400, y); y += 20;});

// Totaldoc.moveDown();doc.font('Helvetica-Bold');doc.text(`Total : ${data.reduce((sum, r) => sum + r.qty * r.price, 0)} roubles`, 50, y + 20);

doc.end();


Fonctionnalités de PDFKit :

  • Graphiques vectoriels (lignes, rectangles, cercles).
  • Intégration de polices (TrueType, OpenType).
  • Prise en charge d'Unicode et du cyrillique.
  • Création de liens et d'annotations.


2. Puppeteer — rendu HTML en PDF

Si vous avez déjà un modèle HTML de rapport (par exemple, avec Bootstrap), Puppeteer est le choix idéal. Il lance un navigateur Chrome sans tête et convertit la page en PDF en conservant tous les styles, polices et animations JavaScript.



Installation

npm install puppeteer


Exemple : conversion d'un modèle HTML

const puppeteer = require('puppeteer');

async function generatePDF() { const browser = await puppeteer.launch(); const page = await browser.newPage();

// HTML avec CSS const html = ` <!DOCTYPE html> <html> <head> <style> body { font-family: Arial; padding: 40px; } h1 { color: #2c3e50; } table { width: 100%; border-collapse: collapse; } th, td { border: 1px solid #ccc; padding: 8px; } </style> </head> <body> <h1>Rapport des ventes</h1> <table> <tr><th>Mois</th><th>Montant</th></tr> <tr><td>Janvier</td><td>450 000 roubles</td>

Recommendations