我正在使用mPDF图书馆将HTML网页转换为PDF格式。
这个库在运行PHP 5.6的本地计算机和开发服务器上运行良好。
然而,在亚马逊新配置的Ubuntu 16机器上,使用Apache 2.4.18和PHP 7,我无法使用它。
症状是PDF永远不会生成 - 浏览器只是永远旋转,最终我不得不退出浏览器以逃避进程。我没有收到任何错误消息。
我已经通过我的脚本来查看流程陷入何处,以及此方法:
$mPDF->WriteHtml($html);
我尝试将非常简单的HTML字符串传递给函数,例如:
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<b>Hello!</b>
</body>
</html>
这确实有效。
所以我想知道HTML的质量。通过W3 Validator运行我的HTML会发现我现在修复的一些错误,但这并没有解决我的问题。
所以我现在想知道我的HTML的大小 - 它是一个正在呈现的大页面,通常在PDF上超过20页。
我的脚本为进程分配了大量内存:
ini_set('memory_limit', '1024M');
服务器总共有8G内存。
我应该在服务器配置中查看可能影响mPDF的任何内容吗?
感谢您的期待。
在进一步调试并将HTML剥离回更小和更小的部分之后,我已经能够生成PDF了 - 但它非常慢。
mPDF似乎也无法找到图像资源,因此我在PDF上获得了破碎的图像符号。我想知道这个服务器设置是否有一个奇怪的webroot / basePath,这意味着mPDF无法找到它正在寻找的资产?
想知道此问题现在是否与mPDF not rendering images (mPDF error: IMAGE Error Could not find image file)
重复我看到了缓慢加载和丢失图像的相同问题
答案 0 :(得分:0)
所以服务器有一个IP防火墙,mPDF使用file_get_contents()
来引用PDF的资产作为外部资产,包括域名:
file_get_contents('http://server.com/asset/anAsset.jpg');
这意味着请求已经从服务器出来,回到它并被防火墙拒绝。
删除防火墙解决了我们的问题。
我仍然想知道mpdf是否可以在本地引用资产。其basePath
属性的文档似乎表明它始终使用完整的域网址:
https://mpdf.github.io/reference/mpdf-functions/setbasepath.html