我是一名PHP开发人员,在我的一个项目中,我需要将一些HTML文档(大约30到50页)转换为PDF文档。
我的搜索结果显示可能有以下几种解决方案。它们中包括一些PHP库和一些命令行应用程序。每个库都有其自身的优缺点。
PHP库:
- fpdf(需要更多努力进行转换)
- tcpdf(需要更多努力进行转换)
- html2fpdf http://html2fpdf.sourceforge.net
- html2pdf http://html2pdf.fr/
- dompdf http://code.google.com/p/dompdf/(与其他相比效果较好)
对于每个库,我都有一些问题,例如:
- 花费时间太长(将30个HTML页面转换需要超过五分钟)
需要太多资源(内存和时间)
(我在php.ini中设置了以下参数:
max_execution_time = 600
memory_limit = 250M
但事情仍然无法解决。)
需要HTML页面格式正确(例如没有缺失的关闭标签)
所有这些都可以在我尝试转换简单的HTML文档(五页或更少,带有少量CSS)时工作。
命令行应用程序
所有命令行应用程序都可以完美地快速运行,与上述库相比较,但只有当我直接在控制台上运行它们时才有效。当我尝试使用exec()
或system()
在PHP中运行它们时,它们会给我报错。
以下是命令行应用程序及其在PHP中运行时的错误:
html2pdf (http://www.tufat.com/s_html2ps_html2pdf.htm)
html2pdf:11380): Gtk-WARNING **: 无法打开显示::0.0
未指定任何协议wkhtmltopdf
正在加载页面:10%
正在加载页面:33%
正在加载页面:100%
等待重定向
输出页面
QPainter::begin(): 返回 false
QPainter::begin(): 返回 false
QPainter::save: 画家未处于活动状态
QPainter::scale: 画家未处于活动状态
QPainter::setRenderHint: 必须使画家处于活动状态才能设置呈现提示
QPainter::setBrush: 画家未处于活动状态
QPainter::pen: 画家未处于活动状态
QPainter::setPen: 画家未处于活动状态htmltopdf (http://www.ultrashareware.com/html-to-pdf.htm)
所以我现在正在寻求帮助。有人可以回答:
哪个PHP库在我的情况下工作得很好?
为什么这些错误会在命令行应用程序中发生?