mr-slack / knp-snappy-bundle
通过将Twig/HTML模板转换为PDF和图片,在Symfony中轻松创建。
v1.8.0
2020-11-16 07:45 UTC
Requires
- php: >=7.2.5
- knplabs/knp-snappy: ^1.2
- symfony/framework-bundle: ^4.4|^5.1
Requires (Dev)
- doctrine/annotations: ^1.11
- symfony/asset: ^4.4|^5.1
- symfony/finder: ^4.4|^5.1
- symfony/phpunit-bridge: ^4.4|^5.1
- symfony/security-csrf: ^4.4|^5.1
- symfony/templating: ^4.4|^5.1
- symfony/validator: ^4.4|^5.1
- symfony/yaml: ^4.4|^5.1
This package is not auto-updated.
Last update: 2024-10-02 20:21:43 UTC
README
Snappy 是一个PHP (5.6+)包装器,用于wkhtmltopdf转换工具。它允许您使用webkit引擎从HTML文档生成PDF或图像文件。
KnpSnappyBundle为您的Symfony项目提供简单的集成。
安装
使用composer,需要
composer require knplabs/knp-snappy-bundle
然后在您的内核中启用它(如果使用Symfony >= 4的Flex配方则可选)
// config/bundles.php <?php return [ //... Knp\Bundle\SnappyBundle\KnpSnappyBundle::class => ['all' => true], //... ];
配置
如果您需要更改二进制文件,更改实例选项或禁用一个或两个服务,您可以通过配置来完成这些操作。
# app/config/config.yml (or config/packages/knp_snappy.yaml if using Symfony4 and the Flex recipe) 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()
,可以使用以下方法
# app/config/config.yml (or config/packages/knp_snappy.yaml if using Symfony4 and the Flex recipe) knp_snappy: temporary_folder: "%kernel.cache_dir%/snappy"
您还可以使用process_timeout
配置生成器使用的超时时间
# app/config/config.yml (or config/packages/knp_snappy.yaml if using Symfony4 and the Flex recipe) 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开发。