1

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

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

4

3 回答 3

2

使用来自knplabs的 snappy。它是 wkhtmltopdf 的包装器并处理这些案例。

于 2012-10-27T11:00:35.420 回答
1

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

我的建议:首先在没有 PHP、没有 exec() 的情况下做所有事情。

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

你确定你在机器上安装了 WebKit 吗?wkhtmltopdf.exe 依赖于它。

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

于 2012-08-06T09:54:29.167 回答
1

您不应该在库周围加上引号。您可以通过以下方式捕获命令的输出:

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

2>&1UNIX 中将意味着输出将通过。1 是标准输出。2 是标准错误。希望这可以帮助。

或者在窗户里

$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 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"));
于 2012-08-06T09:57:39.813 回答