Es gibt zwar bereits einige Werkzeuge um aus einer HTML-Datei ein PDF zu machen, aber der Nachteil ist, dass das Ergebnis meistens schrecklich aussieht, da diese Werkzeuge ihre eigene HTML-Rendering-Engine verwenden.
Abhilfe schafft nun das Tool wkhtmltopdf, der Vorteil bei diesem Programm ist, dass es die Rendering-Engine „Webkit“ benutzt, also die gleiche die auch Apple’s Browser „Safari“ oder auch Chrome benutzt, das heißt wir kriegen nahezu perfekte Ergebnisse.
Man bekommt dieses Tool hier: Klick
Es ist Open Source und kostenlos.
Installation
Zunächst muss das Programm heruntergeladen werden. Dazu einfach auf die [oben genannte] Seite gehen und den Download-Link für die entsprechen Architektur auswählen.
Nachdem das Programm heruntergeladen wurde erhält man eine fertig kompilierte Datei. Um diese Datei nun über die Shell aufzurufen macht man folgendes:
Entweder:
[Pfad zur Datei]/wkhtmltopdf
oder man verschiebt sie in ein Verzeichnis, indem die Shell nach Programmen „sucht“.
sudo cp [Pfad zur Datei]/wkhtmltopdf /usr/sbin/
Nun kann man das Programm einfach über „wkhtmltopdf“ in der Shell aufrufen. Du kannst das Programm auch beim kopieren umbenennen:
sudo cp [Pfad zur Datei]/wkhtmltopdf /usr/sbin/html2pdf
Hier solltest du allerdings beachten, dass es eventuell zu Kollisionen mit anderen Programmen kommen kann, welche den gleichen Namen tragen.
Es muss im übrigen noch die Bibliothek „QT4“ installiert sein, wenn diese noch nicht installiert ist, dann geht das ganz einfach mit:
sudo apt-get install libqtcore4
Verwendung:
Die Verwendung ist denkbar einfach:
wkhtmltopdf [OPTIONS]… <input file> [More input files] <output file>
Ein einfaches Beispiel:
Das Programm bietet die Möglichkeit HTML-Seiten selber herunterzuladen oder lokal gespeicherte HTML-Seiten umzuwandlen.
Ein Web-Beispiel:
wkhtmltopdf http://www.meinubuntu.de/2009/12/08/full-hd-videos-1080p-unter-linux-anschauen-mit-einer-nvidia-grafikkarte/ full-hd-ubuntu.pdf
Das Ergebnis kann sich sehen lassen: full-hd-ubuntu.pdf.tar
Das einzige Manko ist, dass wirklich alles integriert wurde, um das zu verhindern sollte man die Seite mit z.B. dem Firefox zunächst herunterladen (inkl. CSS etc.) und dann alles überflüssige entfernen.
Ein Beispiel:
Zunächst speichern wir die Seite mit dem Firefox, dazu einfach in dem Tab der Seite „Strg + s“ drücken und dann auf speichern klicken. Nun muss man einfach all das entfernen, was man nicht haben möchte. Es ist hier sehr hilfreich wenn man minimale CSS/HTML Kenntnisse aufweisen kann, denn man muss ja wissen was was ist.
Hier ist ein Beispiel an diesem Artikel: full-hd-lokal-zu-pdf-gemacht.tar
Der Befehl sieht so aus:
Full\ HD\ Videos\ \(1080p\)\ unter\ Linux\ anschauen\ mit\ einer\ nvidia-Grafikkarte.\ -\ Ubuntu\ hilfe.html full-hd-local.pdf
Die unerwünschten HTML-Teile müssen natürlich manuell entfernt werden.
Ich habe in diesen Beispielen lediglich eine Datei umgewandelt, aber es gehen auch problemlos mehrere gleichzeitig (diese sind dann natürlich auch in einem PDF-Dokument):
wkhtmltopdf datei.html datei2.html [usw.] name-des-pdfs.pdf
Einige Optionen von wkhtmltopdf
wkhtmltopdf hat umfangreiche Optionen zu bieten, so kann man zum Beispiel einen „table of content“ (dt. Inhaltsverzeichnis) einfügen, dazu fügt man direkt hinter dem „wkhtmltopdf“ Aufruf die Option -t ein.
wkhtmltopdf -t datei.html datei2.html [usw.] name-des-pdfs.pdf
Hier ein Beispiel mit diesen beiden Artikeln 1 2: 2-artikel-mit-toc.tar
Achtung: Ich musste die HTML-Datei des „Mplayer“-Artikel umbenennen, weil wkhtmltopdf einen Error-Produziert hat
wkthmltopdf erstellt das Inhaltsverzeichnis mit Hilfe der Überschriften, also mit den h-Tags von html „<h1>, <h2>, usw.“, wenn eine Seite dieses also nicht verwendet, dann sollte man die einfach manuell hinzufügen, natürlich an den Stellen an dem man sie haben möchte.
wkhtmltopdf hat natürlich noch mehr Optionen, eine Übersicht verschafft:
wkhtmltopdf –extended-help
Wieso der Aufwand? Man kann doch ganz einfach über „als Datei drucken“ pdf-Datein erstellen.
Ich hatte an denen bisher auch nie etwas auszusetzen …
Ja, aber diese Lösung kannst du nicht serverseitig nutzen und für den Home-Anwender kann man leichter massenhaft PDF’s konvertieren.
Das ganze entstand aus der Idee die OpenBooks als PDF zu haben 🙂
Die Seite ist zwar etwas älter, aber habe es dennoch hiermit versucht. Mittlerweile wird wkhtml wohl nicht mehr von qt supported. Man kann also maximal eine html-Datei zu pdf konvertieren. Bei mir kommt sonst diese Fehlermeldung:
Error: This version of wkhtmltopdf is build against an unpatched version of QT, and does not support more then one input document.
Deshalb funktioniert der Parameter -t auch nicht.