12

我正在尝试设置漂亮的 HTML 到图像插件,称为 wkhtmltopdf,但我遇到了非常困难的时间。

到目前为止我做了什么:

  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 赏金,任何人都可以提出一个清晰、简化的分步工作指南,说明如何在 Widows 上设置 wkhtmltopdf 以使用 PHP 运行。

更具体地说,我正在寻找有关如何:

  • 使用 php 设置 wkhtmltopdf 在 Windows 上运行(包括常见问题的详细信息以及如何克服这些问题)。

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

  • 创建 .pdf 的下载链接,onClick 与上述创建和打印到 pdf 的相同功能(包括此部分的示例代码)。

4

2 回答 2

10

很难弄清楚这里的实际问题是什么,但我做了一篇关于让 wkhtmltopdf 在 Windows 7 / PHP Environment 中响应的博文教程。询问您是否需要更多详细信息 - 我确信这不包括您的问题。

就像我在评论中所说的那样,您的函数调用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 所做的所有不同的输入/输出。

于 2012-12-16T15:53:08.693 回答
10

我意识到这是一个老问题,但由于它是我发现的唯一一个可以从 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 服务器内的 invoices 文件夹中。为此,您将启动 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 中双击它或通过任务计划程序运行它。

于 2014-03-09T04:57:43.917 回答