如何从PHP执行WKHTMLTOPDF?

时间:2012-08-06 09:38:42

标签: php windows wkhtmltopdf

我知道这个topis已经存在,但没有一个答案对我有帮助......我将wkhtml文件夹从我的硬盘复制到服务器上。我跑的时候         exec('“../wkhtmltopdf / wkhtmltopdf.exe”“www.estiroad.com/export.php”“C:/EXTREM.pdf”');

没有任何反应......我是否正确输入路径?我的意思是,我需要输入wkhtmltopdf的确切路径,根据我从哪里运行exec命令,对吧?如果我想将它保存到用户硬盘上,我需要使用绝对路径,对吧?奇怪的是,它没有给我任何错误,只是默默地做什么......我发现了PHP绑定,但我不明白如何使用它们......每个人只在Linux中解决这个问题,那对我来说毫无价值:(任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:2)

使用knplabs中的snappy。它是wkhtmltopdf的包装并处理案例。

答案 1 :(得分:1)

(我有wkhtmltopdf的经验,但仅限于* nix)

我的建议:首先在没有PHP的情况下做一切,不要执行exec()。

只需确保您可以在命令行上键入命令以创建PDF。

您确定在机器上安装了WebKit吗? wkhtmltopdf.exe取决于它。

只有在确定可以从命令行生成后,才能尝试将操作转换为PHP。同时确保PHP具有执行wkhtmltopdf.exe的适当权限,并且有权写入C:/EXTREM.pdf。

答案 2 :(得分:1)

你不应该在库中放置引号。你可以这样捕获命令的输出:

$commandString = '../wkhtmltopdf/wkhtmltopdf-i386 http://www.estiroad.com/export.php file.pdf 2>&1';
$output       = shell_exec($commandString);

UNIX中的2>&1意味着输出将通过。 1是标准输出。 2是stderr。 希望这会有所帮助。

或在Windows中

$commandString = '../wkhtmltopdf/wkhtmltopdf.exe http://www.estiroad.com/export.php file.pdf 2> output';
print $out ? $out : join("", file("output"));

从权限问题看起来你在linux上运行生产脚本。转到生产服务器并运行

$ uname -a

你会得到类似的东西:

  

Linux ora100 2.6.5-7.252-smp#1 SMP Tue 2月14日11:11:04 UTC 2006 x86_64 x86_64 x86_64 GNU / Linux

x86_64建议您运行64位CPU,如果是这样的话,请下载amd64版本的二进制文件,否则请下载i386版本。两者都可以从这个网址中获得:http://code.google.com/p/wkhtmltopdf/downloads/list

保持Windows二进制文件。你有配置文件吗?如果你确实有一个开关,你可以根据你的环境将库路径分配给一个常量。

if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
    // this is windows server
    define('WKHTML_LIB', "../wkhtmltopdf/wkhtmltopdf.exe");
} else {
    // or the 64 bit binary?
    define('WKHTML_LIB', "../wkhtmltopdf/wkhtmltopdf-i386");
}

然后更改启动wkhtmltopdf的代码:

$commandString = WKHTML_LIB' http://www.estiroad.com/export.php file.pdf 2> output';
print $out ? $out : join("", file("output"));