wkhtmltopdf: impossible de se connecter au serveur X
j'ai utilisé wkthmltopdf pour convertir des documents html en pdf à la volée sur mon serveur web linux. Le programme avait à l'origine besoin de X11 ou d'un serveur X similaire pour fonctionner correctement, mais grâce à de nombreuses requêtes de développeurs pour que cela fonctionne sur des serveurs sans GUI, je suis presque sûr qu'il exécute un serveur X virtuel dans la version statique . J'ai utilisé la version statique (autonome) du programme et cela fonctionne très bien! Je voudrais mettre l' fichier exécutable dans un dossier, et exécuter:
./wkhtmltopdf file1.html file2.pdf
Cependant, je voudrais installer ce programme à l'échelle du système. J'ai utilisé le apt-get install wkhtmltopdf
(juste installé hier) et puisque je tourne sur un système 64 bits, j'avais aussi besoin de apt-get install ia32-libs
. Après l'installation je peux trouver la version comme ceci:
wkhtmltopdf --version
sortie:
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.
Maintenant, quand j'essaie d'exécuter le programme installé via aptitude, j'obtiens l'erreur suivante:
wkhtmltopdf: cannot connect to X server
est-ce que quelqu'un sait comment je peux réparer ça? Je suppose que cette version manque un serveur X virtuel ou quelque chose comme ça.
18 réponses
ou essayez ceci (à partir de http://drupal.org/node/870058 )
-
télécharger wkhtmltopdf. ou mieux l'installer avec un gestionnaire de paquets:
sudo apt-get install wkhtmltopdf
-
extraire et déplacer vers
/usr/local/bin/
- renommez-le en
wkhtmltopdf
de sorte que maintenant vous avez un exécutable à/usr/local/bin/wkhtmltopdf
- Définir des autorisations:
sudo chmod a+x /usr/local/bin/wkhtmltopdf
-
installer les paquets de soutien requis.
sudo apt-get install openssl build-essential xorg libssl-dev
-
vérifier si ça marche: exécuter
/usr/local/bin/wkhtmltopdf http://www.google.com test.pdf
si ça marche, alors c'est fini. Si vous obtenez l'erreur "ne peut pas se connecter au serveur X" alors continuer au numéro 7.
-
nous devons l'exécuter sans tête sur un serveur x 'virtuel'. Nous le ferons avec un paquet appelé xvfb.
sudo apt-get install xvfb
-
nous avons besoin d'écrire un petit script shell pour envelopper wkhtmltopdf dans xvfb. Créer un fichier appelé
wkhtmltopdf.sh
et ajouter ce qui suit:xvfb-run -a -s "-screen 0 640x480x16" wkhtmltopdf "$@"
-
déplacez ce script shell vers
/usr/local/bin
, et définissez les permissions:sudo chmod a+x /usr/local/bin/wkhtmltopdf.sh
-
vérifiez si cela fonctionne à nouveau: Lancez
/usr/local/bin/wkhtmltopdf.sh http://www.google.com test.pdf
notez que http://www.google.com peut lancer une erreur comme "un objet de Ressource fini a reçu un signal de chargement terminé. Cela pourrait être une indication d'une iframe longue à charger."Vous pouvez tester avec une page plus simple comme http://www.example.com
.
cela a résolu le problème pour moi:
sudo apt-get install xvfb
xvfb-run --server-args="-screen 0, 1024x768x24" wkhtmltopdf file1.html file2.pdf
j'ai essayé de faire sudo apt-get install wkhtmltopdf
mais sans succès.
Au lieu de cela, je vous recommande d'essayer:
-
télécharger le dernier exécutable (.11 rc1):
wget https://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.11.0_rc1-static-i386.tar.bz2
-
uncpress it:
tar -vxf wkhtmltopdf-0.11.0_rc1-static-i386.tar.bz2
-
renommer :
mv wkhtmltopdf-i386 wkhtmltopdf
-
chmod à exécutable :
chmod a+x wkhtmltopdf
-
placez-le dans / usr / bin:
sudo mv wkhtmltopdf /usr/bin
il vient de faire:
1-pour télécharger les dépendances wkhtmltopdf
# apt-get install wkhtmltopdf
2 - Télécharger à partir de la source
# wget http://downloads.sourceforge.net/project/wkhtmltopdf/xxx.deb
# dpkg -i xxx.deb
3 - Essayer
# wkhtmltopdf http://google.com google.pdf
son amende de travail
ça marche!
j'ai trouvé une méthode pour résoudre ce problème sans serveur x faux. Dans la version la plus récente de wkhtmltopdf n'a pas besoin de serveur X pour le travail, mais il pas dans les dépôts officiels linux.
Solution pour 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
Solution pour Ubuntu 14.04.4 LTS (trusty) 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
Utilisateur felixhummel a obtenu très bon solution, mais le dépôt avec utilite a changé.
développant la réponse de Timothy...
si vous êtes un développeur web qui cherche à utiliser wkhtmltopdf dans le cadre de votre application web, vous pouvez simplement l'installer dans votre dossier /usr/bin/
comme suit:
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
vous pouvez maintenant l'exécuter n'importe où en utilisant wkhtmltopdf
.
j'utilise personnellement la bibliothèque Snappy en PHP. Voici un exemple de la facilité avec laquelle il est possible de créer un PDF:
<?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>');
dernière mise à Jour de wkhtmltopdf version sur SourceForge (0,12 pouce de cette écriture). Il n'a pas besoin d'un serveur X pour fonctionner.
exemple pour 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
<<
pour 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
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
problème est probablement dans ancienne version de wkhtmltopdf - la version 0.9 du dépôt de distribution nécessitent l'exécution de serveur X, mais la version actuelle - 0.12.2.1 ne l'exige pas - peut exécuter sans tête.
paquet de téléchargement pour votre distribution de http://wkhtmltopdf.org/downloads.html et l'installer - Pour Ubuntu:
sudo apt-get install xfonts-75dpi
sudo dpkg -i wkhtmltox-0.12.2.1_linux-trusty-amd64.deb
je viens de comprendre que je peux simplement déplacer l'exécutable statique dans le répertoire /usr/bin/
et l'exécuter de n'importe où.
wkhtmltopdf
> 0.11
il n'a pas ce numéro de X-server
.
Donc installer 0.12.2.1
sur un serveur linux.
-
lors de la première installation du serveur xvfb:
sudo apt-get install xvfb
-
avoir besoin de la version de wkhtmltopdf de http://wkhtmltopdf.org/downloads.html
-
Install wkhtmltopdf:
sudo dpkg -i wkhtmltox-0.12.2.1_linux-trusty-amd64.deb
ou installer avec
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
-
installez la dépendance (si nécessaire):
sudo apt-get -f install
-
créer un lien symbolique dans
/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
-
essayez maintenant ci-dessous et ça devrait marcher,
/usr/local/bin/wkhtmltopdf http://www.google.com test.pdf
Il est recommandé d'utiliser au moins 0.12.2.1.
à partir de wkhtmltopdf >= 0.12.2 il ne nécessite plus de serveur X ou d'émulation. Vous pouvez télécharger la nouvelle version de http://wkhtmltopdf.org/downloads.html
j'ai suivi les instructions ici et j'ai fait travailler wkhtmltopdf pour moi mais je voudrais offrir un peu de perspective que j'ai découvert en faisant ma propre petite danse avec wkhtmltopdf
- xvfb
.
C'est important parce que la même raison qui l'amène à jeter l'infâme cannot connect to X server
erreur provoque également fonctionner avec sever limites, même si vous ne les fournissez un serveur X. Ces limites incluent le fait de ne pas pouvoir prendre des entrées multiples sources, en-tête et pieds de page, etc (cochez la section du manuel ).
wkhtmltox
par lui-même ne nécessite pas un X11, mais il fait usage des bibliothèques QT qui le font. Dans les versions de nevever de développeurs wkthmltox a fait un patch pour QT qui lui permet de fonctionner avec un X11.
actuellement, certaines versions sont construites contre QT patché et certaines ne le sont pas. Vous pouvez vérifier votre version en exécutant wkhtmltopds --version
. Il devrait y avoir une ligne à la fin disant Compiled against wkhtmltopdf patched qt.
donc, pour conclure, si vous installez et utilisez une version qui utilise les bibliothèques patchées, elle devrait fonctionner sur un serveur linux sans le serveur xvfb
, comme je peux le confirmer.
solution pour 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
nous rencontrons ce problème à l'intérieur des conteneurs docker et l'installation ci-dessus a wkhtmltopdf avec Qt corrigé
Ennemi 64 bits:
wget http://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.9.9-static-amd64.tar.bz2
tar xvjf wkhtmltopdf-0.9.9-static-amd64.goudron.bz2
sudo mv wkhtmltopdf-amd64 / usr / bin /wkhtmltopdf
sudo chmod +x / usr / bin /wkhtmltopdf
- télécharger le fichier de ce lien
- Extraire et déplacer le fichier exécutable(/wkhtmltox/bin/wkhtmltopdf)
/usr/bin/
- Renommer wkhtmltopdf si le nom n'est pas wkhtmltopdf. Donc maintenant vous avez un exécutable à
/usr/bin/wkhtmltopdf
- Set permissions: sudo chmod a+x / usr / bin /wkhtmltopdf
- installer les paquets de soutien nécessaires. sudo apt-get install openssl build-essential xorg libssl-dev
- maintenant, vérifiez avec
wkhtmltopdf http://www.google.com test.pdf
conseil: informations détaillées à partir de ce lien
il suffit d'installer une version 0.12.4 ou plus. Cela semble résoudre le problème.
Voir Comment puis-je installer la dernière wkhtmltopdf sur Ubuntu 16.04? .