dreadnip/chrome-pdf-bundle

chrome-php/chrome的包装器,用于在Symfony项目中生成PDF文件

安装次数: 6,821

依赖者: 0

建议者: 0

安全性: 0

星标: 6

关注者: 2

分支: 1

开放问题: 1

语言:HTML

类型:symfony-bundle

0.6.0 2024-04-11 08:44 UTC

This package is auto-updated.

Last update: 2024-09-15 11:41:54 UTC


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项目的简单包装。