wkhtmltopdf: impossible de se connecter au serveur X

113

J'utilise wkthmltopdf pour convertir du HTML en documents PDF à la volée sur mon serveur Web Linux. À l'origine, le programme avait besoin d'un serveur X11 ou d'un serveur X similaire pour fonctionner correctement, mais à travers de nombreuses demandes de développeurs pour que cela s'exécute sur des serveurs sans interface graphique, je suis presque sûr qu'il exécute un serveur X virtuel dans la version statique . J'utilise la version statique (autonome) du programme et cela fonctionne très bien! Je mettrais le fichier exécutable dans un dossier et exécuterais:

./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 comme je fonctionne sur un système 64 bits, j'en avais également besoin apt-get install ia32-libs. Après l'installation, je peux trouver la version comme ceci:

wkhtmltopdf --version

production:

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, lorsque j'essaye d'exécuter le programme installé via aptitude, j'obtiens l'erreur suivante:

wkhtmltopdf: cannot connect to X server

Quelqu'un sait-il comment je peux résoudre ce problème? Je suppose qu'il manque un serveur X virtuel ou quelque chose dans cette version.

jeffery_the_wind
la source

Réponses:

206

ou essayez ceci (depuis http://drupal.org/node/870058 )

  1. Téléchargez wkhtmltopdf. Ou mieux l'installer avec un gestionnaire de paquets:

    sudo apt-get install wkhtmltopdf
    
  2. Extrayez-le et déplacez-le vers /usr/local/bin/

  3. Renommez-le pour wkhtmltopdfque vous ayez maintenant un exécutable à/usr/local/bin/wkhtmltopdf
  4. Définissez les autorisations: sudo chmod a+x /usr/local/bin/wkhtmltopdf
  5. Installez les packages de support requis.

    sudo apt-get install openssl build-essential xorg libssl-dev
    
  6. Vérifiez si cela fonctionne: exécutez

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

    Si cela fonctionne, vous avez terminé. Si vous obtenez le message d'erreur «Impossible de se connecter au serveur X», passez au numéro 7.

  7. Nous devons l'exécuter sans tête sur un serveur x «virtuel». Nous allons faire cela avec un package appelé xvfb.

    sudo apt-get install xvfb
    
  8. Nous devons écrire un petit script shell pour envelopper wkhtmltopdf dans xvfb. Créez un fichier appelé wkhtmltopdf.shet ajoutez ce qui suit:

    xvfb-run -a -s "-screen 0 640x480x16" wkhtmltopdf "$@"
    
  9. Déplacez ce script shell vers /usr/local/binet définissez les autorisations:

    sudo chmod a+x /usr/local/bin/wkhtmltopdf.sh
    
  10. Vérifiez si cela fonctionne à nouveau: exécutez

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

Notez que http://www.google.com peut générer une erreur du type "Un objet ResourceObject terminé a reçu un signal de chargement terminé. Cela peut indiquer qu'une iframe prend trop de temps à charger." Vous voudrez peut-être tester avec une page plus simple comme http://www.example.com.

TimoSolo
la source
1
J'ai essayé ce tutoriel à l'origine, et cela n'a pas vraiment fonctionné, je n'aimais pas non plus avoir à créer le wrapper avec un lien symbolique. Comme je l'ai écrit dans ma réponse, si vous déplacez simplement l'exécutable statique vers le /usr/bin/répertoire, vous pouvez l'utiliser de n'importe où. Ils ont ajouté un serveur x virtuel à l'exécutable statique, donc pas besoin de créer le script wrapper.
jeffery_the_wind
cela a fonctionné pour moi .. dans certaines situations. Je pense que l'installation de bibliothèques 32 bits manquantes l'a corrigé pour moi - merci pour cette astuce
TimoSolo
Que If you get the error "Cannot connect to X server" then continue to number 6.signifie la déclaration au numéro 6 ? Je suis très confus par cela. Voulez-vous dire de continuer au numéro 7?
Noz
Oui, c'est ce que cela veut dire ... l'article original avait mal numéroté les articles. Alors passez à # 7
dwaz
merci, renuméroté .. La réponse suggérée devrait fonctionner dans la plupart des cas, alors essayez d'abord
TimoSolo
61

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
syzspectroom
la source
C'est l'approche la plus simple et la plus sûre, car l'installation standard de wkhtmltopdf n'inclut pas le serveur x.
Peter
Voici comment résoudre "impossible de se connecter au serveur X" dans la grande majorité des cas.
tripleee
2
Sur les distributions basées sur Redhat, utilisez sudo yum install xorg-x11-server-Xvfbresp. sudo dnf install xorg-x11-server-Xvfb.
TNT
28

J'ai essayé de le faire sudo apt-get install wkhtmltopdfmais sans succès. Au lieu de cela, je vous recommande d'essayer:

  1. Téléchargez le dernier exécutable (.11 rc1):

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

  2. décompressez-le:

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

  3. renommez-le:

    mv wkhtmltopdf-i386 wkhtmltopdf

  4. chmod en exécutable:

    chmod a+x wkhtmltopdf

  5. placez-le dans / usr / bin:

    sudo mv wkhtmltopdf /usr/bin

Yakob Ubaidi
la source
code.google.com/p/wkhtmltopdf/issues/detail?id=730 semble que vs 11.0_rc1 a quelques problèmes
montrealmike
cela a fonctionné pour moi mais la génération pdf a échoué, j'ai donc remplacé les instructions ci-dessus parhttps://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.9.9-static-i386.tar.bz2
martincarlin87
1
le téléchargement de wkhtmltox-linux-amd64_0.12.0-03c001d.tar.xz fonctionne pour moi maintenant. Pour une raison quelconque, la dernière ne le fait pas.
chasetheskyforever
1
Je peux confirmer que cela a fonctionné pour moi: (obtention de la dernière version stable 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

Je viens de le faire:

1- Pour télécharger les dépendances wkhtmltopdf

# apt-get install wkhtmltopdf

2- Télécharger depuis la source

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

# dpkg -i xxx.deb

3- Essayez

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

Il fonctionne bien

Ça marche!

Sfblaauw
la source
J'ai dû courir apt-get install -faprès avoir installé le package pour obtenir les dépendances. Sinon a fonctionné comme un charme. Préférez beaucoup cette méthode aux autres décrites.
dmuir
2
Je suis d'accord. Cette solution m'a amené au régime actuel. La commande dpkg -i a généré des informations ambiguës, mais peu importe, cela a fonctionné: wget -q http://downloads.sourceforge.net/project/wkhtmltopdf/0.12.2.1/wkhtmltox-0.12.2.1_linux-trusty-amd64.debsuivi desudo dpkg --install wkhtmltox-0.12.2.1_linux-trusty-amd64.deb
Bill Butler
c'est toujours la meilleure solution apportée à cette question.
versvs
1
J'ai dû courir à sudo mv wkhtmltopdf /usr/binpartir du /usr/local/bin/répertoire, mais cela a très bien fonctionné! J'ai essayé toutes les autres méthodes sur cette page sans chance avant la main ..
shaneparsons
cela devrait obtenir des votes positifs plus élevés en tant que solution la plus récente et la plus simple sans dépendre d'autres packages (ce qui résout également le problème «Impossible de se connecter au serveur X»). et j'ai des problèmes avec le chemin d'accès css relatif qui n'est pas chargé lors de l'utilisation de xvfb.
zynick le
16

J'ai trouvé une méthode pour résoudre ce problème sans faux serveur X. Dans la dernière version de wkhtmltopdf, vous n'avez pas besoin de serveur X pour travailler, mais ce n'est pas le cas dans les référentiels Linux officiels.

Solution pour Ubuntu 14.04.4 LTS (fidèle) 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 (fidèle) 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

L'utilisateur felixhummel a une très bonne solution, mais le référentiel avec l'utilitaire a changé.

PRIHLOP
la source
pour une raison quelconque, cela fonctionnait pour moi et la nouvelle version (0.13) n'était pas merci!
talsibony
C'est la solution qui a fonctionné pour moi, j'ai essayé beaucoup d'autres résolutions mais aucune d'elles n'a fonctionné. Comme je suis nouveau dans l'environnement php / Laravel, je n'ai donc aucune connaissance approfondie de ces bibliothèques et dépendances, mais cette solution est géniale, tout simplement sauvé mes heures :)
Amit
Vraiment, cette solution est géniale aujourd'hui, je suis passé à la production et j'ai eu le même problème, sans perdre de temps, je viens d'exécuter cette solution et cela a fonctionné sans problème :)
Amit
gna.org est maintenant fermé. :(
Jya
11

Poursuivre la réponse de Timothy ...

Si vous êtes un développeur Web souhaitant utiliser wkhtmltopdf dans le cadre de votre application Web, vous pouvez simplement l'installer dans votre /usr/bin/dossier 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é de création d'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>');
Jonathan
la source
11

Mise à jour vers la dernière version wkhtmltopdf de SourceForge (0.12 à ce jour). 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
<<
Felixhummel
la source
1
J'ai installé 0.12.1 et il me demande toujours de ne pas pouvoir me connecter au serveur X. Est-ce que je manque quelque chose?
Ales Maticic
Je l'ai réessayé et cela fonctionne pour moi (pas d'installation, juste pour garder la boîte propre). Voir la modification ci-dessus.
felixhummel
9

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
Matthias
la source
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
GoTLiuM
la source
6

Le problème est probablement dans l' ancienne version de wkhtmltopdf - la version 0.9 du référentiel de distribution nécessite l'exécution du serveur X, mais la version actuelle - 0.12.2.1 ne l'exige pas - peut fonctionner sans tête.

Téléchargez le package pour votre distribution à partir de http://wkhtmltopdf.org/downloads.html et installez-le - pour Ubuntu:

sudo apt-get install xfonts-75dpi
sudo dpkg -i wkhtmltox-0.12.2.1_linux-trusty-amd64.deb
Honza
la source
6

wkhtmltopdf> 0.11n'a pas ce X-serverproblème.
Donc installation 0.12.2.1sur un serveur Linux.

  1. Lors de la première installation du serveur xvfb:

    sudo apt-get install xvfb
    
  2. Obtenez la version nécessaire de wkhtmltopdf sur http://wkhtmltopdf.org/downloads.html

  3. Installez 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
    
  4. Installez la dépendance (si nécessaire):

    sudo apt-get -f install
    
  5. Créez un lien symblique 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
    
  6. Maintenant, essayez ci-dessous et cela devrait fonctionner,

    /usr/local/bin/wkhtmltopdf http://www.google.com test.pdf
    
Parag Tyagi
la source
5

Je viens de comprendre que je peux simplement déplacer l'exécutable statique vers le /usr/bin/répertoire et l'exécuter de n'importe où.

jeffery_the_wind
la source
3

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 ni d'émulation. Vous pouvez télécharger la nouvelle version sur http://wkhtmltopdf.org/downloads.html

David Ginanni
la source
1

J'ai suivi les instructions ici et j'ai fait fonctionner wkhtmltopdf pour moi, mais j'aimerais offrir un peu de perspective que j'ai découvert en faisant ma propre petite danse avec wkhtmltopdf- xvfb.

Ceci est important car la même raison qui lui fait lever la tristement célèbre cannot connect to X servererreur entraîne également son exécution avec des limitations de sévérité même si vous lui fournissez un serveur X. Ces limitations incluent l'impossibilité de prendre plusieurs sources d'entrée, de définir l'en-tête et les pieds de page, etc. (consultez la section Fonctionnalité réduite du manuel ).

wkhtmltoxen soi, il ne nécessite pas de X11, mais il utilise des bibliothèques QT qui le font. Dans les nouvelles versions de wkthmltox, les développeurs ont créé un correctif pour QT qui lui permet de fonctionner avec un X11.

Actuellement, certaines versions sont construites avec QT patché et d'autres non. Vous pouvez vérifier votre version en exécutant wkhtmltopds --version. Il devrait y avoir une ligne à la fin disantCompiled against wkhtmltopdf patched qt.

Donc, pour conclure, si vous installez et utilisez une version qui utilise les bibliothèques corrigées, cela devrait fonctionner sur un serveur Linux sans xvfbserveur, comme je peux le confirmer.

Cristian Vrabie
la source
1

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é

DmitrySemenov
la source
2
pour moi l'URL ne fonctionnait pas, j'ai utilisé celui-ci: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

Faites attention: votre fichier pourrait être wkhtmltopdf.shou wkhtmltopdf, vérifiez-le à la deuxième étape

Vous devez le copier dans le répertoire: / usr / local / bin , assurez-vous qu'il est exécutable et ajoutez le lien symbolique de wkhtmltopdf.sh comme:

1- la commande:

sudo apt-get install wkhtmltopdf

2 - insérez le binaire dans le répertoire / usr / bin afin que le navigateur ne puisse pas avoir la permission de s'exécuter dans ce répertoire. Vous devez copier le wkhtmltopdf.sh dans le répertoire / usr / local / bin car le navigateur a l'autorisation dans ce répertoire comme:

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

3 - Après make sur le binaire a la permission d'exécution comme:

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

4 - alors maintenant vous pouvez tester, cela fonctionne comme:

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

il fait télécharger le pdf dans le répertoire courant de votre terminal

5 - Facultatif maintenant, vous pouvez ajouter un lien symbolique dans votre répertoire / usr / local / bin comme

ln -s /usr/local/bin/wkhtmltopdf.sh /usr/local/bin/wkhtmltopdf
rapaelec
la source
0
  1. Télécharger le fichier à partir de ce lien
  2. Extrayez-le et déplacez le fichier exécutable (/ wkhtmltox / bin / wkhtmltopdf) vers /usr/bin/
  3. Renommez-le en wkhtmltopdf si le nom actuel n'est pas wkhtmltopdf. Pour que maintenant vous ayez un exécutable à/usr/bin/wkhtmltopdf
  4. Définir les autorisations: sudo chmod a + x / usr / bin / wkhtmltopdf
  5. Installez les packages de support requis. sudo apt-get install openssl build-essential xorg libssl-dev
  6. Maintenant, vérifiez avec un wkhtmltopdf http://www.google.com test.pdf indice: informations détaillées à partir de ce lien
Ratna Halder
la source
0

Si vous configurez wkhtmltopdf pour Rails ou Somethings dans Centos, vous pouvez suivre ces étapes ci-dessous:

  1. Allez sur https://wkhtmltopdf.org/downloads.html et copiez le lien du fichier rpm.

Dans le serveur centos bash.

  1. wget link_of_wkhtmltopdf_rpm.rpm

  2. rpm -ivh link_of_wkhtmltopdf_rpm.rpm

  3. which wkhtmltopdf

=> Vous obtiendrez le chemin de wkhtmltopdf.

  1. Configuration pour wicked_pdf ou pdfkit avec chemin à l'étape 4. Ceci est un exemple de configuration avec wickedpdf. config / initialiseurs / 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. Redémarrez le serveur.

TERMINÉ.

ThienSuBS
la source
0

Pour une utilisation 64 bits:

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

Thilina Hasantha
la source
0

Dites simplement au backend Qt de ne pas utiliser X:

QT_QPA_PLATFORM=offscreen wkhtmltopdf <input> <outfile.pdf>
Loonix
la source