Drupal, Printer et wkhtmltopdf
Pendant longtemps pour générer des vues PDF pour un node, il n'y avait guère d'autre solution que TCPDF ou DOMPDF, via le module PdfView ou plus récemment Printer. Aujourd'hui, il existe une nouvelle méthode native et diablement efficace utilisant le célèbre moteur webKit.
État des lieux
Sous Drupal, il existe au moins deux modules qui permettent d'obtenir la version PDF d'un contenu : pdfview et printer. Le second est plus récent, un peu plus bordélique aussi, mais propose outre le PDF, l'expédition d'un article à un ami, et une version imprimable. Ca ne se refuse pas...
Le module printer pouvait (et peut toujours d'ailleurs) être paramétré pour utiliser l'une des deux librairies PHP parmi les plus connues pour générer du PDF : DomPDF et tcpdf. Je dis les plus connues car il existe un autre projet tout jeune (et français) qui cherche à se faire une place, HTMLtoPDF.
Tout serait parfait sauf que la DOMPDF gère les accents comme il peux pour planter le reste du temps, et TCPDF ne prend pas en compte les feuilles de style. Et cerise sur le gâteau, les deux sont loin d'être des foudres de guerre... Donc en attendant de tester une éventuelle inclusion de HTMLtoPDF, le sujet est donc un peu mort du côté "pur PHP".
WebKit avec Drupal
Depuis peu, printer inclus une troisième option bien plus intéressante pour qui a la main sur son serveur, l'utilisation directe du moteur de rendu
khtmltopdf utilise WebKit (Pour les rares qui ne le savent pas encore, il s'agit du moteur de rendu de
Sous *nix, Qt basant sa gestion des pixmaps sur
Pour ce qui est de la compilation de khtmltopdf sous linux, vous trouver toutes les informations utiles ici. Ensuite, pour Linuxiens et Windowiens, il ne reste plus qu'à déplacer (ou symlinker) le binaire khtmltopdf, lui aussi, dans à la racine du module.
Paramétrage de Printer
Pour commencer, vous devez activer (au minimum) les modules suivants :
- Printer-friendly pages (core)
- PDF version
Ensuite, allez dans Configuration du site, puis sur l'onglet PDF. Vous devriez alors voir apparaître en haut de la page un bouton radio avec comme libellé le chemin complet vers wkhtmltopdf. Activez ce bouton radio pour que printer utilise bien
Vous avez ici les options pour wkhtmltopdf, supprimez tout ce qui s'y trouve. Ces options ne sont en effet pas compatible avec la version 0.8. Une fois la zone vidée, les Unixiens constaterons que juste en dessous se trouvent les options pour Xvfb. En effet, Printer va directement lancer lui-même le faux serveur X11 avant wkhtmltopdf, sans que vous n'ayez rien à faire de plus (pas besoin de créer un service donc).
Vous pouvez maintenant enregistrer la configuration et aller sur un contenu pour cliquer sur le lien PDF et vérifier ainsi que tout fonctionne.
Conclusion
L'intégration de wkhtmltopdf à Printer est une bonne nouvelle pour la génération de PDF sous Drupal, permettant un rendu beaucoup plus propre en prenant beaucoup moins de ressources. Le seul inconvénient est que les liens ne seront pas clickables, mais en soit, ce n'est pas bien grave.