1

我正在尝试建立一个pdf文件生成系统。为此,我开始使用 WkHtmlToPdf 以及 KnpSnappy Bundle。这是我所做的:

1 - 我首先下载了一个预编译的二进制文件(MacOs)https://wkhtmltopdf.org/

2 - 然后安装包composer require knplabs/knp-snappy:(https://github.com/KnpLabs/snappy

3 - 最后在 bundles.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"'
  )
);

我进行了几次测试,当我尝试使用 URL 或一段 HTML 代码生成 pdf 时,我没有遇到任何问题,但是当我尝试使用 renderView 生成基于 twig 视图的 pdf 时,我最终得到了 pdf 1777 页,包括 1775 页空白

有谁知道可以做什么?

编辑:我通过正确加载我的 css 修复了 1777 页。我在模板的开头添加了这段代码:

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

所以我最终得到了一个几乎格式化的页面。我的 app.js 文件似乎没有加载,所以我的 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

但似乎我的引导程序尚未加载..(它在我的 app.js 中声明为“ require('bootstrap'); ”)

4

0 回答 0