как настроить пакет knp_snappy для генерации другого формата страницы - PullRequest
0 голосов
/ 22 января 2020

Я работаю над приложением, использующим Symfony 4, я сталкиваюсь с проблемой при выполнении функции печати или генерации Pdf из html для другого формата, мое приложение высвобождает счета с помощью действия контроллера с помощью Knp_snappy, Я настроил knp snappy для создания страницы формата А4 в формате PDF, и на этом этапе он отлично работает, теперь у меня есть еще одно действие контроллера, которое высвобождает квитанцию ​​за каждый оплаченный счет, и вот где я застрял, я не могу перенастроить knp_snapp и настройте формат для соответствующего размера чека, который составляет 9 см. Также я не хочу печатать чек на большой странице формата А4. Итак, мне интересно, есть ли способ переопределить файл knp_snappy in yaml на контроллере действий, когда я пытаюсь освободить квитанцию?

Спасибо,

1 Ответ

0 голосов
/ 23 января 2020

Я нашел решение, часть его на самом деле в этом выпуске на 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"'
    ));

Я думаю, код сам по себе довольно понятен.

  • я получил бинарный файл snppy knp
  • я создаю новый экземпляр класса Snappy
  • я устанавливаю ширину страницы внутри функции getOutputFrom Html ()
  • одинаково для всех параметров полей, которые установлены на 0, поэтому он охватывает всю страницу

    остальное регулярно

...