PDF-Berichterstellung mit JavaScript (Node.js): Vollständige Anleitung
Die Erstellung von PDF-Dokumenten ist eine der gefragtesten Aufgaben in der Webentwicklung. Ob Rechnungen, analytische Berichte oder Zertifikate – ohne ein zuverlässiges Werkzeug geht es nicht. Im Node.js-Ökosystem gibt es mehrere leistungsstarke Bibliotheken, die diese Aufgabe schnell und flexibel lösen. In diesem Artikel betrachten wir drei Hauptansätze und zeigen, wie Sie das passende Werkzeug für Ihr Projekt auf PythonLib auswählen.
Warum PDF auf dem Server generieren?
Die clientseitige Generierung (Browser) ist oft eingeschränkt: Der Benutzer kann Daten beim Aktualisieren der Seite verlieren, und mobile Geräte verarbeiten komplexe Layouts nicht immer korrekt. Der serverseitige Ansatz mit Node.js bietet volle Kontrolle über die Dokumentstruktur, schützt die Geschäftslogik und ermöglicht die Integration der Generierung in CI/CD-Pipelines.
Top-3-Bibliotheken für die Arbeit mit PDF in Node.js
1. PDFKit – Low-Level-Arbeit mit Inhalten
PDFKit ist die beliebteste Bibliothek zur PDF-Erstellung von Grund auf. Sie erfordert keine zusätzlichen Abhängigkeiten (wie Chromium) und ermöglicht die Kontrolle über jedes Pixel des Dokuments.
- Vorteile: leicht (nur wenige Megabyte), volle Layout-Freiheit, Unterstützung für Schriftarten, Bilder, Vektorgrafiken.
- Nachteile: viel Code für komplexe Layouts erforderlich, kein automatischer Textumbruch.
Beispiel für die Erstellung einer einfachen Rechnung:
const PDFDocument = require('pdfkit');const fs = require('fs');
const doc = new PDFDocument({ margin: 50 });
doc.pipe(fs.createWriteStream('invoice.pdf'));
// Überschriftdoc.fontSize(25).text('Rechnung Nr. 123', { align: 'center' });doc.moveDown();
// Tabelledoc.fontSize(12).text('Produkt: Beratung', { continued: true }) .text('Preis: 5000 Rubel', { align: 'right' });
doc.moveDown();doc.text('Gesamt: 5000 Rubel', { align: 'right' });
doc.end();2. Puppeteer – Generierung aus HTML/CSS
Puppeteer startet einen headless-Chromium-Browser und wandelt eine HTML-Seite in PDF um. Dies ist die ideale Wahl, wenn Sie bereits HTML-Vorlagen mit CSS-Stilen haben.
- Vorteile: einfaches Layout über HTML, Unterstützung aller CSS-Eigenschaften (flex, grid, @media print), Möglichkeit zum Hinzufügen von Kopf- und Fußzeilen.
- Nachteile: schwere Abhängigkeit (~300 MB Chromium), langsamer Start, nicht für einfache Dokumente geeignet.
Beispiel für die Konvertierung von HTML in PDF:
const puppeteer = require('puppeteer');
async function generateReport() { const browser = await puppeteer.launch(); const page = await browser.newPage();
await page.setContent(`<h1 style="color: blue;">Bericht für März 2025</h1> <p>Gesamtumsatz: <strong>1.200.000 Rubel</strong></p>`);
await page.pdf({ path: 'report.pdf', format: 'A4', printBackground: true, margin: { top: '20px', bottom: '20px' } });
await browser.close();}
generateReport();3. jsPDF – Universelles Werkzeug (Client + Server)
jsPDF ist eine Bibliothek, die sowohl im Browser als auch in Node.js funktioniert. Sie bietet High-Level-Methoden zum Erstellen von Tabellen, Diagrammen und sogar zum Einbetten von Schriftarten.
- Vorteile: einfache API, integrierte Tabellenunterstützung (über Plugin), geringes Gewicht.
- Nachteile: erfordert auf dem Server manuelle Schriftartenkonfiguration (nicht alle kyrillischen Zeichen sind standardmäßig vorhanden).
Beispiel mit einer Tabelle:
const { jsPDF } = require("jspdf");require("jspdf-autotable");
const doc = new jsPDF();
doc.text("Verkaufsstatistik", 14, 20);
doc.autoTable({ head: [['Monat', 'Verkäufe', 'Gewinn']], body: [ ['Januar', '100', '20.000'], Auch in der Bibliothek
Arbeiten mit ZIP/Archiven in Rust: Die Bibliothek zip und vollständige Anleitung
Tonic für Rust: Vollständiges Tutorial mit Beispielen
Arbeiten mit ZIP/Archiven in Swift (iOS/macOS): vollständige Anleitung
Bildverarbeitung in C++: resize und crop mit der OpenCV-Bibliothek