Ist es möglich mit PhantomJS und Knoten dynamisch erzeugen von PDF-Dateien aus Vorlagen?
Hintergrund /Notwendigkeit
Arbeite ich mit einer Gruppe auf einer web-Anwendung mit Node.JS und Express. Wir müssen in der Lage sein, um Berichte zu generieren, die gedruckt werden können als in Papierform und auch in Papierform Formen. Vorzugsweise möchten wir die dynamische Erzeugung von PDF-Dateien auf dem server für die beiden Berichte und von hand geschriebene Formen. Derzeit nutzen wir ein EJS-templates auf dem server.
Optionen
Dachte ich, es wäre praktisch in der Lage sein, Vorlagen zu verwenden, um in der Lage sein, um erstellen von Formularen/Berichte und generieren einer PDF-Datei aus den resultierenden HTML-Code, aber meine Möglichkeiten, dies zu tun scheinen begrenzt, soweit ich finden kann. Ich habe mir zwei verschiedene mögliche Lösungen:
- PhantomJS -- (npm Knoten-phantom Modul)
- PDFKit
EDIT: ich eine andere gefunden Node.JS Modul, das in der Lage ist zum generieren von PDF-Dateien aus HTML-genannt Knoten-wkhtml die sich auf wkhtmltopdf. Ich bin jetzt vergleicht mit node-phantom
und node-wkhtml
. Ich war in der Lage, zum generieren von PDF-Dateien auf einen Node-server mit beiden und Sie beide zu sein scheinen in der Lage zu tun, was ich brauche.
Habe ich einige Beispiele für die Verwendung von PhantomJS zum Rendern von PDF-Dokumenten aus Webseiten, aber alle Beispiele, die ich gesehen haben, verwenden Sie eine URL und nicht füttern es einen HTML-string an. Ich bin nicht sicher, wenn ich könnte diese Arbeit mit Vorlagen, um die dynamische Erzeugung von PDF-reports.
Wenn eine Anfrage für einen Bericht in der ich hoffte, dass HTML von einem EJS-template und verwenden, erzeugen Sie ein PDF. Gibt es trotzdem für mich zu gebrauchen Phantom, um dynamisch erstellen Sie eine Seite vollständig auf dem server, ohne dass eine Anfrage?
Meine andere option ist die Verwendung von PDFkit die es erlaubt die dynamische Generierung von PDF-Dateien, aber es ist ein canvas-ähnliches API und nicht wirklich unterstützt jede Vorstellung von Vorlagen, soweit ich das sagen kann.
Die Frage
Weiß jemand, ob ich verwenden kann PhantomJS mit Knoten, die dynamische Erzeugung von PDF-Dateien generierte HTML-Code aus einer Vorlage? Oder kennt jemand andere Lösungen, die ich verwenden können, um zu generieren und dienen druckbare Berichte/Formulare von meinem Node/Express-back-end.
Du musst angemeldet sein, um einen Kommentar abzugeben.
EJS scheint zu verlaufen, in PhantomJS (nach der Installation des
path
- Modul). Um eine Seite zu laden in PhantomJS gegeben ein HTML-string, tunpage.content = '<html><head>...';
.npm install ejs
undnpm install path
, dann:(Führen Sie dieses Skript mit
phantomjs
, nichtnode
.)page.content
wie dies auf mein-Node-server mit (Knoten-phantom), die Kontrollen der lokalen PhantomJS installation. Es wurden keine Fehler geworfen Einstellung der Inhalte und zu Rendern, aber das PDF war nur eine einzige leere Seite. Um den Inhalt mit Knoten-phantom müssen Sie die async-Funktionpage.set
.Werde ich die post eine Antwort für jeden, der versucht, etwas ähnliches zu tun mit
node-phantom
. Danode-phantom
steuert die lokale installation von PhantomJS, Sie müssen verwenden Sie asynchrone Methoden für alles, auch wenn die entsprechende PhantomJS synchronen Betrieb. Beim festlegen der Inhalte für eine Seite zu Rendern in PhantomJS Sie können einfach tun:Jedoch, mit der Knoten-phantom-Modul innerhalb der Knoten müssen Sie die
page.set
Methode. Dies ist der code, den ich unten verwendet.Eine wirklich einfache Lösung für dieses problem ist die Knoten-webshot Modul - Sie können raw-html-Code direkt in ein argument und druckt die pdf-Datei direkt.