14

我正在尝试使用将 HTML 文件转换为 PDF wkhtmltopdf

为此,我在 Debian 机器上安装了 wkhtmltopdf 并尝试运行以下命令:

/usr/bin/xvfb-run -a -s "-screen 0 640x480x16" wkhtmltopdf /path/convert.1303714349.4961.html.tmp /path/convert.1303714349.4961.pdf.tmp

我收到以下错误:

Loading page (1/2)
Error: Failed loading page file:///path/convert.1303714349.4961.html.tmp (sometimes it will work just to ignore this error with --ignore-load-errors)

该文件确实存在于 中/path/convert.1303714349.4961.html.tmp,并且权限设置正确。它与前面的路径有什么关系file://吗?

4

4 回答 4

36

我相信wkhtmtopdf不处理具有非典型扩展名的本地文件。尝试将输入文件重命名为*.html.

请参阅https://web.archive.org/web/20131124022426/http://code.google.com/p/wkhtmltopdf/issues/detail?id=486上的问题和评论。

于 2011-07-02T16:15:44.923 回答
3

另一个有用的提示是将文件名中的空格替换为“_”之类的字符,因为当文件名中有空格时,进程加载页面失败

于 2014-02-19T14:44:36.320 回答
0

我的 Windows 7 机器上的“file://”路径没有任何问题。

您是否尝试过错误消息中的建议--igonore-load-errors

于 2011-04-25T17:32:17.550 回答
0

您的问题是由文件系统xvfb-run wkhtmltopdf和无头 X11 服务器之间的用户权限协商引起的。

用户运行以下命令:

cd /home/user;
touch somehtml.html;
/usr/bin/xvfb-run --server-args="-screen 0, 1024x768x24" 
     wkhtmltopdf somehtml.html preview.pdf;

wkhtmltopdf 产生警告:

警告:加载页面文件失败:///home/user/somehtml.html(忽略)

目标 PDF 文件不存在、缺少 somefile.html 中的内容或为空白。

如何重现问题,sscce:

条件:

64 bit Fedora Linux 17, PC Desktop
Install via a 'sudo yum install wkhtmltopdf'
wkhtmltopdf has version 0.10.0
From a terminal, using xvfb-run

somehtml.html 中有问题的 HTML:

<html>
<head>head tag</head>
  <body>
    <h1>this should be H1<h1>
    Words words words in a paragraph.
  </body>
</html>

在用户目录中并运行

cd /home/user;
/usr/bin/xvfb-run --server-args="-screen 0, 1024x768x24" wkhtmltopdf /home/user/somehtml.html /home/user/preview.pdf

wkhtmltopdf 产生警告

警告:加载页面文件失败:///home/user/somehtml.html(忽略)

/home/user/preview.pdf 丢失或空白。

是什么导致了问题:

您对用户的xvfb-run监狱wkhtmlpdf,并且无权读取和/或写入/home/user/somehtml.pdf/home/user/preview.pdf

要查看这是否是您的问题,请询问xvfb-run我们拥有什么样的权限?

/usr/bin/xvfb-run --server-args="-screen 0, 1024x768x24" whoami > /tmp/secret.txt; cat /tmp/secret.txt

解决方法:

/tmp通常比 /home/user/ 具有更宽松的权限,所以在 /tmp 中完成所有工作

cd /tmp;
touch /tmp/somehtml.html;
#put above html in somehtml.html
cat /tmp/somehtml.html
    <html>
    <head>head tag</head>
      <body>
        <h1>this should be H1<h1>
        Words words words in a paragraph.
      </body>
    </html>
/usr/bin/xvfb-run --server-args="-screen 0, 1024x768x24" wkhtmltopdf /tmp/somehtml.html /tmp/preview.pdf

你应该得到这个标准输出:

loaded the Generic plugin 
Loading page (1/2)
Printing pages (2/2)
Done

和预览.pdf

chrome_wkhtmltopdf_and_xvfb-运行

为什么 wkhtmltopdf 不更聪明并为我处理这个问题?

这比看起来更难,因为 wkhtmltopdf 必须与敌对的第 3 方专有 PDF 渲染软件(由 adobe 制造?)进行斗争,并且他们与浏览器开发人员合作,以混淆和难以访问他们的引擎,因为许多大公司靠他们赚钱他们的绝密源代码。wkhtmltopdf 正在进入那个世界,这样开源人们就可以拥有它,而无需在高层办公大楼中支付现金。这就是为什么 adobe 付钱给浏览器的开发者,让我们很难做到这一点。我们正在稀释他们的盈利机制,因此他们会在可能的地方向我们投掷止损棒进行报复。就是这样。我们在世界范围内向新手传播的越多,第 3 方就越难以使用止损棒,因为您正在阻止他人获利。

于 2018-12-21T15:48:33.180 回答