Magazine High tech

wkhtmltopdf, alternative à HTMLDOC

Publié le 13 avril 2013 par Menerve
HTMLDOC est un bon générateur de PDF depuis du code HTML. Il est assez permissif et le rendu est bon comparé aux classes PHP que j'ai pu tester. Le seul problème est que la version 1.8.27 ne gère pas le HTML 4.0, encore moins le CSS...
C'est un problème, à l'heure du HTML 5 de devoir régresser au HTML 3 pour générer ses PDF, et le développement de HTMLDOC est au point mort depuis 2011. Une autre limitation vient de la restriction des polices utilisables (http://www.htmldoc.org/documentation.php/bodyfonttypeface.html).
wkhtmltopdf semble alors venir en sauveur: il est basé sur le moteur de rendu Webkit (comme les navigateurs Safari, Chrome...). Il est open source bien sûr. Son développement est aussi au point mort depuis 2011, mais les résultats sont probants.
Notre point ici est d'installer wkhtmltopdf sur un serveur web afin de générer des PDF dans notre application web, en PHP pour moi.
Tutoriel installation:
Installer sur Ubuntu Server:
Le seul problème, est que wkhtmltopdf est basé sur QT et requiert normalement un serveur X pour tourner. Or sur un serveur LAMP, il n'y a généralement pas de serveur X installé. Je ne vous recommande donc pas d'installer le package situé dans Aptitude, mais d'installer la version statique, qui contient une version patchée de QT qui permet à wkhtmldoc de tourner sans serveur X!
Voici les commandes tirées d'une question StackOverflow (http://stackoverflow.com/questions/9604625/wkhtmltopdf-cannot-connect-to-x-server):
# 1. Télécharger la dernière version (.11 rc1) (remplacer i386 par amd64 pour un OS 64bits) :

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

# 2. Décompresser :

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

# 3. Renommer :

mv wkhtmltopdf-i386 wkhtmltopdf

# 4. Rendre executable :

chmod a+x wkhtmltopdf

# 5. Déplacer dans /usr/bin :

sudo mv wkhtmltopdf /usr/bin

# 6. Tester:

wkhtmltopdf http://www.alternative.free.fr/blog alternative.free.fr.blog.pdf

Installer sur Windows:
1. Télécharger l'installeur et installer: http://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.9.9-installer.exe
Intégration en PHP:
On peut se sevir de la classe PHP Wkhtmltopdf: Configuration pour Windows:
Ligne 35 de Wkhtmltopdf.php, section path to executable:
//changer 
protected $_bin = '/usr/bin/wkhtmltopdf';
//par
protected $_bin = 'C:\\Progra~2\\wkhtmltopdf\\wkhtmltopdf.exe';
Si wkhtmltopdf est installé dans C:\Program Files (x86)\wkhtmltopdf
Un exemple d'instanciation de la classe:
include('Wkhtmltopdf.php');
    try {
		//indicate to create PDF in the temporary files system directory
        $wkhtmltopdf = new Wkhtmltopdf(array('path' => sys_get_temp_dir()));
        $wkhtmltopdf->setTitle("Title");
		//directly pass HTML code (here, an exemple with a page break)
        $wkhtmltopdf->setHtml('<b>Content</b><div style="page-break-after: always;"></div><b>Content page 2</b>');
		//or a URL
		//$wkhtmltopdf->setUrl("http://www.alternative.free.fr/blog/");
		//MODE_EMBEDDED displays PDF in browser, MODE_DOWNLOAD forces PDF download
        $wkhtmltopdf->output(Wkhtmltopdf::MODE_EMBEDDED, 'file.pdf');
    } catch (Exception $e) {
        echo $e->getMessage();
    }

Comparaison des versions:
Voici 2 PDF du blog l'Alternative Web, l'un généré par wkhtmltopdf 0.9.9, l'autre généré par wkhtmltopdf 0.11 rc1.
La version 0.11 rc1 semble être meilleure: des Marques pages sont générés, les liens sont au bon endroit.
Avec les deux versions, le titre du blog est mal affiché, la règle CSS letter-spacing est mal interprêtée.
La version 0.9.9 affiche bien les pointillés sous les liens au lieu d'un simple soulignement pour l'autre.
Mais globalement, le PDF de la version 0.9.9 est illisible en 100%...
Enfin, le PDF de la version 0.11 rc1 est plus léger.
Note sur le changement de page:
avec HTMLDOC, le tag <!-- NEW PAGE -->
avec wkhtmldoc, la règle CSS page-break-after: always;

Retour à La Une de Logo Paperblog

A propos de l’auteur


Menerve 243 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte

Magazine