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