我正在使用Symfony 3.1.2和KnpSnappyBundle 1.4,我按照文档中的说法(生成pdf)来跟踪:https://github.com/KnpLabs/KnpSnappyBundle
但它不起作用。生成pdf但不执行javascript ...
这是我的Symfony控制器:
/**
* @Route("/report")
*/
public function report(Request $request)
{
$idTown = 1;//$request->request->get("idTown");
$html = $this->renderView("@AppBundle/Resources/views/report.html.twig", array
(
"idTown" => $idTown
));
return new Response
(
$this->get('knp_snappy.pdf')->getOutputFromHtml($html,
array(
'enable-javascript' => true,
'no-stop-slow-scripts' => true,
'javascript-delay' => 5000)
),
200,
array(
'Content-Type' => 'application/pdf',
'Content-Disposition' => 'attachment; filename="file.pdf"'
)
);
}
以下是HTML文件(report.html.twig
):
<html>
<head>
<script
src="https://code.jquery.com/jquery-2.2.4.min.js"
integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44="
crossorigin="anonymous"></script>
<script>
$("body").html("okkkkkkkkkkkkkkkkkkkkkkk");
</script>
<style>
html
{
background-color : red;
}
</style>
</head>
<body>
</body>
当我转到网址localhost/report
时,我会收到一个红色页面的下载提示,其中没有文字。对于它的价值,我也尝试使用原生javascript(而不是jQuery),但它也没有用。但是你看,CSS被执行了......
请帮助,谢谢。
答案 0 :(得分:0)
终于解决了。我仍然不知道为什么它不起作用,但根据我对这些html-to-pdf库的经验,总是某些东西在某些时候会出错。
我设法使用原始工具成功生成(并下载)我的pdf所有这些库都建立在wkhtmltopdf
上。
这是我的代码,它可能对某些人有所帮助:
Symfony控制器:
/**
* @Route("/report")
*/
public function report(Request $request)
{
$idTown = 1;//$request->request->get("idTown");
exec("wkhtmltopdf --disable-smart-shrinking --no-outline --margin-top 0mm --margin-bottom 0mm --margin-right 0mm --margin-left 0mm http://localhost/test --javascript-delay 3000 rapport.pdf");
$filename = "rapport.pdf";
header('Content-Type: application/pdf');
header("Content-disposition: attachment;filename=$filename");
readfile($filename);
unlink("rapport.pdf");
return new Response();
}
模板就是你想要的。没有问题包括资产,不需要绝对路径或所有那些狗屎等。我基本上失去了5个小时尝试不同的库,只是简单地单独使用wkhtmltopdf
...是的,你可以把JS和CSS是单独的文件。我还建议您将wkhtmltopdf
放在服务器的PATH变量中,除非您想引用完整路径。
希望有一天能帮助别人。