wkhtmltopdf命令失败

问题描述 投票:11回答:4

我正在尝试使用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://前面的路径有关吗?

pdf-generation wkhtmltopdf xvfb
4个回答
30
投票

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

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


3
投票

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


0
投票

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

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


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

和preview.pdf

chrome_wkhtmltopdf_and_xvfb-run

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

这比看起来更难,因为wkhtmltopdf必须与敌对的第三方专有PDF渲染软件(由adobe制作?)进行竞争,并且他们与浏览器开发人员协同工作,以便对他们的引擎进行模糊处理和访问,因为许多大公司都是他们的钱他们的绝密源代码。 wkhtmltopdf正在刺激这个世界,以便开源人员可以拥有它,而无需在高层办公楼现金支付诉讼。这就是为什么adobe向浏览器的开发者付钱让我们难以接受。我们正在稀释他们的利润机制,所以他们通过在我们可能的地方投掷停止棒来进行报复。就是这样。我们越来越多地将这个世界传播给新手,第三方投掷停止棒的难度越大,因为你在其他方面阻止了利润。

© www.soinside.com 2019 - 2024. All rights reserved.