Snappy est un wrapper PHP pour l'utilitaire de conversion wkhtmltopdf. Il vous permet de générer des fichiers PDF ou image à partir de vos documents HTML, à l'aide du moteur Webkit.
Le KnpSnappyBundle fournit une intégration simple pour votre projet Symfony.
Si vous utilisez JavaScript pour afficher vos pages, vous pouvez rencontrer des problèmes car wkhtmltopdf n'est pas entièrement compatible avec les API ES6. La seule façon de résoudre ce problème est de fournir des polyfills qui comblent les écarts entre les API ES6 modernes et le moteur de rendu wkhtmltopdf.
Avec composer, nécessitez :
composer require knplabs/knp-snappy-bundle
Si vous n'utilisez pas Flex, activez-le dans votre noyau :
// config/bundles.php
<?php
return [
//...
Knp Bundle SnappyBundle KnpSnappyBundle::class => [ ' all ' => true ],
//...
];
Si vous devez modifier les binaires, modifier les options de l'instance ou même désactiver l'un ou les deux services, vous pouvez le faire via la configuration.
# config/packages/knp_snappy.yaml
knp_snappy :
pdf :
enabled : true
binary : /usr/local/bin/wkhtmltopdf # ""C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe"" for Windows users
options : []
image :
enabled : true
binary : /usr/local/bin/wkhtmltoimage # ""C:\Program Files\wkhtmltopdf\bin\wkhtmltoimage.exe"" for Windows users
options : []
Si vous souhaitez modifier le dossier temporaire qui est sys_get_temp_dir()
par défaut, vous pouvez utiliser
# config/packages/knp_snappy.yaml
knp_snappy :
temporary_folder : " %kernel.cache_dir%/snappy "
Vous pouvez également configurer le timeout utilisé par les générateurs avec process_timeout
:
# config/packages/knp_snappy.yaml
knp_snappy :
process_timeout : 20 # In seconds
Le bundle enregistre deux services :
knp_snappy.image
permet de générer des images ;knp_snappy.pdf
permet de générer des fichiers pdf. // @var KnpSnappyImage
$ knpSnappyImage -> generate ( ' http://www.google.fr ' , ' /path/to/the/image.jpg ' );
// @var KnpSnappyPdf
$ knpSnappyPdf -> generate ( ' http://www.google.fr ' , ' /path/to/the/file.pdf ' );
// @var KnpSnappyPdf
$ knpSnappyPdf -> generate ( array ( ' http://www.google.fr ' , ' http://www.knplabs.com ' , ' http://www.google.com ' ), ' /path/to/the/file.pdf ' );
// @var KnpSnappyPdf
$ knpSnappyPdf -> generateFromHtml (
$ this -> renderView (
' MyBundle:Foo:bar.html.twig ' ,
array (
' some ' => $ vars
)
),
' /path/to/the/file.pdf '
);
use Knp Bundle SnappyBundle Snappy Response JpegResponse ;
use Symfony Bundle FrameworkBundle Controller AbstractController ;
class SomeController extends AbstractController
{
public function imageAction ( Knp Snappy Image $ knpSnappyImage )
{
$ html = $ this -> renderView ( ' MyBundle:Foo:bar.html.twig ' , array (
' some ' => $ vars
));
return new JpegResponse (
$ knpSnappyImage -> getOutputFromHtml ( $ html ),
' image.jpg '
);
}
}
use Knp Bundle SnappyBundle Snappy Response PdfResponse ;
use Symfony Bundle FrameworkBundle Controller AbstractController ;
class SomeController extends AbstractController
{
public function pdfAction ( Knp Snappy Pdf $ knpSnappyPdf )
{
$ html = $ this -> renderView ( ' MyBundle:Foo:bar.html.twig ' , array (
' some ' => $ vars
));
return new PdfResponse (
$ knpSnappyPdf -> getOutputFromHtml ( $ html ),
' file.pdf '
);
}
}
use Knp Bundle SnappyBundle Snappy Response PdfResponse ;
use Symfony Bundle FrameworkBundle Controller AbstractController ;
class SomeController extends AbstractController
{
public function pdfAction ( Knp Snappy Pdf $ knpSnappyPdf )
{
$ pageUrl = $ this -> generateUrl ( ' homepage ' , array (), true ); // use absolute path!
return new PdfResponse (
$ knpSnappyPdf -> getOutput ( $ pageUrl ),
' file.pdf '
);
}
}
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 :)
SnappyBundle et Snappy sont basés sur le génial wkhtmltopdf. SnappyBundle a été développé par KnpLabs.