WkHTMLtoPDF没有加载本地CSS和图像

ste*_*esu 35 html wkhtmltopdf

我看过很多这个问题非常相似的问题,所以我一开始就犹豫不决.但没有任何建议解决我的问题,我似乎无法弄清楚自己的错误.

对于我为一个客户制作的项目,他们希望能够将客户的报价(使用在线表单生成)转换为PDF.很简单.由于整个项目都是PHP,我使用了以下简单的过程:

  1. 将报价保存为临时HTML文件
  2. 使用WkHTMLtoPDF将HTML文件转换为PDF
  3. 输出此PDF文件
  4. 清理(​​删除临时文件)

直到他们更换服务器一直有效.新服务器有防火墙.

首先,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但似乎没有任何解决它

10u*_*0us 32

在我的情况下 - wkhtmltopdf版本0.12.2.1(带有修补的qt) - 使用绝对路径向头部添加基本标记,确保图像和css确实被加载.

<html>
<head>
...
<base href="http://www.example.com/">
<link href="/assets/css/style.css" rel="stylesheet">
...
</head>
Run Code Online (Sandbox Code Playgroud)


Bas*_*sen 26

如果你在Linux上检查你的图像的所有权.对于Windows,您可以在http://code.google.com/p/wkhtmltopdf/wiki/Usage上找到一些信息.

我尝试了不同类型的路径到图像:

  1. <img src="file:///var/www/testpdf/flowers.jpg"><br>
  2. <img src="./flowers.jpg"><br>
  3. <img src="flowers.jpg"><br>
  4. <img src="/var/www/testpdf/flowers.jpg"><br>

所有图像都显示正确.我没有使用任何命令行参数(仅wkhtmltopdf /var/www/testpdf/makepdf.html makepdf.pdf)

  • 嘿,为什么这个答案被投票?我没有找到你的问题的任何解决方案?现在我面临同样的问题,图像无法用pdf捕获,但在浏览器中显示良好. (10认同)

vla*_*mir 13

对于Windows,您需要在标记中使用绝对文件系统路径.例如:

<link href='C:\Projects\Hello\Hello.Web\Content\custom\home.css' rel='stylesheet' type='text/css' />
Run Code Online (Sandbox Code Playgroud)

!不http://localhost/Hello.Web/Content/custom/home.css


小智 13

为了嵌入它们,您可以插入 base64 编码的图像,例如:

<img src="data:image/png;base64,someBase64content"/>
Run Code Online (Sandbox Code Playgroud)

  • `src` 的开头缺少一个 `"`。 (3认同)

Jos*_*osh 7

当浏览器呈现您的 HTML 时,它使用一个相对路径(有时以 URL 开头),如下所示:

<img src="/static/images/some_picture.png">
<img src="http://www.example.com/static/images/some_picture.png">
Run Code Online (Sandbox Code Playgroud)

但是当 WkHTMLtoPDF 在您的服务器上运行时,它直接通过文件系统而不是通过网络服务器与您的本地文件连接。因此,对于本地文件,与浏览器不同,WkHTMLtoPDF 需要实际文件路径

<img src="/var/www/myapplication/static/images/some_picture.png">
Run Code Online (Sandbox Code Playgroud)

(这对我使用 Python Flask 有用)


小智 5

在 Windows 上使用路径:(file:///C:/some/dir/some/file.img注意三重 /)


小智 5

可能已经太晚了:)

顺便说一句,只需将此配置添加到最后的选项中即可。

options = {'enable-local-file-access': None}
pdfkit.from_string(html, 'filename.pdf', options=options)
Run Code Online (Sandbox Code Playgroud)