knplabs / knp-snappy-bundle
通过将Twig/HTML模板转换为PDF和图片,轻松在Symfony中创建。
v1.10.2
2024-06-10 12:38 UTC
Requires
- php: >=8.1
- knplabs/knp-snappy: ^1.4.3
- symfony/framework-bundle: ^5.1|^6.0|^7.0
Requires (Dev)
- phpunit/phpunit: ^8.5
- symfony/yaml: ^5.1|^6.0|^7.0
README
Snappy 是wkhtmltopdf转换工具的PHP包装器。它允许您使用webkit引擎从HTML文档生成PDF或图片文件。
KnpSnappyBundle为您的Symfony项目提供了一种简单的集成方式。
限制
如果您使用JavaScript来渲染页面,可能会遇到一些问题,因为wkhtmltopdf不完全兼容ES6 api。解决此问题的唯一方法是提供polyfills,以修复现代ES6 api和wkhtmltopdf渲染引擎之间的差距。
安装
使用composer,需要
composer require knplabs/knp-snappy-bundle
如果您不使用Flex,请在您的内核中启用它
// config/bundles.php <?php return [ //... Knp\Bundle\SnappyBundle\KnpSnappyBundle::class => ['all' => true], //... ];
配置
如果您需要更改二进制文件,更改实例选项,甚至禁用一个或两个服务,您可以通过配置来实现。
# 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: []
如果您想更改默认的临时文件夹sys_get_temp_dir()
,可以使用
# config/packages/knp_snappy.yaml knp_snappy: temporary_folder: "%kernel.cache_dir%/snappy"
您还可以使用process_timeout
配置生成器使用的超时。
# config/packages/knp_snappy.yaml knp_snappy: process_timeout: 20 # In seconds
用法
该包注册了两个服务
knp_snappy.image
服务允许您生成图片;knp_snappy.pdf
服务允许您生成PDF文件。
从URL生成图片
// @var Knp\Snappy\Image $knpSnappyImage->generate('http://www.google.fr', '/path/to/the/image.jpg');
从URL生成PDF文档
// @var Knp\Snappy\Pdf $knpSnappyPdf->generate('http://www.google.fr', '/path/to/the/file.pdf');
从多个URL生成PDF文档
// @var Knp\Snappy\Pdf $knpSnappyPdf->generate(array('http://www.google.fr', 'http://www.knplabs.com', 'http://www.google.com'), '/path/to/the/file.pdf');
从Twig视图生成PDF文档
// @var Knp\Snappy\Pdf $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' ); } }
从控制器以响应形式渲染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) { $html = $this->renderView('MyBundle:Foo:bar.html.twig', array( 'some' => $vars )); return new PdfResponse( $knpSnappyPdf->getOutputFromHtml($html), 'file.pdf' ); } }
渲染包含相对URL(如CSS文件)的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正在寻找维护者(查看原因)。
如果您感兴趣,请随时打开PR请求成为维护者。
我们期待您的消息 :)
致谢
SnappyBundle和Snappy基于出色的wkhtmltopdf。SnappyBundle由KnpLabs开发。