wkhtmltopdf命令失败

时间:2011-04-25 07:11:54

标签: pdf-generation wkhtmltopdf xvfb

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

为此,我在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 个答案:

答案 0 :(得分:31)

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

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

答案 1 :(得分:3)

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

答案 2 :(得分:0)

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

您是否在错误消息中--igonore-load-errors尝试了建议?

答案 3 :(得分: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产生警告:

  

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

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

如何重现问题,一个场景:

条件:

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产生警告

  

警告:加载页面失败     file:///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-run

为什么wkhtmltopdf不会更智能并为我处理此问题?

这比看起来要难,因为wkhtmltopdf必须与敌对的第三方专有PDF渲染软件(由adobe制造?)抗衡,并且它们与浏览器开发人员合作来混淆和使引擎难以使用,因为许多大公司他们花钱购买了他们的绝密源代码。 wkhtmltopdf闯入了这个世界,以便开放源代码的人们可以拥有它,而不必花钱在高层办公大楼中花钱。这就是adobe向浏览器开发人员付款的原因,这使我们很难做到这一点。我们正在稀释他们的利润机制,因此他们会在可能的范围内向我们投掷止动杆进行报复。就是这样我们在全球范围内传播给新手的次数越多,第3方就越难以阻止止损,因为您正在防止他人获利。