我正在使用这个(https://github.com/KnpLabs/KnpSnappyBundle) 将 HTML 文件渲染为 pdf。我在测试服务器上构建了它,一切都运行良好,但是当我将其移动到实时服务器时,根本没有显示任何图像。这两个服务器都是 AWS EC2。我尝试使用 png 和 jpg 图像以及相对、绝对和完整路径,但似乎都不起作用。
对我来说,问题似乎出在实时服务器的配置上,但我自己没有设置它,也不确定如何检查它。
如果我直接访问它们,并且在生成 pdf 之前,图像就会显示出来,所以我知道图像在那里是正常的。
我尝试/home/ubuntu/wkhtmltox/bin/wkhtmltopdf http://www.google.com test.pdf
在控制台中输入,结果如下
正在加载页面 (1/6) QSslSocket: 无法解析 SSLv2_client_method ] 10% QSslSocket: 无法解析 SSLv2_server_method 正在计数页面 (2/6)
正在解析链接 (4/6)
正在加载页眉和页脚 (5/6)
打印页面 (6/6) 完成
然后它会将主页的副本保存到服务器。所以它肯定能正常工作,但我不明白为什么我在网站上使用它时它不起作用。
所有路径都是绝对路径,原来是 http://{{ domain }}/pdf/images/background_logo.png 等,我改成了http://subdomain.livesite.com/pdf/images/background_logo.png等以确保路径绝对正确,但这没有任何区别。我在浏览器中测试了路径,它们加载没有问题。这在测试服务器上运行良好,所以我不确定为什么它在实时网站上不起作用。用于生成 pdf 的代码是:
public function generatePdf($app)
{
$products = $this->getRecurringOrderProducts();
if (count($products) > 0)
{
$filename = $this->getPdfFilename($app);
if (!file_exists($filename))
{
// Generate HTML
$html = $app['twig']->render('order/pdf.twig', array(
'entry' => $this,
'products' => $products,
'expiry_date' => $this->getExpiryDate(), // Add this line
'content_height' => intval( (8*100*count($products))/95 )+1,
'domain' => $app['config']['domain'],
));
// Generate PDF
$snappy = new Pdf($app['wkhtmltox_bin']);
$snappy->setOption('orientation', 'landscape');
$snappy->generateFromHtml(utf8_decode($html), $filename);
}
}
}
我正在使用 wkhtmltopdf 版本 0.9.9,如果有帮助的话
我不确定我做错了什么,但如果能提供任何帮助我将非常感激。
答案1
我已经设法解决了这个问题,问题是图像 URL 需要是绝对的,但是当我之前测试它时,服务器没有缓存它,所以显示的是旧文件。