我是一名PHP开发人员,在我的一个项目中,我需要将一些HTML文档(大约30到50页)转换为PDF文档。
我的搜索提出了以下可能的解决方案。其中包括一些PHP库和一些命令行应用程序。每个都有自己的优点和缺点。
PHP库:
对于每个图书馆,我都有以下问题:
需要太多资源(内存和时间)
(我在php.ini中设置了以下参数:
max_execution_time = 600
memory_limit = 250M
但事情仍然无效。)
需要格式良好的HTML页面(例如没有遗漏的关闭标签)
当我尝试转换简单的HTML文档(五个或更少的CSS,只有很少的CSS)时,所有这些工作
命令行应用
与上述库相比,所有命令行应用程序都能完美而快速地运行,但只有在我直接在控制台上运行它们时才能运行。当我尝试在PHP exec()
或system()
中使用它们时,它们会给我错误。
以下是我在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:画家不活跃
所以现在我正在寻求帮助。任何人都可以回答:
哪种PHP库在我的案例中运作良好?
为什么在命令行应用程序中会出现这些错误?
答案 0 :(得分:7)
关于 wkhtmltopdf :
这个东西非常快,它也可以处理你抛出的各种HTML / CSS,所以当你需要速度时,你应该严格考虑它。我们最近在我们公司切换到它,我们的PDF服务得到了极大的速度提升。
至少在Linux下它需要安装XOrg库 - 服务器通常没有它们,所以这可能是你的问题。
答案 1 :(得分:2)
试试这个:
答案 2 :(得分:1)
您是否尝试过Prince?
答案 3 :(得分:0)
但是,如果您将使用任何在线服务并通过HTTP发送您的HTML内容怎么办? 当然,大部分都不是免费的。
答案 4 :(得分:0)
一种可能性:自动编写脚本:
第4步很简单 - 有很多PHP / cmdline库可以让你将图像放到pdf上或转换它们(例如,fpdf。)
对于步骤1-3 ......您可以尝试查看此处的代码:http://browsershots.org/。不确定它是否相关 - 似乎需要大量的设置。也许他们的架构可以运作?
答案 5 :(得分:0)
有几个问题和建议:
答案 6 :(得分:0)
尝试使用HTMLDOC命令行工具项目https://www.msweet.org/projects.php?Z1
答案 7 :(得分:0)
有很多解决方案可以将HTML转换为PDF,我可以通过https://grabz.it向您推荐。
有一个灵活的PHP API,可以由cronjobs或直接从PHP网页使用。
如果您想尝试一下,首先应该获得app key + secret授权和development free SDK
以下是基本实现的示例。
//First init
include("GrabzItClient.class.php");
// Create the GrabzItClient class
// Replace "APPLICATION KEY", "APPLICATION SECRET" values for your account!
$grabzIt = new GrabzItClient("Application Key", "Application Secret");
// To take a PDF screenshot
$grabzIt->URLToPDF("http://www.google.com");
// To save in case public callback handler is available
$grabzIt->Save("http://www.example.com/handler.php");
// OR To save in case public callback handler is not available,
// it's a synchonous method can be usedthe will force your application to wait
// while the screenshot is created
$filepath = "images/result.jpg";
$grabzIt->SaveTo($filepath);
可以获得其他类型的屏幕截图,例如image screenshot and etc。