首页 > 解决方案 > 如何配置 knp_snappy 包以生成不同的页面格式

问题描述

我正在使用一个应用程序Symfony 4,我在执行打印功能或从不同格式生成 Pdf 时遇到问题html,我的应用程序确实使用控制器操作在帮助下发布账单Knp_snappy
我已配置knp snappy生成A4 页面 pdf 和它在这个阶段工作得很好没有问题,现在我有另一个控制器操作,为每张支付的账单发布收据,这就是我卡住的地方,我无法重新配置knp_snapp和调整格式以适合大小收据是 9 厘米,我也不想在 A4 的大页面上打印收据。
所以,我想知道当我尝试释放收据时,有没有办法覆盖动作控制器上的knp_snappyin文件?yaml

谢谢,

标签: phpsymfony4knp-snappy

解决方案


我已经找到了一个解决方案,它的一部分实际上是在github上的这个问题中,它的描述如下。

use Knp\Snappy\Pdf as Snappy;

 $binary = $this->container->getParameter('knp_snappy.pdf.binary');

 $snappy = new Snappy($binary);


 $html= $this->renderView('bill/receipt.html.twig', array(
                'receipt'=>$receipt,
            ));


  $pdf=$snappy->getOutputFromHtml($html,array(
            'orientation' => 'portrait',
            'enable-javascript' => true,
            'javascript-delay' => 1000,
            'no-stop-slow-scripts' => true,
            'no-background' => false,
            'lowquality' => false,
            'page-width' => '8cm',
            'page-height' => '12.40cm',
            'margin-left'=>0,
            'margin-right'=>0,
            'margin-top'=>0,
            'margin-bottom'=>0,
            'encoding' => 'utf-8',
            'images' => true,
            'cookie' => array(),
            'dpi' => 300,
            'enable-external-links' => true,
            'enable-internal-links' => true,
            )
        );

    return new Response($pdf,200,array(
        'Content-Type'          => 'application/pdf',
        'Content-Disposition'   => 'inline; filename="receipt-'.$date.'.pdf"'
    ));

我认为代码本身就很清楚。

  • 我得到了 knp snappy 二进制文件

  • 我创建了 Snappy 类的新实例

  • 我在 getOutputFromHtml() 函数中设置页面宽度

  • 所有设置为 0 的边距选项都相同,因此它覆盖整个页面

    其余的都是正常的


推荐阅读