Я пытаюсь настроить систему генерации 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');")