我有一个HTML(而不是XHTML)文档,可以在Firefox3和IE7中显示良好。它使用相当基本的CSS来设置样式,并在HTML中呈现良好的效果。

我现在正在寻找一种将其转换为PDF的方法。我尝试过:

DOMPDF:它在表格方面存在巨大问题。我分解了我的大型嵌套表,这有助于(之前它只消耗了128M的内存,然后就死了——这是我在php.ini中的内存限制),但它把表弄得一团糟,而且似乎没有图像。这些表格只是一些基本的东西,带有一些边框样式,可以在各个点添加一些线条;HTML2PDF和HTML2PS:实际上我在这方面运气更好。它呈现了一些图像(所有图像都是Google Chart URL),表格格式要好得多,但它似乎有一些复杂性问题,我还没有弄清楚,并且一直因未知的node_type()错误而死亡。不知道从这里去哪里;和Htmldoc:这在基本的HTML上似乎很好,但几乎不支持CSS,所以你必须用HTML做所有的事情(我没有意识到在Htmldoc领域还是2001年…),所以这对我来说是无用的。

我尝试了一个名为Html2Pdf Pilot的Windows应用程序,它确实做得很好,但我需要至少在Linux上运行,最好通过Web服务器上的PHP按需运行的应用程序。

我缺少什么,或者如何解决这个问题?


当前回答

TCPDF工作正常,无依赖性,是免费的,并不断修正错误。如果提供的HTML/CSS内容格式良好,则速度合理。我通常从50-300kB的HTML输入(包括CSS)生成,并在1-3秒内获得10-15个PDF页面的PDF输出。

我强烈建议在将任何内容发送到TCPDF之前,使用整洁的库作为HTML漂亮的格式化程序。

其他回答

我已经为PHP尝试了很多不同的库。我尝试过的所有列表。在我看来,TCPDF库是最佳的性能/可用性折衷方案。它的安装和使用非常简单,在中小型应用中也具有良好的性能。如果您需要高性能和非常大的PDF文档,请使用Zend_PDF模块,但要做好编码的准备!

也许您可以在将文件交给转换器之前尝试使用Tidy。如果其中一个渲染器遇到HTML问题(如未关闭的标记),可能会有所帮助。

就成本而言,在许多情况下,使用web服务(API)可能是更明智的方法。此外,通过外包这一过程,您可以减轻自己的基础设施/后端负担,并且-如果您使用的是信誉良好的服务-确保与调整web标准、正常运行时间、短处理时间和快速内容交付的兼容性。

我已经对目前市场上的大多数web服务进行了一些研究,请在下面找到我认为值得在这个线程中提及的API,按照价格/价值比的顺序排列。所有这些都提供预先编写的PHP类和包。

pdflayer.com-成本:$-质量:☆☆☆☆docraptor.com-成本:$$-质量:☆☆☆☆☆pdfcrowd.com-成本:$$-质量:☆☆☆

质量:

DocRaptor以高质量的引擎PrinceML为主干,显然提供了最佳的PDF质量,返回了经过高度抛光和良好转换的PDF文档。然而,pdflayer API服务在这里非常接近。Pdfcrowd不一定以质量得分,而是以处理速度得分。

成本:

pdflayer.com-如上所述,这里最具成本效益的选择是pdflaye.com,它提供100个月PDF的完全免费订阅计划,以及9.99美元至119.99美元不等的溢价订阅。每月10000份PDF文档的价格为39.99美元。

docraptor.com-提供7天免费试用期。高级订阅计划从15美元到2250美元不等。每月10000份PDF文档的价格约为300.00美元。

pdfcrowd.com-免费提供100个PDF。高级订阅计划从9美元到89美元不等。每月10000份PDF文档的价格约为49.00美元。

我已经使用了这三种方法,这段文字应该可以帮助任何人做出决定,而无需支付所有费用。本文并非为任何一种产品背书,我与任何产品都没有关联。

Darryl Hein在上面提到TCPDF可能是一个好主意。Nicola Asuni的代码非常方便和强大。唯一的杀手是,如果你计划将PDF文件与生成的PDF合并,那么它就没有这些功能。您必须创建PDF,然后使用Sid Steward的PDFTK(www.pdflabs.com/tools/PDFTK the PDF toolkit/)进行合并。

HTML到PDF的转换真的需要使用PHP在服务器端进行吗?

我刚刚遇到了jsPDF,一个使用HTML5/JavaScript的客户端解决方案。MIT授权代码也在GitHub上。