仅当使用本地资产时,才需要很长时间才能从HTML生成PDF

我使用 KnpsnappyBundle 1.6.0 wkhtmltopdf 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地址发出了获取请求。我无法理解为什么要花这么长时间,而我已经不知道下一步该怎么做了。任何想法表示赞赏!

siyuan12345 回答:仅当使用本地资产时,才需要很长时间才能从HTML生成PDF

这听起来像DNS问题。我会尝试在/etc/hosts中添加一个条目,例如:

127.0.0.1     example.com
127.0.0.1     www.example.com

并指向您的图片以使用该域

,

我没有找到问题的根源。但是,我找到了一种解决方法。我所做的是:

全局安装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。

,

不确定这是否可以接受,但就我而言,我总是生成一个可以独立存在的HTML文件。我将所有CSS引用都转换为直接包含在内。我以编程方式执行此操作,因此仍可以将它们作为工具单独保存。如果您使一个辅助方法根据URI包括它们,那么这将是微不足道的。同样,我尝试对所有图像进行base64编码,并包括这些图像。同样,我将它们保留为单独的文件,并以编程方式进行。

然后我将这个“自包含”的html馈送到wkhtmltopdf。

我会分享一些示例,但是我的实现实际上是C#和Razor。

此外,如果您仍然遇到问题,我还将在带有时间戳的帮助器中建立一些日志,以便您查看包含项需要花费多长时间。

我不确定服务器的设置是什么,但是连接到NAS或其他设备时可能出现问题。

您还可以在其余步骤周围添加带有时间戳的日志记录,以准确了解哪些步骤花费了很长时间。

其他提示,我尝试在图像中使用SVG(在可以的地方),并尽量不要将大型(或任何)CSS库拉入成为pdf的html中。

本文链接:https://www.f2er.com/3167675.html

大家都在问