在Windows上使用wkhtmltopdf

12

我正在尝试设置名为wkhtmltopdf的实用的HTML转图片插件,但遇到了很大的困难。

目前已经做了什么:

  1. 下载了wkhtmltopdf zip包并解压到我的网站根目录下

  2. 作为一个测试,我在index.php文件中加入以下代码,期望将bbc.com网站的内容保存为.jpg图像文件,并保存在我的网站根目录下: ..

    shell_exec('./wkhtmltopdf --quality 50 http://www.bbc.com bbc.jpg');

然而没有任何反应。PHP没有运行在安全模式下,因此这不是问题。shell_exec在执行,我使用它创建了一个.txt文档。

我已经研究了几天,我将支付100美元的奖金给任何能够提供一个清晰、简化、分步工作指南的人,以便在Windows上使用PHP运行wkhtmltopdf。

更具体地说,我正在寻找一个简化的步骤说明,说明如何执行以下操作:

  • 设置wkhtmltopdf以使用php在Windows上运行(包括常见问题的详细信息和如何解决它们)。

  • 在单击按钮或链接时:将“当前”网页打印为pdf格式,包括所有填写的input值(包括此部分的示例代码)。页面上更改内容的事件应该打印出页面的当前版本,而不是页面的初始状态。

  • 创建一个下载链接,用于下载创建的.pdf文件,单击与上述创建和打印pdf的功能相同的函数(包括此部分的示例代码)。


当您在PHP之外的命令行上调用程序时会发生什么?它能正常工作吗? - Charles
我正在Windows上的php脚本中运行linux命令,因此我不确定/如何能够直接从命令行运行它。 - AnchovyLegend
进入服务器并尝试一下,然后呢?你可能需要与主机联系以确定他们是否支持SSH。他们可能也有一个简短的教程来说明如何进行操作。很有可能这只是一些简单的问题,比如权限不足,但最好还是在服务器的命令行上找到答案。 - Charles
请在 PHP 中打开错误报告。请确认您已将错误报告设置为 E_ALL 或更高。 - Janus Troelsen
如果这些是您真正的要求,那么wkhtmltopdf并不适合 - 我也不知道有哪个系统支持这样的东西。这是一个庞大的项目,可能也可以使用wkhtmltopdf,但需要完整的repo访问权限进行数周的编码。所有代码示例都将取决于您独特的页面结构。例如,“应该打印出当前页面的版本”在如何实现方面差异巨大,比如您是否使用Backbone.js或其他视图,以及是否支持视图状态链接等。也许可以尝试PhantomJS或html2canvas。 - Joel Peltonen
显示剩余6条评论
2个回答

11

我知道这是一个旧问题,但是因为这是我找到的唯一一个可以从HTML打印到PDF并保留图像和背景颜色的库,所以我使用Windows命令提示符。我以前使用PDF Architect,但它从来没有能够处理背景颜色。

当您安装wkhtmltopdf时,它将安装在c:\ Program Files \ wkhtmltopdf \或c:\ Program Files(x86)\ wkhtmltopdf中。

假设您有一个本地PHP环境,其中http://localhost/设置为起始点。还假设您有一个名为html_invoice.html的文件,并希望将其打印到名为dev_invoice_200.pdf的文件中,并将其放在xampp web服务器内的发票文件夹中。要做到这一点,您需要启动Windows命令提示符(即开始->所有程序->附件->命令提示符或开始->运行->cmd),然后键入:

c:\Program Files\wkhtmltopdf\bin\wkhtmltopdf http://localhost/html_invoice.html c:\xampp\htdocs\invoices\dev_invoice_200.pdf

这将在正确的位置创建PDF文件。

由于我们使用的是Windows命令提示符,所以没有理由使用PHP。相反,我们可以使用批处理文件,如果我们需要自动化它,我们可以使用Windows任务计划程序调用批处理文件(开始->所有程序->附件->系统工具->任务计划程序)。

如果你从未使用过批处理文件,只需将要执行的命令键入纯文本文件中,并将其保存为 .bat 扩展名即可。

假设我们想始终在发票文件夹中的同一位置打印html_invoice.html文件,并将其命名为dev_invoice.pdf,然后在到达目标位置后更改名称。您只需将上面的行,去掉“_200”,放入文本文件中并将其保存为 .bat,然后在 Windows 中双击它或通过任务计划程序运行即可。


10

这里的实际问题有点难以理解,但我写了一篇博客教程,讲解如何在Windows 7 / PHP环境下使用wkhtmltopdf。如果需要更多细节,请随时提问 - 我相信这篇教程并不涵盖所有问题。

正如我在评论中所说,你的函数调用shell_exec('./wkhtmltopdf --quality 50 http://www.bbc.com bbc.jpg');会失败,因为wkhtmltopdf和wkhtmltoimage是不同的程序,并且接受不同的命令行选项。将wkhtmltopdf替换为wkhtmltoimage,并执行这个命令,可能会生成一个输出文件。我认为在你的情况下,像这样的测试执行shell_exec('c:\wkhtmltopdf\wkhtmltopdf www.google.com goog.pdf 2>> err3.txt 1>> out3.txt');会更有意思,因为你可以看到wkhtmltopdf执行的所有不同的输入/输出。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接