Snappy es un contenedor PHP para la utilidad de conversión wkhtmltopdf. Le permite generar archivos pdf o de imagen a partir de sus documentos html, utilizando el motor webkit.
KnpSnappyBundle proporciona una integración sencilla para su proyecto Symfony.
Si utiliza JavaScript para representar sus páginas, puede encontrar algunos problemas debido a que wkhtmltopdf no es totalmente compatible con las API de ES6. La única forma de resolver este problema es proporcionar polyfills que arreglen las brechas entre las API modernas de ES6 y el motor de renderizado wkhtmltopdf.
Con compositor, requiere:
composer require knplabs/knp-snappy-bundle
Si no estás usando Flex, habilítalo en tu kernel:
// config/bundles.php
<?php
return [
//...
Knp Bundle SnappyBundle KnpSnappyBundle::class => [ ' all ' => true ],
//...
];
Si necesitas cambiar los binarios, cambiar las opciones de la instancia o incluso deshabilitar uno o ambos servicios, puedes hacerlo a través de la configuración.
# 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 desea cambiar la carpeta temporal que es sys_get_temp_dir()
de forma predeterminada, puede usar
# config/packages/knp_snappy.yaml
knp_snappy :
temporary_folder : " %kernel.cache_dir%/snappy "
También puedes configurar el tiempo de espera utilizado por los generadores con process_timeout
:
# config/packages/knp_snappy.yaml
knp_snappy :
process_timeout : 20 # In seconds
El paquete registra dos servicios:
knp_snappy.image
le permite generar imágenes;knp_snappy.pdf
le permite generar archivos 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 está buscando mantenedores (vea por qué).
Si está interesado, no dude en abrir un PR para solicitar que lo agreguen como mantenedor.
Estaremos encantados de saber de usted :)
SnappyBundle y Snappy se basan en el fantástico wkhtmltopdf. SnappyBundle ha sido desarrollado por KnpLabs.