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.
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ù.
ou essayez ceci (à partir de http://drupal.org/node/870058 )
Téléchargez le fichier wkhtmltopdf. ou mieux l'installer avec un gestionnaire de paquets:
Sudo apt-get install wkhtmltopdf
Extrayez-le et déplacez-le vers /usr/local/bin/
wkhtmltopdf
pour que vous ayez maintenant un exécutable à /usr/local/bin/wkhtmltopdf
Sudo chmod a+x /usr/local/bin/wkhtmltopdf
Installez les packages de support requis.
Sudo apt-get install openssl build-essential xorg libssl-dev
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.
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
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 "$@"
Déplacez ce script shell vers /usr/local/bin
et définissez les autorisations suivantes:
Sudo chmod a+x /usr/local/bin/wkhtmltopdf.sh
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
.
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 aucun succès .
Téléchargez le dernier exécutable (.11 rc1):
wget https://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.11.0_rc1-static-i386.tar.bz2
décompressez-le:
tar -vxf wkhtmltopdf-0.11.0_rc1-static-i386.tar.bz2
renommez-le:
mv wkhtmltopdf-i386 wkhtmltopdf
chmod à l'exécutable:
chmod a+x wkhtmltopdf
placez-le dans/usr/bin:
Sudo mv wkhtmltopdf /usr/bin
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!
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é.
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>');
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
<<
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
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
wkhtmltopdf
> 0.11
n'a pas ce problème X-server
.
Donc installer 0.12.2.1
sur un serveur linux.
Au début, installez le serveur xvfb:
Sudo apt-get install xvfb
Obtenir la version requise de wkhtmltopdf sur http://wkhtmltopdf.org/downloads.html
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
Dépendance d'installation (si nécessaire):
Sudo apt-get -f install
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
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
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.
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
/usr/bin/
/usr/bin/wkhtmltopdf
wkhtmltopdf http://www.google.com test.pdf
Indice: les informations détaillées de ce lienIl 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? .
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
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