Generieren von PDF-Dateien mit JavaScript

268

Ich habe versucht, XML-Daten von einer Webseite in PDF-Dateien zu konvertieren, und ich hatte gehofft, dass ich dies vollständig in JavaScript tun kann. Ich muss in der Lage sein, Text, Bilder und einfache Formen zu zeichnen. Ich würde dies gerne vollständig im Browser tun können.

Amöbe
quelle

Antworten:

446

Ich habe gerade eine Bibliothek namens jsPDF geschrieben , die PDFs nur mit Javascript generiert. Es ist noch sehr jung und ich werde bald Funktionen und Fehlerbehebungen hinzufügen. Außerdem gibt es einige Ideen für Problemumgehungen in Browsern, die keine Daten-URIs unterstützen. Es ist unter einer liberalen MIT-Lizenz lizenziert.

Ich bin auf diese Frage gestoßen, bevor ich anfing sie zu schreiben und dachte, ich würde zurückkommen und dich wissen lassen :)

Generieren Sie PDFs in Javascript

Beispiel Erstellen Sie eine PDF-Datei "Hello World".

// Default export is a4 paper, portrait, using milimeters for units
var doc = new jsPDF()

doc.text('Hello world!', 10, 10)
doc.save('a4.pdf')
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.3.5/jspdf.debug.js"></script>

James Hall
quelle
10
Habe ich jsPDF teilweise inspiriert? Ich habe an dem Tag, an dem Sie es angekündigt haben, von jsPDF erfahren. Sieht bisher großartig aus. Am Ende habe ich mich für Prawn entschieden, da es mit Sicherheit die beste PDF-Generierungsbibliothek für meine Anforderungen ist. Ich würde immer noch gerne meine gesamte Arbeit im Browser erledigen, da ich nicht sicher bin, ob Ruby auf dem System verfügbar sein wird, auf dem ich es bereitstelle. Ich beobachte jsPDF sehr genau. Ich würde gerne helfen, aber meine Zeit ist sehr begrenzt. Das könnte sich in Zukunft ändern.
Amöbe
7
Du hast es etwas inspiriert :), ich habe mich im Internet umgesehen, um zu sehen, ob es bereits existiert und festgestellt, dass einige Leute es nützlich finden würden. Lassen Sie mich wissen, wenn Sie helfen möchten. Ich bin @MrRio auf Twitter.
James Hall
23
Es ist immer noch sehr lebendig. 0.9.0rc2 Heute veröffentlicht.
James Hall
87
@JamesHall, ich möchte mich bei Ihnen für die ganze Arbeit bedanken, die erforderlich ist, um dies zu schreiben, und für die MIT-Lizenzierung, um die Welt zu einem besseren Ort zu machen, an dem Sie es zu Ihrem eigenen Vorteil hätten kommerzialisieren können.
Charles Burns
16
Können Downvoter uns ihre "besseren" Ideen oder Lösungen anbieten? Dies ist eine hervorragende Anstrengung.
Onur Yıldırım
138

Eine weitere erwähnenswerte Javascript-Bibliothek ist pdfmake .

Die Browserunterstützung scheint nicht so stark zu sein wie jsPDF, und es scheint auch keine Option für Formen zu geben. Die Optionen zum Formatieren von Text sind jedoch weiter fortgeschritten als die derzeit in jsPDF verfügbaren Optionen.

mg1075
quelle
7
Diese Antwort sollte viel mehr positiv bewertet werden, pdfmake ist so viel robuster als jspdf. Es handelt sich jedoch nur um eine Randnotiz, es handelt sich um einen Wrapper um die PDFKit-Bibliothek.
Vittore
2
Eine weitere Randnotiz: Jspdf unterstützt Utf-8 nicht und pdfmake unterstützt Utf-8 nur für Standardschriftarten.
Leo
"pdfmake.min.js - 0.1.22 - vor 9 Stunden" Es ist nicht tot, aktualisiert an diesem Tag.
Zenbeni
Aus dem Vergleich der beiden Spielplätze geht hervor, dass jsPDF eher auf die "grafische" PDF-Erstellung abzielt, während pdfmake eher auf die Erstellung gut formatierter "einfacher" Dokumente abzielt und viel mehr Optionen für die generische Textformatierung bietet.
Cslotty
Ist das IE freundlich?
Wildhammer
59

Ich pflege PDFKit , das auch pdfmake unterstützt (hier bereits erwähnt). Es funktioniert sowohl im Knoten als auch im Browser und unterstützt eine Reihe von Dingen, die andere Bibliotheken nicht tun:

  • Einbetten von untergeordneten Schriftarten mit Unterstützung für Unicode.
  • Viele fortgeschrittene Textlayout-Inhalte (Spalten, Seitenumbruch, vollständiger Unicode-Zeilenumbruch, grundlegender Rich-Text usw.).
  • Arbeiten an noch mehr Schriftarten für fortgeschrittene Typografie (OpenType / AAT-Ligaturen, kontextbezogene Substitution usw.). In Kürze erhältlich: Wenn Sie interessiert sind, besuchen Sie den Fontkit-Zweig.
  • Weitere Grafiken: Farbverläufe usw.
  • Erstellt mit modernen Tools wie Browserify und Streams. Kann sowohl im Browser als auch im Knoten verwendet werden.

Unter http://pdfkit.org/ finden Sie ein vollständiges Tutorial, um selbst zu sehen, was PDFKit kann. Ein Beispiel dafür, welche Arten von Dokumenten erstellt werden können, finden Sie in den Dokumenten als PDF, das mit PDFKit selbst aus einigen Markdown-Dateien generiert wurde: http://pdfkit.org/docs/guide.pdf .

Sie können es auch interaktiv im Browser hier ausprobieren: http://pdfkit.org/demo/browser.html .

Devongovett
quelle
Ist das nicht eine serverseitige Bibliothek? Ich denke, die Diskussion ist auf der clientseitigen js Bibliothek.
Ash Catchem
10
PDFKit funktioniert sowohl im Knoten als auch im Browser, wie in der Antwort angegeben. Siehe den Link zu einer Browser-Demo.
Devongovett
Komprimiert dies Bilder? Ich arbeite an einer Web-App, die ähnlich wie ein Camscanner funktioniert, und suche nach einer PDF-Erstellung über Javascript, um die Komprimierung und das mehrseitige Format zu nutzen.
Trevor
@devongovett kannst du dir meine Frage zu deiner Bibliothek ansehen ?
Ninbit
8

Ein weiteres interessantes Projekt ist texlive.js .

Sie können damit (La) TeX in PDF im Browser kompilieren.

Kpym
quelle
Das Hallo-Welt-Beispiel lässt sich gut rendern, dauert aber ungefähr 30 Sekunden.
Sam Sippe
2

Sie können diesen kostenlosen Dienst nutzen, indem Sie einen Link hinzufügen, der PDF von einer beliebigen URL erstellt (z. B. http://www.phys.org ):

http://freehtmltopdf.com/?convert=http%3A%2F%2Fwww.phys.org&size=US_Letter&orientation=portrait&framesize=800&language=de

boateng
quelle
1
Update: Als ich diesen freehtmltopdf.com- Dienst überprüfte, hieß es, er sei nicht mehr verfügbar. Klingt aber so, als wäre es unglaublich!
Mark Duiker
jetzt geprüft - funktioniert. und es ist erstaunlich, ich benutze einen Dienst, bei dem ich für jedes PDF bezahle und codieren muss, das ist so ein Problemlöser.
Sergey Sob
-29

Selbst wenn Sie die PDF-Datei im Arbeitsspeicher in JavaScript generieren könnten, hätten Sie immer noch die Frage, wie diese Daten an den Benutzer übertragen werden sollen. Für JavaScript ist es schwierig, nur eine Datei an den Benutzer zu senden.

Um die Datei an den Benutzer weiterzuleiten, sollten Sie einen Server senden, damit der Browser den Dialog zum Speichern aufruft.

Trotzdem ist es nicht allzu schwer, PDFs zu generieren. Lesen Sie einfach die Spezifikation.

Frank Krueger
quelle
1
Es ist überhaupt nicht schwierig, zum Beispiel scheint es mit Daten-URIs zu funktionieren. En.wikipedia.org/wiki/Data_URI_scheme (Ich habe es schon einmal gemacht, aber ich erinnere mich nicht, ob ich Daten-URIs verwendet habe).
Björn
58
Sie können heutzutage problemlos Dateien in JavaScript erstellen. (Ich bin aus der Zukunft)
Derek 3 會 功夫
5
Ist heutzutage wirklich einfach. Überprüfen Sie dies zum Beispiel: github.com/ChenWenBrian/FileSaver.js
roy riojas
9
@FrankKrueger Wenn Sie Ihre Antwort löschen, erhalten Sie 6 Punkte: P
Kamil Kiełczewski
8
@FrankKreuger, "Geh und lies die Spezifikationen" ist fast nie die richtige Antwort auf SO.
Krishnan Venkiteswaran