【问题标题】:KnpSnappyBundle PDF generation exceeds maximum execution timeKnpSnappyBundle PDF 生成超过最大执行时间
【发布时间】:2016-01-12 14:33:47
【问题描述】:

我正在尝试在 Symfony 中使用KnpSnappyBundle 生成 PDF,但每当我尝试运行该操作时,它都会超过 PHP 中的最长 60 秒执行时间。

下面是动作:

/**
* @Route("/download-agreement", name="download_agreement")
*/
public function downloadAgreementAction()
{
    $session = new Session();
    $html = $this->renderView('client-representation.html.twig', array(
        'clientAgreementData'  => $session->get("sessionClientAgreementData"),
        "pdfStatus" => true
        ));

    return new Response(
        $this->get('knp_snappy.pdf')->getOutputFromHtml($html),
        200,
        array(
            'Content-Type'          => 'application/pdf',
            'Content-Disposition'   => 'attachment; filename="error.pdf"'
            )
        );
}

当我在树枝模板中对资产使用绝对 URL 时,它似乎也只超过了执行时间,例如 absolute_url(asset('css/agreement.css'))。如果我使用相对 url,那么 css 将被忽略并生成 PDF,但我当然需要样式。

有什么想法吗?

编辑:对于遇到此问题的任何人,使用绝对 url 应该在生产服务器上工作;但是,在本地主机上,您可能会遇到我遇到的问题。谢谢chalasr

【问题讨论】:

  • 听起来可能是尝试检索绝对网址时出现问题。尝试将 set_time_limit(0); 作为控制器操作的第一行以消除 60 秒超时,然后查看页面是否完成,甚至尝试执行 return new Response($html); 以确保您仍然得到预期的结果。

标签: php symfony pdf twig


【解决方案1】:

好的,解决方案实际上很简单,问题是它无法在 dev(local) 环境中运行,因为出于某种原因 wkhtmltopdf 不喜欢 localhost:8000... 随便。

From this issue(和许多其他)在 laravel 包中针对此问题打开。
捆绑包中的另一个https://github.com/KnpLabs/KnpSnappyBundle/issues/66

第一次使用 KnpSnappyBundle 时,我使用了很多替代方案,但均未成功。

当尝试使用包含一个或多个绝对 URL 的视图(Pdf 类的所有相关方法相同)生成 pdf 时,会发生“超时”。

为了处理这个错误,我使用了一个仅用于生成 Pdf 的特定模板,我将 css 直接放在 <style></style> 块中。
这样,样式就正确应用了。

【讨论】:

  • 将所有引导程序放在一个样式标签中绝对不理想。
  • 为引导程序和其他外部库使用 CDN。对于在特定上下文(仅来自本地主机)中发生的非常阻塞的错误,这是一种快速而肮脏的替代方案,而且您很难找到“理想”的解决方案。祝你好运
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-07
  • 1970-01-01
  • 2020-04-29
  • 2013-04-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多