PDF-Berichte mit JavaScript (Node.js) generieren: Bibliotheken und Beispiele

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

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 pdfkit


Beispiel: 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 puppeteer


Beispiel: 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>

Empfehlungen