Wkhtmltopdf Segmentation Fault

Wkhtmltopdf ist ein großartiges Tool zum Erzeugen von PDF-Dateien aus Internetseiten bzw. HTML-Dateien. Dank der unter der Motorhaube arbeitenden WebKit-Engine erzeugt Wkhtmltopdf in den meisten Fällen ohne spezielle Anpassungen von HTML und CSS erwartungsgemäße Ausgaben. Das spart Entwicklungszeit und somit Kosten.

Leider wurden meine positiven Erfahrungen mit Wkhtmltopdf vor Kurzem getrübt. Sowohl auf einem aktuellen Debian Squeeze (nativ) als auch auf einer Xen-VM mit Debian Wheezy stürzte die statisch gelinkte Version 0.11.0 RC1 des Tools reproduzierbar beim Erzeugen von PDF-Dateien ab (Segmentation Fault). Dabei spielte es keine Rolle, ob die i386 oder die amd64 -Version verwendet wurde. Im Syslog fanden sich dazu u.a. folgende Einträge:

Der Aufruf von Wkhtmltopdf erzeugte beispielsweise folgende Ausgabe:

Die in der Debian Distribution enthaltene Version von Wkhtmltopdf lief zwar ohne Probleme, jedoch war deren Verwendung mangels der Möglichkeit Kopf- und Fußzeilen zu benutzen keine echte Alternative.

Zum Glück fand sich dann doch noch ein Weg, das statisch gelinkte Binary nutzen zu können: die Installation von Xvfb und der Betrieb von Wkhtmltopdf mit dem Parameter use-xserver.

Installation von Xvfb (Debian / Ubuntu):

Aufruf von Wkhtmltopdf:

Für den Start von Xvfb kann (und sollte) man ein Init File benutzen.

Wkhtmltopdf kompilieren und statisch linken
Wer es, z.B. mangels Möglichkeit Xvfb zu betreiben, mit einem selbst kompilierten Binary probieren will, findet eine entsprechende Anleitung im Wkhtmltopdf Wiki.
Insbesondere zur Verwendung auf Managed Servern / Webspace Accounts bietet sich ein statisch gelinktes Wkhtmltopdf Binary an, welches wie folgt erzeugt werden kann:

In meinem Fall schlug dies leider erst mal mit der selben Fehlermeldung wie in diesem Beitrag in den Google Groups fehl:

Offenbar fehlen die Dateien libjscore.a, libjscore.prl, libwebcore.a und libwebcore.prl im Verzeichnis static-build/linux-amd64/build/qts/lib/. Sie aus static-build/linux-amd64/build/qts/src/3rdparty/webkit/Source/WebCore/release/ und static-build/linux-amd64/build/qts/src/3rdparty/webkit/Source/JavaScriptCore/release/ zu kopieren funktioniert übrigens nicht ;-)

Wichtig: Wer über die in diesem Artikel beschriebenen Probleme stolperte, jedoch nicht unbedingt auf die Korrekturen in neueren Versionen von Wkhtmltopdf angewiesen ist, kann Sie auch einfach durch die Verwendung von Wkhtmltopdf 0.10.0 RC2 umgehen.