您的问题是由文件系统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

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