仅使用本地资产时,从HTML生成PDF会花费很长时间

问题描述 投票:2回答:1

我使用KnpSnappyBundle 1.6.0wkhtmltopdf 0.12.5从PHP中的HTML生成PDF,如下所示:

$html = $this->renderView(
    'pdf/template.html.twig',
    [ 'entity' => $entity, ]
);

return new PdfResponse($snappy->getOutputFromHtml($html,
    ['encoding' => 'UTF-8', 'images' => true]), 'file'.$entity->getUniqueNumber().'.pdf'
);

我的问题:在生产服务器上,当我引用同一服务器上的资产(图像或CSS)时,生成PDF大约需要40-50秒。即使我只使用同一台服务器上的微小映像,也要花费40秒。我可以使用托管在另一台服务器上的更大图像,并且生成PDF会立即发生。

总体来说,我的服务器提供资产或文件的速度并不慢。如果我只是将HTML呈现为页面,则它会立即发生(无论有无资产)。当我从生产服务器本地请求资产以生成pdf时,它也会立即发生。

我需要在HTML中呈现为PDF的资产都具有绝对URL,这是wkhtmltopdf正常运行所必需的。例如:<img src="https://www.example.com/images/logo.png">困难的是,一切正常,但运行非常缓慢。没有指向会导致超时的不存在资产的指示。

我首先认为可能与wkhtmltopdf有关,所以我尝试了不同的版本和不同的设置,但这并没有改变任何内容。我也试图指向同一台服务器上的另一个域,问题仍然存在。所以我现在的猜测是这是服务器问题。我正在运行Nginx-1.16.1并通过SSL提供所有内容。我已安装libssl-dev1.1.1d-1(最新的稳定版),并且我的操作系统是Ubuntu 18.04.3 LTS

[当我查看Nginx访问日志时,可以看到使用同一服务器上的资产时,我自己的IP地址发出了一个get请求。我无法理解为什么要花这么长时间,而我已经不知道下一步该怎么做了。任何想法表示赞赏!

php pdf nginx wkhtmltopdf
1个回答
0
投票
全局安装wkhtmltopdf:

sudo apt-get install wkhtmltopdf

这将通过Ubuntu存储库安装

wkhtmltopdf 0.12.4(于2019年11月5日安装)。这是wkhtmltopdf的旧版本,单独运行它给我带来了许多问题。为了解决这个问题,我现在在

xvfb中运行它。首先通过运行安装它:

sudo apt-get install xvfp
然后将您使用的指向wkhtmltopdf的包装程序的二进制路径更改为:
'/usr/bin/xvfb-run /usr/bin/wkhtmltopdf' 

在我的情况下,我使用

KnpSnappyBundle
并在.env文件中设置二进制路径。在knp_snappy.yaml中设置binary: '%env(WKHTMLTOPDF_PATH)%',在.env中设置WKHTMLTOPDF_PATH='/usr/bin/xvfb-run /usr/bin/wkhtmltopdf'(如上所述)。我现在可以按常规方式生成PDF。
© www.soinside.com 2019 - 2024. All rights reserved.