PDF-Berichte mit JavaScript (Node.js) generieren
Die Erstellung von PDF-Dokumenten ist eine der gefragtesten Aufgaben in der Webentwicklung. Berichte, Rechnungen, Zertifikate, Dokumentationen – all dies erfordert ein zuverlässiges Werkzeug für die serverseitige Generierung. Im Node.js-Ökosystem gibt es mehrere leistungsstarke Bibliotheken, die eine flexible Erstellung von PDF-Dateien ermöglichen. In diesem Artikel werden wir drei Hauptansätze im Detail untersuchen: PDFKit (direkte Programmierung), Puppeteer (HTML-Rendering) und jsPDF (leichte Variante).
Warum PDF auf dem Server generieren?
- Dynamischer Inhalt – Daten aus der Datenbank, Berechnungen, Diagramme.
- Sicherheit – Zugriffskontrolle und Versionierung.
- Automatisierung – massenhafter Versand von Berichten nach Zeitplan.
- Einheitliches Format – korrekte Darstellung auf allen Geräten.
1. PDFKit – volle Kontrolle über das Dokument
PDFKit ist die beliebteste Bibliothek zum Erstellen von PDFs „von Grund auf“. Sie benötigt keinen Browser und arbeitet ausschließlich mit JavaScript-Objekten. Sie steuern jedes Element: Text, Bilder, Vektorgrafiken, Schriftarten.
Installation
npm install pdfkitBeispiel: Einfacher Bericht mit Tabelle
const PDFDocument = require('pdfkit');const fs = require('fs');
const doc = new PDFDocument();
doc.pipe(fs.createWriteStream('report.pdf'));
// Überschriftdoc.fontSize(24).text('Monatsbericht', { align: 'center' });doc.moveDown();
// Untertiteldoc.fontSize(14).text('Zeitraum: Januar 2025', { align: 'center' });doc.moveDown(2);
// Tabelle (Simulation)doc.fontSize(12).font('Helvetica-Bold');doc.text('Produkt', 50, 150);doc.text('Menge', 250, 150);doc.text('Preis', 400, 150);
doc.font('Helvetica');const data = [ { item: 'Laptops', qty: 15, price: 75000 }, { item: 'Monitore', qty: 30, price: 25000 }, { item: 'Tastaturen', 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;});
// Summedoc.moveDown();doc.font('Helvetica-Bold');doc.text(`Gesamt: ${data.reduce((sum, r) => sum + r.qty * r.price, 0)} Rubel`, 50, y + 20);
doc.end();Funktionen von PDFKit:
- Vektorgrafiken (Linien, Rechtecke, Kreise).
- Einbettung von Schriftarten (TrueType, OpenType).
- Unterstützung von Unicode und Kyrillisch.
- Erstellung von Links und Anmerkungen.
2. Puppeteer – HTML in PDF rendern
Wenn Sie bereits eine HTML-Vorlage für Ihren Bericht haben (z. B. mit Bootstrap), ist Puppeteer die ideale Wahl. Es startet einen headless Chrome-Browser und wandelt die Seite unter Beibehaltung aller Stile, Schriftarten und JavaScript-Animationen in ein PDF um.
Installation
npm install puppeteerBeispiel: Konvertierung einer HTML-Vorlage
const puppeteer = require('puppeteer');
async function generatePDF() { const browser = await puppeteer.launch(); const page = await browser.newPage();
// HTML mit 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>Verkaufsbericht</h1> <table> <tr><th>Monat</th><th>Betrag</th></tr> <tr><td>Januar</td><td>450 000 Rubel</td> Auch in der Bibliothek
Überwachung von TypeScript-Anwendungen: Tools und Bibliotheken
Pistache für C++: Vollständiges Tutorial mit Beispielen
gRPC für Kotlin: Bibliotheken, Server und Client – Codebeispiele
Arbeiten mit Daten in JavaScript (Node.js): Die besten Bibliotheken
Bildverarbeitung in Rust: resize und crop mit image und imageproc