Snappy é um wrapper PHP para o utilitário de conversão wkhtmltopdf. Ele permite gerar arquivos PDF ou de imagem a partir de seus documentos HTML, usando o mecanismo webkit.
O KnpSnappyBundle fornece uma integração simples para o seu projeto Symfony.
Se você usar JavaScript para renderizar suas páginas, poderá encontrar alguns problemas porque wkhtmltopdf não é totalmente compatível com APIs ES6. A única maneira de resolver esse problema é fornecer polyfills que corrijam as lacunas entre as APIs ES6 modernas e o mecanismo de renderização wkhtmltopdf.
Com o compositor, exija:
composer require knplabs/knp-snappy-bundleSe você não estiver usando Flex, habilite-o em seu kernel:
// config/bundles.php
<?php
return [
//...
Knp Bundle SnappyBundle KnpSnappyBundle::class => [ ' all ' => true ],
//...
];Caso precise alterar os binários, alterar as opções da instância ou até mesmo desabilitar um ou ambos os serviços, você pode fazer isso através da configuração.
# 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 : [] Se você quiser alterar a pasta temporária que é sys_get_temp_dir() por padrão, você pode usar
# config/packages/knp_snappy.yaml
knp_snappy :
temporary_folder : " %kernel.cache_dir%/snappy " Você também pode configurar o tempo limite usado pelos geradores com process_timeout :
# config/packages/knp_snappy.yaml
knp_snappy :
process_timeout : 20 # In seconds O pacote registra dois serviços:
knp_snappy.image permite gerar imagens;knp_snappy.pdf permite gerar arquivos 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á procurando mantenedores (veja por quê).
Se você estiver interessado, sinta-se à vontade para abrir um PR para pedir para ser adicionado como mantenedor.
Ficaremos felizes em ouvir de você :)
SnappyBundle e Snappy são baseados no incrível wkhtmltopdf. SnappyBundle foi desenvolvido pela KnpLabs.