【发布时间】:2011-04-14 13:14:54
【问题描述】:
这在某种程度上已经被问过,但没有解决方案或可接受的答案,我想尝试更全面地回答我的问题,所以:
我正在尝试通过 PHP 在共享服务器(在本例中为 MediaTemple (gs))上启动并运行 WKHTMLTOPDF。根据主机的说法,这没有理由不起作用,实际上它是通过 SSH 工作的。所以...
我尝试了各种各样的东西,最基本的什么都不做,只是默默地失败:
exec("/path/to/binary/wkhtmltopdf http://www.google.com pdf1.pdf");
- Source: Question on Stack Overflow
完整的 PHP 绑定以及以下内容给了我错误,尽管我用谷歌搜索过,但我无法弄清楚:
呼叫:
$html = file_get_contents("http://www.google.com");
$pdf = new WKPDF();
$pdf->set_html($html);
$pdf->render();
$pdf->output(WKPDF::$PDF_EMBEDDED,'sample.pdf');
- Source: WKHTMLTOPDF on Google Code
错误:
Fatal error: Uncaught exception 'Exception' with message 'WKPDF didn't return
any data. <pre>Loading pages (1/6) [> ] 0% [======> ] 10% terminate called
after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc </pre>'
in /path/to/wkhtmltopdf.php:206 Stack trace: #0 /path/to/index.php(8):
WKPDF->render() #1 {main} thrown in /path/to/wkhtmltopdf.php on line 206
一旦我得到了这个(下面是一个摘录,因为我现在无法复制它):
Qt Concurrent has caught an exception thrown from a worker thread. This is not
supported, exceptions thrown in worker threads must be caught before
control returns to Qt Concurrent.
我还尝试了其他一些选项,但结果相同;没有PDF。那么我现在该怎么办,我该如何找出问题所在?我的 PHP 水平处于基础水平,但我会尽力而为。
【问题讨论】:
-
可以直接用终端创建pdf吗?
-
其实我应该更新这个但是项目被搁置了。我已经完成了这项工作,但并不完全令人满意。首先,我必须将 all HTML 源文件和依赖项放在与可执行文件相同的目录中(根本没有子目录,即使对于图像也是如此)。其次,我将 CSS 和 JS 放入 HTML 标头中。最后我在 WKHTMLTOPDF 函数中放了一个
memory_get_usage();,这显然会触发垃圾收集。前两点减少了错误的数量,第三点一起阻止了它们,现在它甚至可以完美地工作,即使 @font-face 被报告为损坏。 -
我知道这是旧的,可能不再需要你了,但你是如何在 MediaTemple (gs) 上安装 wkhtmltopdf 的?您有使用最新版本安装的经验吗?
-
我只是将它作为静态二进制文件运行——将 wkhtmltopdf 上传到服务器并通过上面的 exec 命令运行它。我仍在使用 wkhtmltopdf,包括最新版本,这些版本很好,但已经从 Media Temple 转移到实际安装了 wkhtmltopdf 的虚拟服务器设置。我发现这样更可靠。
标签: php wkhtmltopdf