spraed / pdf-generator-bundle
此包可以从 Twig/HTML 模板在 Symfony 中创建(多个)PDF 文件。
Requires
- php: ^8.0
- matthiasnoback/symfony-config-test: ^4.2.1
- symfony/framework-bundle: ^6.0.4
Requires (Dev)
- phpunit/phpunit: ^8.4
README
SpraedPDFGeneratorBundle 可以将 HTML 文档生成 PDF。此包允许您非常容易地添加页面页眉和页脚(可以在第一页禁用/切换)。
它使用基于 [Flying Saucer 项目][flyingsaucer] 的小 jar 库。因此,您需要在服务器上运行 Java(Java 6 或更高版本)。
使用 Composer 安装
composer require spraed/pdf-generator-bundle
使用方法
services.yml 中注册了一个服务来生成 PDF 文件。只需从服务类调用 PDF 生成器,并通过 generatePDF() 方法使用 XHTML 和 PDF 的 URL 调用即可
$html = $this->renderView('AcmeDemoBundle:Default:index.html.twig');
$pdfGenerator = $this->get('spraed.pdf.generator');
您还可以设置编码选项(您可以将第二个参数留空,默认为 UTF-8)
$pdfGenerator->generatePDF($html, 'UTF-8');
其他内容将由控制器中的 Response 对象处理,即
$html = $this->renderView('ACMEYourBundle:Print:print.html.twig');
$pdfGenerator = $this->get('spraed.pdf.generator');
return new Response($pdfGenerator->generatePDF($html),
200,
array(
'Content-Type' => 'application/pdf',
'Content-Disposition' => 'inline; filename="out.pdf"'
)
);
如果您希望 PDF 作为下载提供,只需将 'Content-Disposition' 中的 'inline' 更改为 'attachment'。
请确保您 HTML 中的所有资产都使用绝对路径链接,因为 HTML 将被复制到服务器上的 tmp 文件夹中。如果您想在 Twig 中添加图像,它应该看起来像这样
{{ app.request.scheme ~'://' ~ app.request.httpHost ~ asset('images/foo.jpg') }}
您还可以在一次堆栈中打印多个 PDF。例如,您从多个 HTML 文件生成多个文档,并希望将这些文档输出到一个巨大的 PDF 文件中,可以使用 'generatePDFs' 方法,该方法接受一个渲染后的 HTML 视图数组并将它们合并在一起
$twigs[0] = 'SpraedSomethingBundle:Print:print_pdf_one.html.twig'
$twigs[1] = 'SpraedSomethingBundle:Print:print_pdf_two.html.twig'
$htmlCollection = array();
foreach($twigs as $twig){
$htmlCollection[] = $this->renderView($twig);
}
return new Response($pdfGenerator->generatePDFs($htmlCollection, 'UTF-8'),
200,
array(
'Content-Type' => 'application/pdf',
'Content-Disposition' => 'inline; filename="out.pdf"'
)
);
要定义合适的打印 CSS,您可能需要阅读 w3.org 关于此内容的提示:[w3.org] [w3.org]: http://www.w3.org/TR/css3-page/ [flyingsaucer]: https://github.com/flyingsaucerproject/flyingsaucer [spraed]: http://www.spraed.com
配置
示例配置选项
spraed_pdf_generator:
command:
env:
FOO: BAR
java:
full_path: /path/to/java
命令环境将在运行 Java 应用程序时添加环境变量。