Snappy est une bibliothèque PHP permettant la génération de vignettes, d'instantanés ou de PDF à partir d'une url ou d'une page html. Il utilise les excellents wkhtmltopdf et wkhtmltoimage basés sur un kit Web disponibles sur OSX, Linux et Windows.
Vous devrez télécharger wkhtmltopdf 0.12.x
pour pouvoir utiliser Snappy.
Veuillez consulter la FAQ avant d'ouvrir un nouveau numéro. Snappy est un petit wrapper autour de wkhtmltox, donc de nombreux problèmes sont déjà résolus, résolus ou wkhtmltox.
Les intégrations suivantes sont disponibles :
knplabs/knp-snappy-bundle
, pour Symfonybarryvdh/laravel-snappy
, pour Laravelmvlabs/mvlabs-snappy
, pour Zend Framework composer require knplabs/knp-snappy
<?php
require __DIR__ . ' /vendor/autoload.php ' ;
use Knp Snappy Pdf ;
$ snappy = new Pdf ( ' /usr/local/bin/wkhtmltopdf ' );
// or you can do it in two steps
$ snappy = new Pdf ();
$ snappy -> setBinary ( ' /usr/local/bin/wkhtmltopdf ' );
$ snappy = new Pdf ( ' /usr/local/bin/wkhtmltopdf ' );
header ( ' Content-Type: application/pdf ' );
echo $ snappy -> getOutput ( ' http://www.github.com ' );
$ snappy = new Pdf ( ' /usr/local/bin/wkhtmltopdf ' );
header ( ' Content-Type: application/pdf ' );
header ( ' Content-Disposition: attachment; filename="file.pdf" ' );
echo $ snappy -> getOutput ( ' http://www.github.com ' );
$ snappy = new Pdf ( ' /usr/local/bin/wkhtmltopdf ' );
header ( ' Content-Type: application/pdf ' );
header ( ' Content-Disposition: attachment; filename="file.pdf" ' );
echo $ snappy -> getOutput ( array ( ' http://www.github.com ' , ' http://www.knplabs.com ' , ' http://www.php.net ' ));
$ snappy = new Pdf ( ' /usr/local/bin/wkhtmltopdf ' );
$ snappy -> generateFromHtml ( ' <h1>Bill</h1><p>You owe me money, dude.</p> ' , ' /tmp/bill-123.pdf ' );
// Type wkhtmltopdf -H to see the list of options
$ snappy = new Pdf ( ' /usr/local/bin/wkhtmltopdf ' );
$ snappy -> setOption ( ' disable-javascript ' , true );
$ snappy -> setOption ( ' no-background ' , true );
$ snappy -> setOption ( ' allow ' , array ( ' /path1 ' , ' /path2 ' ));
$ snappy -> setOption ( ' cookie ' , array ( ' key ' => ' value ' , ' key2 ' => ' value2 ' ));
$ snappy -> setOption ( ' post ' , array ( ' key ' => ' value ' ));
$ snappy -> setOption ( ' cover ' , ' pathToCover.html ' );
// .. or pass a cover as html
$ snappy -> setOption ( ' cover ' , ' <h1>Bill cover</h1> ' );
$ snappy -> setOption ( ' toc ' , true );
$ snappy -> setOption ( ' cache-dir ' , ' /path/to/cache/dir ' );
Les options peuvent être réinitialisées à leurs valeurs initiales avec la méthode resetOptions()
.
$ snappy = new Pdf ( ' /usr/local/bin/wkhtmltopdf ' );
// Set some options
$ snappy -> setOption ( ' copies ' => 4 );
// ..
// Reset options
$ snappy -> resetOptions ();
Si vous souhaitez télécharger wkhtmltopdf et wkhtmltoimage avec composer, vous ajoutez à composer.json
:
composer require h4cc/wkhtmltopdf-i386 0.12.x
composer require h4cc/wkhtmltoimage-i386 0.12.x
ou ceci si vous êtes dans un système 64 bits :
composer require h4cc/wkhtmltopdf-amd64 0.12.x
composer require h4cc/wkhtmltoimage-amd64 0.12.x
Et puis tu peux l'utiliser
<?php
use Knp Snappy Pdf ;
$ myProjectDirectory = ' /path/to/my/project ' ;
$ snappy = new Pdf ( $ myProjectDirectory . ' /vendor/h4cc/wkhtmltopdf-i386/bin/wkhtmltopdf-i386 ' );
// or
$ snappy = new Pdf ( $ myProjectDirectory . ' /vendor/h4cc/wkhtmltopdf-amd64/bin/wkhtmltopdf-amd64 ' );
NB Ces binaires statiques sont extraits des packages Debian7, ils pourraient donc ne pas être compatibles avec les distributions Linux non basées sur Debian.
Si vous souhaitez générer une table des matières et utiliser une feuille de style XSL personnalisée, procédez comme suit :
<?php
$ snappy = new Pdf ( ' /path/to/binary ' );
$ snappy -> setOption ( ' toc ' , true );
$ snappy -> setOption ( ' xsl-style-sheet ' , ' http://path/to/stylesheet.xsl ' ) //or local file;
$ snappy -> generateFromHtml ( ' <p>Some content</p> ' , ' test.pdf ' );
Si vous avez trouvé un bug, veuillez remplir un problème détaillé avec tous les points suivants. Si vous avez besoin d'aide, veuillez au moins fournir un reproducteur complet afin que nous puissions vous aider sur la base de faits plutôt que d'hypothèses.
Si votre reproducteur est grand, essayez de le réduire. Cela aidera tout le monde à réduire le bug.
KNPLabs recherche des mainteneurs (voir pourquoi).
Si vous êtes intéressé, n'hésitez pas à ouvrir un PR pour demander à être ajouté en tant que responsable.
Nous serons heureux d'avoir de vos nouvelles :)
Snappy a été initialement développé par l'équipe KnpLabs.