PDF-Generierung in JavaScript (Node.js): Vollständiger Leitfaden zu Bibliotheken und Werkzeugen
Die Generierung von PDF-Dokumenten ist eine der gefragtesten Aufgaben in der Webentwicklung. Von der Erstellung von Rechnungen und Berichten bis hin zur Erstellung komplexer mehrseitiger Dokumente bietet Node.js leistungsstarke Werkzeuge für die Arbeit mit PDFs. In diesem Artikel betrachten wir die wichtigsten Bibliotheken und Ansätze zur Erstellung von PDF-Dateien auf der Serverseite von JavaScript.
Warum PDFs auf dem Server generieren?
Die serverseitige PDF-Generierung ermöglicht:
- Dynamische Erstellung von Dokumenten basierend auf Daten aus der Datenbank
- Sicherstellung konsistenter Formatierung
- Arbeit mit großen Datenmengen ohne Belastung des Clients
- Integration in bestehende Berichtssysteme
Wichtige Bibliotheken zur PDF-Generierung in Node.js
1. pdfkit — die klassische Lösung
pdfkit ist eine der beliebtesten Bibliotheken zur PDF-Erstellung von Grund auf. Sie bietet vollständige Kontrolle über den Dokumentinhalt: Text, Bilder, Tabellen, Vektorgrafiken.
const PDFDocument = require('pdfkit');const fs = require('fs');
const doc = new PDFDocument();doc.pipe(fs.createWriteStream('output.pdf'));
// Text hinzufügendoc.fontSize(25).text('Hallo, Welt!', 100, 100);
// Linie zeichnendoc.moveTo(100, 150).lineTo(400, 150).stroke();
// Bild einfügendoc.image('logo.png', 100, 200, { width: 100 });
doc.end();Vorteile: leichtgewichtig, schnell, unterstützt Unicode und Kyrillisch, viele Schriftarten.
Nachteile: erfordert manuelle Layout-Anpassung, keine integrierte HTML-Unterstützung.
2. Puppeteer — Generierung aus HTML
Puppeteer ist eine Bibliothek zur Steuerung eines headless Chrome-Browsers. Sie ermöglicht die Konvertierung von HTML-Seiten in PDF unter Beibehaltung aller Stile und Skripte.
const puppeteer = require('puppeteer');
async function generatePDF() { const browser = await puppeteer.launch(); const page = await browser.newPage(); await page.setContent('<h1 style="color: red;">PDF-Überschrift</h1><p>Dokumenttext</p>'); await page.pdf({ path: 'output.pdf', format: 'A4', margin: { top: '20px', bottom: '20px' } }); await browser.close();}
generatePDF();Vorteile: ideal für komplexe HTML-Layouts, unterstützt CSS, JavaScript, Schriftarten.
Nachteile: schwergewichtig (erfordert Chromium), langsamer als andere Bibliotheken.
3. pdf-lib — Modifikation bestehender PDFs
pdf-lib ist spezialisiert auf die Bearbeitung bestehender PDF-Dokumente. Ermöglicht das Hinzufügen von Text, Bildern und das Ausfüllen von Formularen.
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('Neuer Text', { x: 50, y: 50, size: 20, color: rgb(0, 0, 0) }); const pdfBytes = await pdfDoc.save(); fs.writeFileSync('modified.pdf', pdfBytes);}
editPDF();Vorteile: leichtgewichtig, keine externen Abhängigkeiten erforderlich, funktioniert hervorragend mit Formularen.
Nachteile: eingeschränkte Möglichkeiten zur Erstellung komplexer Layouts von Grund auf.
4. jsPDF — Client-Server-Lösung
jsPDF wurde ursprünglich für den Browser entwickelt, funktioniert aber auch in Node.js. Geeignet für einfache Dokumente.
const { jsPDF } = require("jspdf");
const doc = new jsPDF();doc.text("Hello world!", 10, 10);doc.save("output.pdf");Vorteile: einfache API, funktioniert auf Client und Server.
Nachteile:
Auch in der Bibliothek
Event Bus und Observer-Muster in PHP: Implementierung und Beispiele
Internationalisierung (i18n) in PHP: gettext-Bibliothek und moderne Ansätze
CLI-Framework für Swift: Erstellung von Konsolen-Dienstprogrammen für iOS/macOS
Caching in Kotlin: Redis, Caffeine und Ehcache – ein vollständiger Leitfaden
Arbeit mit S3 und Cloud-Speichern in JavaScript (Node.js) — die Bibliothek @aws-sdk/client-s3
Empfehlungen