php - 如何从 PHP 执行 WKHTMLTOPDF?

标签 php windows wkhtmltopdf

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

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

最佳答案

你不应该将引号放在库周围。你可以通过这种方式捕获命令的输出:

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

UNIX 中的 2>&1 表示输出将通过。 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 Tue Feb 14 11:11:04 UTC 2006 x86_64 x86_64 x86_64 GNU/Linux

x86_64 建议您运行的是 64 位 CPU,如果是这种情况,请下载 amd64 版本的二进制文件,否则请下载 i386 版本。两者都可以从这个 url 中得到: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"));

关于php - 如何从 PHP 执行 WKHTMLTOPDF?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11825776/

相关文章:

找不到 Lambda wkhtmltopdf 命令

ruby-on-rails - 使用 Wicked_PDF gem 在 Rails 中生成 PDF 时的高 CPU 使用率

php - 在smarty中执行多维sql代码

php - 使用 HTML 表单将数据插入 MySQL 表

javascript - 这个循环只允许我为各种问题选择一个选项,尽管它们都有不同的选项

windows - 为可移植 git 配置移动目录

windows - 如何在 Mac 上运行 Jmeter 窗口脚本

windows - 如何使用 DOS 命令以编程方式将存档解压缩到 Windows 上自己的目录中?

javascript - 如何更改 AmChart 图表的描边宽度属性?

php - cakephp 显示来自两个具有关系的不同表的 ID 显示 table.name