dreadnip / chrome-pdf-bundle
chrome-php/chrome的包装器,用于在Symfony项目中生成PDF文件
0.6.0
2024-04-11 08:44 UTC
Requires
- php: ^7.4 || ^8.0
- chrome-php/chrome: ^1.8
- symfony/config: ^3.4 || ^4.4 || ^5.2 || ^6.0 || ^7.0
- symfony/dependency-injection: ^3.4 || ^4.4 || ^5.2 || ^6.0 || ^7.0
- symfony/http-kernel: ^3.4 || ^4.4 || ^5.2 || ^6.0 || ^7.0
- symfony/process: ^3.4 || ^4.4 || ^5.2 || ^6.0 || ^7.0
Requires (Dev)
- phpstan/phpstan-symfony: ^1.2
- phpunit/phpunit: ^7.5.20 || ^8.5.13 || ^9.5.0
- roave/security-advisories: dev-master
- squizlabs/php_codesniffer: ^3.7
- symfony/phpunit-bridge: ^4.3
README
ChromePdfBundle是一个利用chrome-php/chrome项目来渲染HTML并将输出保存为PDF文件的Symfony组件。
安装
使用composer,需要
composer require dreadnip/chrome-pdf-bundle
配置
组件依赖于一个工作正常且最新的Chrome/Chromium实例来运行。您必须在.env文件中指定二进制文件。
# .env or .env.local CHROME_BINARY="/usr/bin/chromium"
使用
组件注册了两个服务
chrome_pdf.pdf_generator
允许您从HTML字符串生成PDF文件。您可以在应用程序中自动装配PdfGenerator
类以快速开始。chrome_pdf.browser_factory
是在您的Symfony应用程序中提供的服务,是chrome-php/chrome的BrowserFactory类。如果您想微调PDF生成过程,请使用此功能。您可以从PdfGenerator类开始,并在此基础上构建自定义解决方案。
基本示例:在控制器中渲染PDF文档
use Dreadnip\ChromePdfBundle\Service\PdfGenerator; use Symfony\Component\HttpFoundation\BinaryFileResponse; use Symfony\Component\HttpFoundation\Response; use Twig\Environment; class TestController extends AbstractController { public function __invoke(PdfGenerator $pdfGenerator): Response { $html = $this->render('pdf.html.twig'); $path = $pdfGenerator->generate($html, 'files/test.pdf'); return new BinaryFileResponse($path); } }
高级示例:在控制器中使用自定义选项渲染PDF文档
use Dreadnip\ChromePdfBundle\Service\PdfGenerator; use Symfony\Component\HttpFoundation\BinaryFileResponse; use Symfony\Component\HttpFoundation\Response; use Twig\Environment; class TestController { public function __invoke( Environment $twig, PdfGenerator $pdfGenerator ): Response { $html = $twig->render('pdf.html.twig'); // Control everything by passing custom options $printOptions = [ 'printBackground' => true, 'displayHeaderFooter' => true, 'preferCSSPageSize' => true, 'headerTemplate'=> "<div></div>", 'footerTemplate' => "<div></div>", 'scale' => 1.0, ]; // Setting headless to false helps you debug issues $browserOptions = [ 'headless' => false, ]; $path = $pdfGenerator->generate( html: $html, path: 'files/test.pdf', printOptions: $options, browserOptions: $browserOptions, timeout: 5000 ); return new BinaryFileResponse($path); } }
打印选项可以用来控制PDF的渲染。
浏览器选项可用于控制用于渲染PDF的无头Chrome实例。
所有可用选项的列表可以在chrome-php/chrome存储库中找到。
基础模板
该组件提供了一个基础模板,可以用来构建PDF文件。这包括用于页面布局和断行的辅助函数。该模板包含两个块styles
用于CSS和content
用于实际的PDF内容。
{% extends '@ChromePdf/base.html.twig' %} {% block content %} <section class="page page-one break-after"> <h1>First page</h1> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolores enim maxime quasi? Ab accusantium at commodi corporis, distinctio earum facilis harum ipsum maxime, nisi nostrum obcaecati odit officia quod voluptatem?</p> </section> <section class="page page-two"> <h2>Second page</h2> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolores enim maxime quasi? Ab accusantium at commodi corporis, distinctio earum facilis harum ipsum maxime, nisi nostrum obcaecati odit officia quod voluptatem?</p> </section> {% endblock %}
致谢
这个组件只是chrome-php/chrome项目的简单包装。