it-swarm.com.de

wkhtmltopdf: Es kann keine Verbindung zum X-Server hergestellt werden

Ich habe wkthmltopdf verwendet, um HTML-Dateien direkt auf meinem Linux-Webserver in PDF-Dokumente umzuwandeln. Das Programm benötigte ursprünglich einen X11- oder einen ähnlichen X-Server, um ordnungsgemäß ausgeführt zu werden. Durch viele Anfragen von Entwicklern, diese auf Servern ohne GUI auszuführen, bin ich ziemlich sicher, dass es einen virtuellen X-Server in der static-Version ausführt. Ich habe die statische (Stand-Alone) Version des Programms verwendet und es funktioniert super! Ich würde die ausführbare Datei in einem Ordner ablegen und ausführen:

./wkhtmltopdf file1.html file2.pdf

Ich möchte dieses Programm jedoch systemweit installieren. Ich habe den apt-get install wkhtmltopdf (gestern installiert) verwendet und da ich auf einem 64-Bit-System laufe, brauchte ich auch apt-get install ia32-libs. Nach der Installation kann ich die Version folgendermaßen finden:

wkhtmltopdf --version

ausgabe:

Name:
  wkhtmltopdf 0.9.9

License:
  Copyright (C) 2008,2009 Wkhtmltopdf Authors.



  License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
  This is free software: you are free to change and redistribute it. There is NO
  WARRANTY, to the extent permitted by law.

Authors:
  Written by Jakob Truelsen. Patches by Mário Silva, Benoit Garret and Emmanuel
  Bouthenot.

Wenn ich jetzt versuche, das über aptitude installierte Programm auszuführen, erhalte ich die folgende Fehlermeldung:

wkhtmltopdf: cannot connect to X server

Weiß jemand, wie ich das beheben kann? Ich vermute, dieser Version fehlt ein virtueller X-Server oder so.

106

Ich habe gerade herausgefunden, dass ich die statische Programmdatei einfach in das Verzeichnis /usr/bin/ verschieben und von überall ausführen kann.

5

oder versuchen Sie es (von http://drupal.org/node/870058 )

  1. wkhtmltopdf herunterladen. Oder installieren Sie es besser mit einem Paketmanager:

    Sudo apt-get install wkhtmltopdf
    
  2. Entpacke es und verschiebe es nach /usr/local/bin/

  3. Benennen Sie es in wkhtmltopdf um, so dass Sie jetzt eine ausführbare Datei unter /usr/local/bin/wkhtmltopdf haben.
  4. Berechtigungen setzen: Sudo chmod a+x /usr/local/bin/wkhtmltopdf
  5. Installieren Sie die erforderlichen Supportpakete. 

    Sudo apt-get install openssl build-essential xorg libssl-dev
    
  6. Prüfen Sie, ob es funktioniert: run 

    /usr/local/bin/wkhtmltopdf http://www.google.com test.pdf
    

    Wenn es funktioniert, sind Sie fertig. Wenn Sie die Fehlermeldung erhalten, dass keine Verbindung zum X-Server hergestellt werden kann, fahren Sie mit Nummer 7 fort.

  7. Wir müssen es kopflos auf einem 'virtuellen' X-Server ausführen. Wir machen das mit einem Paket namens xvfb. 

    Sudo apt-get install xvfb
    
  8. Wir müssen ein kleines Shell-Skript schreiben, um wkhtmltopdf in xvfb einzuwickeln. Erstellen Sie eine Datei mit dem Namen wkhtmltopdf.sh und fügen Sie Folgendes hinzu:

    xvfb-run -a -s "-screen 0 640x480x16" wkhtmltopdf "[email protected]"
    
  9. Verschieben Sie dieses Shell-Skript nach /usr/local/bin und legen Sie die Berechtigungen fest: 

    Sudo chmod a+x /usr/local/bin/wkhtmltopdf.sh
    
  10. Prüfen Sie, ob es noch einmal funktioniert: run 

    /usr/local/bin/wkhtmltopdf.sh http://www.google.com test.pdf
    

Beachten Sie, dass http://www.google.com einen Fehler wie "Ein abgeschlossenes ResourceObject hat ein Signal zum Beenden des Ladevorgangs erhalten. Dies könnte ein Hinweis darauf sein, dass ein iframe zu lange geladen hat." Möglicherweise möchten Sie mit einer einfacheren Seite wie http://www.example.com testen.

196
TimoSolo

Dies löste das Problem für mich:

Sudo apt-get install xvfb
xvfb-run --server-args="-screen 0, 1024x768x24" wkhtmltopdf file1.html file2.pdf
60
syzspectroom

Ich habe versucht, Sudo apt-get install wkhtmltopdf zu tun, aber ohne Erfolg . Stattdessen empfehle ich, dass Sie versuchen:

  1. Laden Sie die neueste ausführbare Datei herunter (.11 rc1): 

    wget https://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.11.0_rc1-static-i386.tar.bz2

  2. dekomprimiere es: 

    tar -vxf wkhtmltopdf-0.11.0_rc1-static-i386.tar.bz2

  3. umbenennen: 

    mv wkhtmltopdf-i386 wkhtmltopdf

  4. chmod es zur ausführbaren Datei: 

    chmod a+x wkhtmltopdf

  5. platziere es in/usr/bin: 

    Sudo mv wkhtmltopdf /usr/bin

28
Yakob Ubaidi

Gerade gemacht:

1- Zum Herunterladen von wkhtmltopdf-Abhängigkeiten

# apt-get install wkhtmltopdf

2- Herunterladen von der Quelle

# wget http://downloads.sourceforge.net/project/wkhtmltopdf/xxx.deb

# dpkg -i xxx.deb

3- Versuchen

# wkhtmltopdf http://google.com google.pdf

Es funktioniert gut

Es klappt!

25
Sfblaauw

Ich habe eine Methode gefunden, um dieses Problem ohne gefälschten X-Server zu lösen. In der neuesten Version von wkhtmltopdf brauchen Sie keinen X-Server für die Arbeit, aber nicht in offizielle Linux-Repositorys.

Lösung für Ubuntu 14.04.4 LTS (trusty) i386

$ Sudo apt-get install xfonts-75dpi
$ wget http://download.gna.org/wkhtmltopdf/0.12/0.12.2/wkhtmltox-0.12.2_linux-trusty-i386.deb
$ Sudo dpkg -i wkhtmltox-0.12.2_linux-trusty-i386.deb
$ wkhtmltopdf http://www.google.com test.pdf

Lösung für Ubuntu 14.04.4 LTS (vertrauenswürdig) AMD64

$ Sudo apt-get install xfonts-75dpi
$ wget http://download.gna.org/wkhtmltopdf/0.12/0.12.2/wkhtmltox-0.12.2_linux-trusty-AMD64.deb
$ Sudo dpkg -i wkhtmltox-0.12.2_linux-trusty-AMD64.deb
$ wkhtmltopdf http://www.google.com test.pdf

Benutzer felixhummel hat eine sehr gute Lösung erhalten, aber das Repository mit utilite hat sich geändert. 

16
PRIHLOP

Auf die Antwort von Timothy erweitern ...

Wenn Sie ein Webentwickler sind, der wkhtmltopdf als Teil Ihrer Web-App verwenden möchte, können Sie ihn einfach wie folgt in Ihren /usr/bin/-Ordner installieren:

cd /usr/bin/
curl -C - -O http://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.11.0_rc1-static-i386.tar.bz2
tar -xvjf wkhtmltopdf-0.11.0_rc1-static-i386.tar.bz2
mv wkhtmltopdf-i386 wkhtmltopdf

Sie können es jetzt mit wkhtmltopdf überall ausführen.

Ich persönlich benutze die Snappy - Bibliothek in PHP. Hier ein Beispiel, wie einfach es ist, ein PDF zu erstellen:

<?php

// Create new PDF
$pdf = new \Knp\Snappy\Pdf('wkhtmltopdf');

// Set output header
header('Content-Type: application/pdf');

// Generate PDF from HTML
echo $pdf->getOutputFromHtml('<h1>Title</h1><p>Your content goes here.</p>');
11
Jonathan

Update auf die neueste wkhtmltopdf-Version von SourceForge (0,12 zum Zeitpunkt der Veröffentlichung) Es ist kein X-Server zum Ausführen erforderlich.

Beispiel für Ubuntu 14.04:

$ cd /tmp/                                                                                                                                                                                                       
$ wget -q http://downloads.sourceforge.net/project/wkhtmltopdf/0.12.2.1/wkhtmltox-0.12.2.1_linux-trusty-AMD64.deb
$ dpkg -x wkhtmltox-0.12.2.1_linux-trusty-AMD64.deb foo

$ echo '<p>hi</p>' | ./foo/usr/local/bin/wkhtmltopdf - /tmp/hi.pdf
Loading pages (1/6)
Counting pages (2/6)                                               
Resolving links (4/6)                                                       
Loading headers and footers (5/6)                                           
Printing pages (6/6)
Done                                                                      

$ head -n3 /tmp/hi.pdf 
%PDF-1.4
1 0 obj
<<
11
felixhummel

für 14.04.1-Ubuntu https://wkhtmltopdf.org/downloads.html

wget https://downloads.wkhtmltopdf.org/0.12/0.12.4/wkhtmltox-0.12.4_linux-generic-AMD64.tar.xz -O mktemp.tar.xz
tar xf mktemp.tar.xz
Sudo cp wkhtmltox/bin/wkhtmltopdf /usr/bin/wkhtmltopdf
Sudo chmod +x /usr/bin/wkhtmltopdf
rm mktemp.tar.xz
rm wkhtmltox -rf
apt-get update
apt-get install -y libxrender1 libxtst6 libxi6
wkhtmltopdf http://www.google.com test.pdf
8
Matthias
Sudo -i
apt-get install wkhtmltopdf xvfb libicu48
mv /usr/bin/wkhtmltopdf /usr/bin/wkhtmltopdf-Origin
touch /usr/bin/wkhtmltopdf && chmod +x /usr/bin/wkhtmltopdf && cat > /usr/bin/wkhtmltopdf << END
#!/bin/bash

/usr/bin/xvfb-run -a -s "-screen 0 1024x768x24" /usr/bin/wkhtmltopdf-Origin  "\[email protected]"
END
6
GoTLiuM

Das Problem liegt wahrscheinlich in der alten Version von wkhtmltopdf - Version 0.9 des Distributions-Repositorys erfordert den Betrieb des X-Servers, die aktuelle Version - 0.12.2.1 - erfordert jedoch keine Ausführung - kann headless ausgeführt werden.

Laden Sie das Paket für Ihre Distribution von http://wkhtmltopdf.org/downloads.html herunter und installieren Sie es - für Ubuntu:

Sudo apt-get install xfonts-75dpi
Sudo dpkg -i wkhtmltox-0.12.2.1_linux-trusty-AMD64.deb
6
Honza

wkhtmltopdf> 0.11 hat dieses X-server-Problem nicht. 
So installieren Sie 0.12.2.1 auf einem Linux-Server.

  1. Beim ersten Installieren des xvfb-Servers:

    Sudo apt-get install xvfb
    
  2. Holen Sie sich die benötigte Version von wkhtmltopdf von http://wkhtmltopdf.org/downloads.html

  3. Installieren Sie wkhtmltopdf:

    Sudo dpkg -i wkhtmltox-0.12.2.1_linux-trusty-AMD64.deb
    

    oder mit wget installieren

    URL='http://download.gna.org/wkhtmltopdf/0.12/0.12.2.1/wkhtmltox-0.12.2.1_linux-trusty-AMD64.deb'; FILE=`mktemp`; wget "$URL" -qO $FILE && Sudo dpkg -i $FILE; rm $FILE
    
  4. Installieren Sie die Abhängigkeit (falls erforderlich):

    Sudo apt-get -f install
    
  5. Erstellen Sie einen symbolischen Link in /usr/local/bin/:

    echo 'exec xvfb-run -a -s "-screen 0 640x480x16" wkhtmltopdf "[email protected]"' | Sudo tee /usr/local/bin/wkhtmltopdf.sh >/dev/null
    Sudo chmod a+x /usr/local/bin/wkhtmltopdf.sh
    
  6. Versuchen Sie es jetzt unten und es sollte funktionieren,

    /usr/local/bin/wkhtmltopdf http://www.google.com test.pdf
    

Es wird empfohlen, mindestens 0.12.2.1 zu verwenden.

Ab wkhtmltopdf> = 0.12.2 ist kein X-Server oder keine Emulation mehr erforderlich. Sie können die neue Version von http://wkhtmltopdf.org/downloads.html herunterladen.

3
David Ginanni

Ich habe die Anweisungen hier befolgt und wkhtmltopdf Arbeit für mich gemacht, aber ich möchte ein wenig Perspektive bieten, die ich während meines eigenen kleinen Tanzes mit wkhtmltopdf - xvfb entdeckt habe. 

Dies ist wichtig, da der gleiche Grund, aus dem er den berüchtigten cannot connect to X server-Fehler verursacht, auch dazu führt, dass er mit einigen Einschränkungen ausgeführt wird, selbst wenn Sie einen X-Server bereitstellen. Zu diesen Einschränkungen gehört, dass Sie nicht mehrere Eingabequellen übernehmen, Kopf- und Fußzeilen usw. festlegen können (siehe Abschnitt Reduzierte Funktionalität des Handbuchs ). 

wkhtmltox benötigt an sich kein X11, es werden jedoch QT-Bibliotheken verwendet, die dies tun. In neuen Versionen von wkthmltox haben Entwickler einen Patch für QT erstellt, der es erlaubt, mit einem X11 zu laufen. 

Gegenwärtig sind einige Versionen gegen gepatchtes QT gebaut, andere nicht. Sie können Ihre Version überprüfen, indem Sie wkhtmltopds --version ausführen. Am Ende sollte eine Zeile stehen, die Compiled against wkhtmltopdf patched qt. sagt.

Wenn Sie also eine Version installieren und verwenden, die die gepatchten Bibliotheken verwendet, sollte sie auf einem Linux-Server ohne den xvfb-Server funktionieren, wie ich bestätigen kann.

1
Cristian Vrabie

Lösung für Centos7 :

yum -y install xorg-x11-fonts-75dpi \
               xorg-x11-fonts-Type1 \
&& rpm -Uvh http://download.gna.org/wkhtmltopdf/0.12/0.12.2.1/wkhtmltox-0.12.2.1_linux-centos7-AMD64.rpm

Wir stoßen auf dieses Problem in Docker-Containern und die oben genannte Installation hat wkhtmltopdf mit gepatchtem QT

1
DmitrySemenov
  1. Datei herunterladen von diesem Link
  2. Extrahieren Sie es und verschieben Sie die ausführbare Datei (/ wkhtmltox/bin/wkhtmltopdf) nach /usr/bin/.
  3. Benennen Sie es in wkhtmltopdf um, wenn der aktuelle Name nicht wkhtmltopdf ist. Damit haben Sie jetzt eine ausführbare Datei unter /usr/bin/wkhtmltopdf
  4. Berechtigungen setzen: Sudo chmod a + x/usr/bin/wkhtmltopdf
  5. Installieren Sie die erforderlichen Supportpakete. Sudo apt-get installiert openssl build-essential xorg libssl-dev
  6. Überprüfen Sie nun mit wkhtmltopdf http://www.google.com test.pdf Hinweis: Detaillierte Informationen über diesen Link
0
Ratna Halder

Installieren Sie einfach eine Version 0.12.4 oder höher. Dies scheint das Problem zu lösen.

Siehe Wie kann ich das neueste wkhtmltopdf auf Ubuntu 16.04 installieren? .

0
Martin Thoma

Feind 64-Bit-Verwendung:

wget http://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.9.9-static-AMD64.tar.bz2

tar xvjf wkhtmltopdf-0.9.9-static-AMD64.tar.bz2

Sudo mv wkhtmltopdf-AMD64/usr/bin/wkhtmltopdf

Sudo chmod + x/usr/bin/wkhtmltopdf

0

Sie müssen es in das Verzeichnis/usr/local/bin kopieren, es ausführbar machen und einen Symlink von wkhtmltopdf.sh hinzufügen:

1- der Befehl:

Sudo apt-get install wkhtmltopdf

2 - Fügen Sie die Binärdatei in das Verzeichnis/usr/bin ein, damit der Browser keine Berechtigung zum Ausführen in diesem Verzeichnis hat. Sie müssen die Datei wkhtmltopdf.sh in das Verzeichnis/usr/local/bin kopieren, da der Browser über die folgenden Berechtigungen in diesem Verzeichnis verfügt:

Sudo cp /usr/bin/wkhtmltopdf.sh /usr/local/bin/wkhtmltopdf.sh

3 - Nach make sur haben die Binären die Erlaubnis zur Ausführung wie:

Sudo chmod a+x /usr/local/bin/wkhtmltopdf.sh

4 - Jetzt können Sie testen, es funktioniert wie folgt:

/usr/local/bin/wkhtmltopdf.sh http://www.google.com google.pdf

es macht Download der PDF im aktuellen Verzeichnis in Ihrem Terminal

5 - Optional können Sie jetzt einen Symlink in Ihrem Verzeichnis/usr/local/bin like hinzufügen

ln -s /usr/local/bin/wkhtmltopdf.sh /usr/local/bin/wkhtmltopdf
0
rapaelec