Symfony4: проблема с KnpSnappy / WkHtmlToPdf - PullRequest
0 голосов
/ 05 февраля 2020

Я пытаюсь настроить систему генерации PDF-файлов. Для этого я пришел использовать WkHtmlToPdf, а также пакет KnpSnappy. Вот что я сделал:

1 - Сначала я скачал предварительно скомпилированный двоичный файл (MacOs) https://wkhtmltopdf.org/

2 - Затем установил пакет: composer require knplabs/knp-snappy (https://github.com/KnpLabs/snappy)

3 - и, наконец, добавьте пакет в пакеты. php с Knp\Bundle\SnappyBundle\KnpSnappyBundle::class => ['all' => true],

Это то, что я написал в своей функции внутри моего контроллера :

/**
 * @Route("/pdf/{id}", name="room_pdf", methods={"GET"}, requirements={"id"="\d+"})
 * @IsGranted("ROLE_ADMIN")
 */
public function pdf(Room $room, \Knp\Snappy\Pdf $knpSnappy)
{  

  $knpSnappy->setOption("encoding","UTF-8");
  $filename = "mypdf";
  $html = $this->renderView('room/show.html.twig' , array(
      'room' => $room,
  ));

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

Я провел несколько тестов, когда я пытаюсь сгенерировать PDF с URL или фрагментом HTML кода, у меня не возникает никаких проблем, но когда я пытаюсь сгенерировать PDF на основе на представлении ветки, используя renderView, я получаю pdf из 1777 страниц, включая 1775 пустых

Кто-нибудь имеет представление о том, что можно сделать?

Редактировать: я исправил 1777 страниц загрузив правильно мой css. Я добавляю этот код в начале моего шаблона:

{% block stylesheets %}
    {% for path in encore_entry_css_files('app') %}
        <link rel="stylesheet" href="{{ absolute_url(path) }}">
    {% endfor %}
{% endblock %}

Таким образом, я получаю страницу, почти отформатированную. Файл моего приложения. js, похоже, не загружен, поэтому у меня нет всех допустимых ресурсов bootstrap в моем файле pdf

. Вот что говорит мне мой терминал:

Feb  5 21:52:37 |INFO | SNAPPY File "/var/folders/gv/0qb9br_15gggjmhg5zs_qtth0000gn/T/knp_snappy5e3b390a547d50.44491512.pdf" 
has been successfully generated. stderr="Loading pages (1/6)\n[>                                                           ] 
0%\r[======>                                                     ] 
10%\r[=======>                                                    ] 
12%\rWarning: 
Failed to load file:///build/runtime.js (ignore)         
\nWarning: Failed to load file:///build/vendors~app.js (ignore)
\nWarning: Failed to load file:///build/app.js (ignore)
\n

Я добавил это в конце моего шаблона:

{% block scripts %}
    {% for path in encore_entry_css_files('app') %}
        <script src="{{ absolute_url(path) }}"></script>
    {% endfor %}
{% endblock %} 

И теперь мой консольный терминал выглядит так

Feb  5 22:21:42 |INFO | SNAPPY File
"/var/folders/gv/0qb9br_15gggjmhg5zs_qtth0000gn/T/knp_snappy5e3b3fd843af90.61904670.pdf"
has been successfully generated. stderr="Loading pages (1/6)\n

Но кажется, что мой bootstrap еще не загружен .. (Это объявлено в моем приложении. js с "require ('bootstrap');")

...