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


113

Ich habe wkthmltopdf verwendet , um HTML- Dateien auf meinem Linux-Webserver im laufenden Betrieb in PDF-Dokumente zu konvertieren. Das Programm benötigte ursprünglich X11 oder einen ähnlichen X-Server, um korrekt ausgeführt zu werden, aber aufgrund vieler Anfragen von Entwicklern, diesen auf Servern ohne GUI auszuführen, bin ich mir ziemlich sicher, dass es einen virtuellen X-Server in der statischen Version ausführt . Ich habe die statische (eigenständige) Version des Programms verwendet und es funktioniert großartig! Ich würde die ausführbare Datei in einen Ordner legen und ausführen:

./wkhtmltopdf file1.html file2.pdf

Ich möchte dieses Programm jedoch systemweit installieren. Ich habe das apt-get install wkhtmltopdf(erst 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 wie folgt 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, wird folgende Fehlermeldung angezeigt:

wkhtmltopdf: cannot connect to X server

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

Antworten:


205

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

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

    sudo apt-get install wkhtmltopdf
    
  2. Extrahieren Sie es und verschieben Sie es nach /usr/local/bin/

  3. Benennen Sie es in um, wkhtmltopdfsodass Sie jetzt eine ausführbare Datei bei haben/usr/local/bin/wkhtmltopdf
  4. Berechtigungen festlegen: sudo chmod a+x /usr/local/bin/wkhtmltopdf
  5. Installieren Sie die erforderlichen Support-Pakete.

    sudo apt-get install openssl build-essential xorg libssl-dev
    
  6. Überprüfen Sie, ob es funktioniert: Ausführen

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

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

  7. Wir müssen es kopflos auf einem 'virtuellen' x-Server ausführen. Wir werden dies mit einem Paket namens xvfb tun.

    sudo apt-get install xvfb
    
  8. Wir müssen ein kleines Shell-Skript schreiben, um wkhtmltopdf in xvfb zu verpacken. Erstellen Sie eine aufgerufene Datei wkhtmltopdf.shund fügen Sie Folgendes hinzu:

    xvfb-run -a -s "-screen 0 640x480x16" wkhtmltopdf "$@"
    
  9. Verschieben Sie dieses Shell-Skript nach /usr/local/binund legen Sie die Berechtigungen fest:

    sudo chmod a+x /usr/local/bin/wkhtmltopdf.sh
    
  10. Überprüfen Sie, ob es wieder funktioniert: Ausführen

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

Beachten Sie, dass http://www.google.com möglicherweise einen Fehler wie "Ein fertiges ResourceObject hat ein Signal zum Beenden des Ladevorgangs empfangen. Dies kann ein Hinweis darauf sein, dass das Laden eines Iframes zu lange dauert." Vielleicht möchten Sie mit einer einfacheren Seite wie testen http://www.example.com.


1
Ich habe dieses Tutorial ursprünglich ausprobiert und es hat nicht ganz funktioniert. Außerdem wollte ich den Wrapper nicht mit symbolischem Link erstellen. Wie ich in meiner Antwort geschrieben habe, können Sie die statische ausführbare Datei, wenn Sie sie einfach in das /usr/bin/Verzeichnis verschieben, von überall aus verwenden. Sie haben der statischen ausführbaren Datei einen virtuellen X-Server hinzugefügt, sodass das Wrapper-Skript nicht erstellt werden muss.
jeffery_the_wind

es hat bei mir funktioniert .. in einigen Situationen. Ich denke, die Installation fehlender 32-Bit-Bibliotheken hat das
Problem

Was soll die Aussage in Nummer 6 If you get the error "Cannot connect to X server" then continue to number 6.bedeuten? Das verwirrt mich sehr. Wollen Sie damit sagen, dass Sie mit Nummer 7 fortfahren sollen?
Noz

Ja, das ist gemeint ... der Originalartikel hatte die Artikel falsch nummeriert. Also weiter zu # 7
Dwaz

danke, neu nummeriert .. Die vorgeschlagene Antwort sollte in den meisten Fällen funktionieren, also versuchen Sie es zuerst
TimoSolo

61

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

Dies ist der einfachste und sicherste Ansatz, da die Standardinstallation von wkhtmltopdf den x-Server nicht enthält.
Peter

Auf diese Weise kann in den allermeisten Fällen "Keine Verbindung zum X-Server hergestellt werden" gelöst werden.
Tripleee

2
Verwenden Sie auf Redhat-basierten Distributionen sudo yum install xorg-x11-server-Xvfbresp. sudo dnf install xorg-x11-server-Xvfb.
TNT

28

Ich habe es versucht, sudo apt-get install wkhtmltopdfaber ohne Erfolg. Stattdessen empfehle ich Ihnen, Folgendes zu 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. benenne es um:

    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


code.google.com/p/wkhtmltopdf/issues/detail?id=730 scheint vs 11.0_rc1 hat einige Probleme
montrealmike

Das hat bei mir funktioniert, aber die PDF-Generierung ist fehlgeschlagen. https://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.9.9-static-i386.tar.bz2
Deshalb habe

1
Das Herunterladen von wkhtmltox-linux-amd64_0.12.0-03c001d.tar.xz funktioniert jetzt für mich. Aus irgendeinem Grund tut das neueste nicht.
Chasetheskyforever

1
Ich kann bestätigen, dass dies für mich funktioniert hat: (Erhalten der neuesten stabilen Version atm) wget download.gna.org/wkhtmltopdf/0.12/0.12.3/… tar -vxf wkhtmltox-0.12.3_linux-generic-amd64.tar.xz chmod a + x wkhtmltox / bin / wkhtmltopdf sudo mv wkhtmltopdf / usr / local / bin / wkhtmltopdf
Magico

27

Habe es gerade geschafft:

1- Zum Herunterladen von wkhtmltopdf-Abhängigkeiten

# apt-get install wkhtmltopdf

2- Von der Quelle herunterladen

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

# dpkg -i xxx.deb

3- Versuchen Sie es

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

Es funktioniert gut

Es klappt!


Ich musste apt-get install -fnach der Installation des Pakets ausführen , um die Abhängigkeiten zu erhalten. Ansonsten hat es wie ein Zauber funktioniert. Viel bevorzugen diese Methode gegenüber den anderen beschriebenen.
Dmuir

2
Genau. Diese Lösung brachte mich zur aktuellen Version. Der Befehl dpkg -i erzeugte einige mehrdeutige Informationen, aber unabhängig davon funktionierte er: wget -q http://downloads.sourceforge.net/project/wkhtmltopdf/0.12.2.1/wkhtmltox-0.12.2.1_linux-trusty-amd64.debgefolgt vonsudo dpkg --install wkhtmltox-0.12.2.1_linux-trusty-amd64.deb
Bill Butler

Dies ist immer noch die bessere Lösung für diese Frage.
Verse

1
Ich musste sudo mv wkhtmltopdf /usr/binaus dem /usr/local/bin/Verzeichnis laufen , aber das hat super funktioniert! Ich habe jede andere Methode auf dieser Seite ohne Glück
ausprobiert

Dies sollte höhere Upvotes als neueste und einfachere Lösung erhalten, ohne auf andere Pakete angewiesen zu sein (was auch das Problem "Verbindung zum X-Server kann nicht hergestellt werden" löst). und ich habe Probleme mit dem relativen CSS-Pfad, der bei Verwendung von xvfb nicht geladen wird.
Zynick

16

Ich habe eine Methode gefunden, um dieses Problem ohne gefälschten X-Server zu lösen. In der neuesten Version von wkhtmltopdf wird kein X-Server für die Arbeit benötigt, aber nicht in offiziellen Linux-Repositories.

Lösung für Ubuntu 14.04.4 LTS (vertrauenswürdig) 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, aber das Repository mit utilite hat sich geändert.


Aus irgendeinem Grund funktionierte dies für mich und die neuere Version (0.13) war nicht danke!
Talsibony

Dies ist die Lösung, die für mich funktioniert hat. Ich habe viele andere Lösungen ausprobiert, aber keine davon hat funktioniert. Da ich neu in der PHP / Laravel-Umgebung bin, habe ich keine tiefen Kenntnisse über diese Bibliotheken und Abhängigkeiten, aber diese Lösung ist fantastisch. Ich habe einfach meine Stunden gespart :)
Amit

Wirklich, diese Lösung ist heute fantastisch. Ich bin zur Produktion übergegangen und habe das gleiche Problem, ohne Zeit zu verlieren. Ich habe diese Lösung einfach ausgeführt und sie hat reibungslos funktioniert :)
Amit

gna.org ist jetzt heruntergefahren. :(
Jya

11

Timotheus Antwort erweitern ...

Wenn Sie als Webentwickler wkhtmltopdf als Teil Ihrer Web-App verwenden möchten, können Sie es einfach /usr/bin/wie folgt in Ihrem 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 überall mit ausführen wkhtmltopdf .

Ich persönlich benutze die Snappy- Bibliothek in PHP. Hier ist ein Beispiel dafür, 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

Update auf die neueste wkhtmltopdf-Version von SourceForge (0.12 zum jetzigen Zeitpunkt). Zum Ausführen ist kein X-Server 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
<<

1
Ich habe 0.12.1 installiert und es fordert mich immer noch auf, keine Verbindung zum X-Server herzustellen. Vermisse ich etwas
Ales Maticic

Versuchte es noch einmal und das funktioniert bei mir (keine Installation, nur um die Box sauber zu halten). Siehe oben bearbeiten.
Felixhummel

9

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

6
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  "\$@"
END

6

Problem ist wahrscheinlich in der alten Version von wkhtmltopdf - Version 0.9 aus dem Distributionsrepository erfordert die Ausführung des X-Servers, die aktuelle Version - 0.12.2.1 erfordert dies jedoch nicht - kann ohne Kopf 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

wkhtmltopdf> 0.11hat dieses X-serverProblem nicht.
Also 0.12.2.1auf einem Linux Server installieren .

  1. Installieren Sie zuerst den xvfb-Server:

    sudo apt-get install xvfb
    
  2. Die benötigte Version von wkhtmltopdf erhalten Sie unter http://wkhtmltopdf.org/downloads.html

  3. Installieren Sie wkhtmltopdf:

    sudo dpkg -i wkhtmltox-0.12.2.1_linux-trusty-amd64.deb
    

    oder installieren mit wget

    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 symblischen Link in /usr/local/bin/:

    echo 'exec xvfb-run -a -s "-screen 0 640x480x16" wkhtmltopdf "$@"' | 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
    

5

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



1

Ich habe die Anweisungen hier befolgt und wkhtmltopdf für mich arbeiten lassen, aber ich möchte ein bisschen Perspektive bieten, die ich bei meinem eigenen kleinen Tanz mit wkhtmltopdf- entdeckt habe xvfb.

Dies ist wichtig, da der gleiche Grund, aus dem der berüchtigte cannot connect to X serverFehler ausgelöst wird, auch dazu führt, dass er mit schwerwiegenden Einschränkungen ausgeführt wird, selbst wenn Sie ihm einen X-Server zur Verfügung stellen. Zu diesen Einschränkungen gehört, dass nicht mehrere Eingabequellen, Kopf- und Fußzeilen usw. verwendet werden können ( siehe Abschnitt Reduzierte Funktionalität des Handbuchs ).

wkhtmltoxFür sich genommen ist kein X11 erforderlich, es werden jedoch QT-Bibliotheken verwendet, die dies tun. In allen neuen Versionen von wkthmltox haben Entwickler einen Patch für QT erstellt, mit dem es mit einem X11 ausgeführt werden kann.

Derzeit werden einige Versionen gegen gepatchte QT erstellt, andere nicht. Sie können Ihre Version überprüfen, indem Sie ausführen wkhtmltopds --version. Am Ende sollte eine Zeile stehen, in der stehtCompiled against wkhtmltopdf patched qt.

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


1

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 in Docker-Containern auf dieses Problem und die obige Installation hat wkhtmltopdf mit gepatchter QT


2
Für mich funktionierte die URL nicht, ich habe diese verwendet:sudo rpm -Uvh https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.2.1/wkhtmltox-0.12.2.1_linux-centos7-amd64.rpm
WebOrCode

1

Achten Sie darauf: Ihre Datei könnte wkhtmltopdf.shoder wkhtmltopdfüberprüfen Sie sie im zweiten Schritt

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

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 hat die Binärdatei 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

Dadurch wird das PDF im aktuellen Verzeichnis Ihres Terminals heruntergeladen

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
  1. Datei von diesem Link herunterladen
  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 bei/usr/bin/wkhtmltopdf
  4. Festlegen von Berechtigungen: sudo chmod a + x / usr / bin / wkhtmltopdf
  5. Installieren Sie die erforderlichen Support-Pakete. sudo apt-get install openssl build-essential xorg libssl-dev
  6. Überprüfen Sie nun mit wkhtmltopdf http://www.google.com test.pdf Hinweis: Detailinformationen über diesen Link


0

Wenn Sie wkhtmltopdf für Rails oder Somethings in Centos konfigurieren, können Sie die folgenden Schritte ausführen:

  1. Gehen Sie zu https://wkhtmltopdf.org/downloads.html und kopieren Sie den Link der RPM-Datei.

In Centos Server Bash.

  1. wget link_of_wkhtmltopdf_rpm.rpm

  2. rpm -ivh link_of_wkhtmltopdf_rpm.rpm

  3. which wkhtmltopdf

=> Sie erhalten den Pfad von wkhtmltopdf.

  1. Setup für wicked_pdf oder pdfkit mit Pfad in Schritt 4. Dies ist eine Beispielkonfiguration mit wickedpdf. config / initializers / wicked_pdf.rb

    if Rails.env != "production"
        path = %x[which wkhtmltopdf].gsub(/\n/, "")
    else
        path = "path_of_wkhtmltopdf_in_step_4"
    end
    WickedPdf.config = { exe_path: path }
    
  2. Starten Sie den Server neu.

GETAN.


0

Für 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

Sagen Sie dem Qt-Backend einfach, dass es X nicht verwenden soll:

QT_QPA_PLATFORM=offscreen wkhtmltopdf <input> <outfile.pdf>
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.