web-dev-qa-db-fra.com

wkhtmltopdf: impossible de se connecter au serveur X

J'utilisais wkthmltopdf pour convertir du HTML en documents PDF à la volée sur mon serveur Web Linux. Le programme avait initialement besoin de X11 ou d'un serveur X similaire pour fonctionner correctement, mais de nombreuses demandes de développeurs lui demandant de l'exécuter sur des serveurs sans interface graphique, je suis presque certain 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 lancerais:

./wkhtmltopdf file1.html file2.pdf

Cependant, j'aimerais installer ce programme dans tout le système. J'ai utilisé le apt-get install wkhtmltopdf (installé hier) et comme je tourne sur un système 64 bits, j'avais également besoin de apt-get install ia32-libs. Après l'installation, je peux trouver la version suivante:

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, lorsque j'essaye de lancer le programme installé via aptitude, le message d'erreur suivant s'affiche:

wkhtmltopdf: cannot connect to X server

Est-ce que quelqu'un sait comment je peux résoudre ce problème? Je suppose que cette version manque un serveur X virtuel ou quelque chose.

106
jeffery_the_wind

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ù.

5
jeffery_the_wind

ou essayez ceci (à partir de http://drupal.org/node/870058 )

  1. Téléchargez le fichier 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 en wkhtmltopdf pour que vous ayez maintenant un exécutable à /usr/local/bin/wkhtmltopdf
  4. Définir 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, alors vous avez terminé. Si vous obtenez le message d'erreur "Connexion au serveur X impossible", passez au numéro 7.

  7. Nous devons l'exécuter sans tête sur un serveur x 'virtuel'. Nous ferons cela avec un paquet appelé xvfb. 

    Sudo apt-get install xvfb
    
  8. Nous avons besoin d'écrire un petit script Shell pour envelopper wkhtmltopdf dans xvfb. Créez un fichier appelé wkhtmltopdf.sh et ajoutez ce qui suit:

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

    Sudo chmod a+x /usr/local/bin/wkhtmltopdf.sh
    
  10. Vérifiez si cela fonctionne encore une fois: 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 ResourceObject terminé a reçu un signal de chargement terminé. Cela peut indiquer qu'une iframe a besoin d'un temps de chargement trop long". Vous voudrez peut-être tester avec une page plus simple telle que http://www.example.com.

196
TimoSolo

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
60
syzspectroom

J'ai essayé de faire Sudo apt-get install wkhtmltopdf mais sans aucun succès .

  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 à l'exécutable: 

    chmod a+x wkhtmltopdf

  5. placez-le dans/usr/bin: 

    Sudo mv wkhtmltopdf /usr/bin

28
Yakob Ubaidi

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- essayer

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

Ça fonctionne bien

Ça marche!

25
Sfblaauw

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 du serveur X pour le travail, mais pas dans les dépôts officiels de 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 une très bonne solution, mais le référentiel avec utilite a changé. 

16
PRIHLOP

Développer la réponse de Timothy ...

Si vous êtes un développeur Web et que vous souhaitez utiliser wkhtmltopdf avec 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.

Personnellement, j'utilise la bibliothèque Snappy en PHP. Voici un exemple de la facilité avec laquelle vous créez 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>');
11
Jonathan

Mise à jour vers la dernière version de wkhtmltopdf de SourceForge (0.12 à la date d'é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
<<
11
felixhummel

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

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 n'en a pas besoin - 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
6
Honza

wkhtmltopdf> 0.11 n'a pas ce problème X-server
Donc installer 0.12.2.1 sur un serveur linux.

  1. Au début, installez le serveur xvfb:

    Sudo apt-get install xvfb
    
  2. Obtenir la version requise 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. Dépendance d'installation (si nécessaire):

    Sudo apt-get -f install
    
  5. Créer 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
    

Il est recommandé d’utiliser au moins 0.12.2.1.

À partir de wkhtmltopdf> = 0.12.2, le serveur X ou l'émulation ne sont plus nécessaires. Vous pouvez télécharger la nouvelle version de http://wkhtmltopdf.org/downloads.html

3
David Ginanni

J'ai suivi les instructions ici et fait 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 provoque le déclenchement de la fameuse erreur cannot connect to X server entraîne également son exécution avec des limitations sévères, 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. (voir la section Fonctionnalités réduites du manuel ). 

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

Actuellement, certaines versions sont construites avec QT corrigé et d'autres non. 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 corrigées, cela devrait fonctionner sur un serveur Linux sans le serveur xvfb, comme je peux le confirmer.

1
Cristian Vrabie

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 dans les conteneurs Docker et l’installation ci-dessus a wkhtmltopdf avec le correctif QT

1
DmitrySemenov
  1. Télécharger le fichier 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. Alors que maintenant vous avez un exécutable à /usr/bin/wkhtmltopdf
  4. Définissez les autorisations: Sudo chmod a + x/usr/bin/wkhtmltopdf
  5. Installez les packages de support requis. Sudo apt-get installer openssl version indispensable xorg libssl-dev
  6. Maintenant, vérifiez avec wkhtmltopdf http://www.google.com test.pdf Indice: les informations détaillées de ce lien
0
Ratna Halder

Il suffit d'installer une version 0.12.4 ou supérieure. Cela semble résoudre le problème.

Voir Comment puis-je installer la dernière version de wkhtmltopdf sur Ubuntu 16.04? .

0
Martin Thoma

Utilisation ennemie 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

0
Thilina Hasantha

Vous devez le copier dans le répertoire:/usr/local/bin , le rendre exécutable et ajouter le lien symbolique de wkhtmltopdf.sh like:

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 l'autorisation de s'exécuter dans ce répertoire. Vous devez copier le répertoire wkhtmltopdf.sh dans le répertoire/usr/local/bin car le navigateur est autorisé à accéder à ce répertoire, par exemple:

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

3 - Après make sur le binaire, avoir la permission d’exécuter comme:

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

4 - Alors maintenant, vous pouvez tester, ça marche 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, vous pouvez maintenant ajouter un lien symbolique dans votre répertoire/usr/local/bin like

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