我看到了多个与这个问题非常相似的问题,所以一开始我很犹豫是否要发布它。但没有任何建议可以解决我的问题,而且我自己似乎也搞不清楚问题所在。
在我为一个客户制作的项目中,他们希望能够将客户的报价(使用在线表格生成)转换为 PDF。很简单。由于整个项目都是用 PHP 编写的,因此我使用了以下简单过程:
- 将报价保存为临时 HTML 文件
- 使用 WkHTMLtoPDF 将 HTML 文件转换为 PDF
- 输出此 PDF 文件
- 清理(删除临时文件)
这一直有效,直到他们更换了服务器。新服务器有防火墙。
起初,PDF 转换步骤返回一个防火墙页面,表明服务器无法建立出站连接。为了解决这个问题,我直接提供了 HTML 文件而不是链接到它(/var/www/mysite/temp/18382.html 而不是 www.example.com/temp/18382.html)。这转换了 HTML,但防火墙阻止了 CSS 和图像的加载
我可以通过简单地将它直接嵌入网站而不是链接到它(使用 <style>
标签)来克服 CSS,但这不适用于图像
我首先尝试使用相对链接。我改了<img src="http://www.example.com/temp/image.jpg" />
至 <img src="./image.jpg" />
.这没有用。
接下来我尝试了 <img src="file:///var/www/mysite/temp/image.jpg" />
但这也不管用
我四处阅读并浏览了 WkHTMLtoPDF 手册,并尝试了几种不同的命令行参数,例如 --enable-local-file-access
, --enable /var/www/mysite/temp/
, 和 --images
但似乎没有什么可以解决的
最佳答案
在我的例子中——wkhtmltopdf 版本 0.12.2.1(带有修补的 qt)——添加一个带有绝对路径的 base 标签到 head 部分确保图像和 css 确实被加载。
<html>
<head>
...
<base href="http://www.example.com/">
<link href="/assets/css/style.css" rel="stylesheet">
...
</head>
关于html - WkHTMLtoPDF 不加载本地 CSS 和图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16627310/