Node.js-Module: PDFKit

PDFs mit Node.js erstellen
Kommentare

Zu den eher unbeliebten Aufgaben in der Webentwicklung gehört die Erstellung von PDF-Dateien. Oft sieht man sich Aufgaben dieser Art gegenüber, wenn es um das Erstellen von Rechnungen oder ähnlichen Belegen geht. Das eigentliche Generieren des Dokuments ist dabei nicht das größte Problem, sondern, dass das Dokument nach etwas aussehen soll – beziehungsweise bestimmten Layoutvorgaben entsprechen muss. In den meisten Fällen endet das Ganze in einer Trial-and-Error-Orgie, in der um ein pixelgenaues Ergebnis gefeilscht wird. Die gute Nachricht: Das kann man auch in Node.js haben.

Wie so oft in der Programmierung gibt es nicht die eine Standardlösung, sondern ein Sammelsurium aus vielen Bibliotheken, von denen jede verspricht, es ein bisschen besser als alle anderen zu machen. Eine recht populäre Lösung, die einerseits über einen großen Funktionsumfang verfügt und mit der sich andererseits trotzdem recht schnell Ergebnisse generieren lassen, ist das PDFKit. Natürlich liegt die Dokumentation dieser Bibliothek auch als PDF vor. Die Entwickler handeln hier nach dem Motto „Eat your own dog food“.

Etwas gewöhnungsbedürftig erscheint, dass sämtliche Beispiele in der Dokumentation nicht direkt in JavaScript, sondern in CoffeeScript geschrieben sind, was daran liegt, dass auch das PDFKit selbst in CoffeeScript implementiert ist. Dabei stellt auch das kein wirkliches Problem dar, man muss sich lediglich ein paar Klammern und Semikolons dazu denken.
Ansonsten ist das Schema für die Benutzung das gleiche wie für jedes andere Node.js-Paket: Die Installation erfolgt über den Node Package Manager mit dem Kommando npm install pdfkit.

Nach der Installation kann man sofort mit der PDF-Generierung beginnen.

Initialisierung

Die Initialisierung eines PDFs folgt immer dem gleichen Prozess. Zunächst werden die notwendigen Module geladen, dann wird ein neues Objekt generiert und ein Dateisystemstream erstellt, über den das PDF gespeichert wird. Schließlich wird nach den Operationen zur Erzeugung des Dokumenteninhalts die end-Methode aufgerufen:

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

var doc = new PDFDocument();

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

// Inhalt hier

doc.end();

Text

Die erste Übung ist das Einfügen eines simplen Texts. Mit doc.text(„Hello World“) erzeugt man einen einfachen Textknoten. Reicht die Standardplatzierung nicht aus, kann man zusätzlich die x- und y-Koordinaten angeben. Ansonsten ist das Layout zeilenbasiert; die Schriftgröße wird mit der doc.fontSize-Methode gesetzt, die Textfarbe setzt man mit doc.fillColor:

doc.fillColor('green');
  .fontSize(25);
  .text('Hello World');

Zeichnen

Von einfachen Linien bis hin zu komplexen Formen kann so ziemlich alles mit dem PDFKit gezeichnet werden. Mit der moveTo-Methode kann der Cursor zu einer bestimmten Position bewegt werden, mit lineTo kann eine Linie gezogen werden und mit der circle-Methode erstellt man einen Kreis. Ähnliche Methoden gibt es auch für zahlreiche weitere geometrische Formen:

doc.circle(100, 100, 50)
  .stroke();

Bilder

Jetzt gilt es, noch ein Bild in das Dokument einzufügen. Das erreicht man durch einen Aufruf der image-Methode, die den Pfad zur gewünschten Datei erhält. Unterstützt werden die Formate JPEG und PNG. Außerdem können Bilder beliebig skaliert und positioniert werden:

doc.image("logo.png", 20, 20);

Fazit

Das Erstellen von PDFs ist zwar immer noch kein Spaß, mit dem PDFKit wird diese Aufgabe aber zumindest etwas einfacher. Der Funktionsumfang kann sich durchaus sehen lassen. Außerdem wird das Projekt aktiv weiterentwickelt, und es stehen noch einige sehr interessante Features in der Warteschlange. Mehr dazu gibt es direkt auf der Projektwebsite; den Quellcode gibt es frei verfügbar auf GitHub.

PHP Magazin

Entwickler MagazinDieser Artikel ist im PHP Magazin erschienen. Das PHP Magazin deckt ein breites Spektrum an Themen ab, die für die erfolgreiche Webentwicklung unerlässlich sind.

Natürlich können Sie das PHP Magazin über den entwickler.kiosk auch digital im Browser oder auf Ihren Android- und iOS-Devices lesen. In unserem Shop ist das Entwickler Magazin ferner im Abonnement oder als Einzelheft erhältlich.

Aufmacherbild: Mak PDF; Stack of Documents with Large Amount of Analytic Material. von Shutterstock / Urheberrecht: Eiko Tsuchiya

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -