Snappy adalah pembungkus PHP untuk utilitas konversi wkhtmltopdf. Ini memungkinkan Anda menghasilkan file pdf atau gambar dari dokumen html Anda, menggunakan mesin webkit.
KnpSnappyBundle menyediakan integrasi sederhana untuk proyek Symfony Anda.
Jika Anda menggunakan JavaScript untuk merender halaman, Anda mungkin mengalami beberapa masalah karena wkhtmltopdf tidak sepenuhnya kompatibel dengan api ES6. Satu-satunya cara untuk mengatasi masalah ini adalah dengan menyediakan polyfill yang memperbaiki kesenjangan antara api ES6 modern dan mesin rendering wkhtmltopdf.
Dengan komposer, memerlukan:
composer require knplabs/knp-snappy-bundle
Jika Anda tidak menggunakan Flex, aktifkan di kernel Anda :
// config/bundles.php
<?php
return [
//...
Knp Bundle SnappyBundle KnpSnappyBundle::class => [ ' all ' => true ],
//...
];
Jika Anda perlu mengubah binari, mengubah opsi instans, atau bahkan menonaktifkan salah satu atau kedua layanan, Anda dapat melakukannya melalui konfigurasi.
# 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 : []
Jika Anda ingin mengubah folder sementara yang sys_get_temp_dir()
secara default, Anda dapat menggunakan
# config/packages/knp_snappy.yaml
knp_snappy :
temporary_folder : " %kernel.cache_dir%/snappy "
Anda juga dapat mengonfigurasi batas waktu yang digunakan oleh generator dengan process_timeout
:
# config/packages/knp_snappy.yaml
knp_snappy :
process_timeout : 20 # In seconds
Bundel ini mendaftarkan dua layanan:
knp_snappy.image
memungkinkan Anda menghasilkan gambar;knp_snappy.pdf
memungkinkan Anda menghasilkan file 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 sedang mencari pengelola (lihat alasannya).
Jika Anda tertarik, silakan membuka PR untuk meminta ditambahkan sebagai pengelola.
Kami akan senang mendengar pendapat Anda :)
SnappyBundle dan Snappy didasarkan pada wkhtmltopdf yang mengagumkan. SnappyBundle telah dikembangkan oleh KnpLabs.