哪个是最好的用于PHP的PDF-API?

116

6
这个其他问题现在似乎已经从StackOverflow上移除了。 - rineez
我知道这是一个老问题,但我更喜欢使用MDF,它可以处理任何复杂的HTML,除了一些在http://www.mpdf1.com/mpdf/limitations中已经说明的点。 - dev.meghraj
在这里,您可以看到mPDF和TCPDF之间的良好比较 - Peyman Mohamadpour
9个回答

55

个人而言,我更倾向于选择TCPDF,这是FPDF的增强和维护版本。


14
你没有具体说明原因,其中一个巨大的原因是tcpdf支持Unicode,而fpdf完全缺乏这方面的支持。tcpdf仍在积极维护,并且它还具有良好的面向对象结构。智者之言:fpdf基本上是被tcpdf取代的旧东西。 - zanlok
2
tcpdf缺少关键功能,如字体嵌入和子集化(对亚洲语言很重要)。 - velcrow
2
我刚刚查看了TCPDF网站,它似乎支持字体子集和嵌入。请参见SetFont方法的subset参数http://www.tcpdf.org/fonts.php - Abbas Gadhia
1
使用乌尔都语Unicode字体时,tcpdf存在一些问题。 - rineez
2
如果你认为一个有着24k行代码的单一类是“不错的面向对象编程”,那么你可能是在开玩笑。请查看我重构后的FPDF实现真正的面向对象编程:https://github.com/bubach/PdfBuilder - Christoffer Bubach

42

mpdf网站: "mPDF是一个基于UTF-8编码的HTML生成PDF文件的PHP类。它基于FPDF和HTML2FPDF,具有许多增强功能。"

mpdf在语言处理和UTF-8支持方面优于FPDF。对于CJK支持,它不仅支持字体嵌入,还支持字体子集化(使您的CJK PDF不会过大)。 TCPDF和FPDF在UTF-8和字体支持方面都无法与mpdf相比。自版本5.0起,它甚至带有一些开源字体。


1
我现在使用mPDF已经很多年了,但是我发现它的性能很慢(但是没有比较来说它是否比竞争对手差)。我通常与PDFMerger一起使用,尝试在合并之前只生成小型PDF,但自从升级到php8.2后,这成为了一个问题。另外,需要注意的是mpdf主页上的评论:整个mPDF软件相对来说有些过时了。现在有更好的替代品可供选择....如果你正在寻找先进的CSS支持,将现有的HTML页面转换为PDF,请使用无头Chrome。 - undefined

32

这只是对比fPDF与tcPDF在基本功能上的性能表现的快速回顾。

速度测试

fPDF使用17.0366秒处理2000个PDF文件|| tcPDF使用79.5982秒处理2000个PDF文件

文件大小检查(以字节为单位)

fPDF 788 || tcPDF 1,860

所使用的代码尽可能相同,并生成一个没有文本的干净PDF文件。这也使用了截至2011年6月22日的每个库的最新版本。


5
有许多性能提升方法可以大幅提高TCPDF速度(我从创建单个文件的1分钟到约0.5秒):http://www.tcpdf.org/performances.php - Dan Smart
2
这些“增强功能”在FPDF上同样有效,但并不会真正有助于基准测试。TCPDF大约有24,000行代码,而FPDF只有2400行代码。 - Christoffer Bubach
更新 @DanSmart 的链接:https://tcpdf.org/docs/performances/ - Bird87 ZA

23

我发现在html渲染方面,mpdf比tcpdf更好。 它可以更好地解析css样式,并创建看起来非常类似于原始html的pdf。

mpdf甚至支持如圆角边框和渐变等css属性。

当涉及到html转pdf时,我很惊讶为什么人们很少谈论mpdf。

请在这里查看示例http://www.mpdf1.com/mpdf/index.php?page=Examples

我发现它对设计发票、收据和简单打印等很有用。 然而,该网站本身表示,从mpdf生成的pdf文件大小会更大。


3
链接已经失效。这可能是新的链接: http://www.mpdf1.com/mpdf/index.php?page=Examples - Stefan
2019年8月更新:请参考此链接 https://mpdf.github.io/ - CodeJunkie
mpdf不幸的是似乎无法很好地处理大型表格单元格。一旦内容超过一页,它就开始缩小,这使得它对于具有大型表格的任何项目都没有用处。除此之外,它易于使用,性能良好,并且文档齐全。 - zumek
mpdf 在使用硬件防火墙时导入 CSS 文件也非常缓慢,每个 CSS 文件需要大约 10 到 20 秒的时间。这是无法接受的。 - Vincent

13

在Firefox中有时会出现连接重置的问题。不过还没有检查其他浏览器。 - kta

11

个人而言,我更喜欢使用dompdf来创建简单的PDF页面,因为它非常快速。你只需提供HTML源代码即可生成所需的页面。

然而,对于更复杂的设计,我更喜欢经典的pdflib,它作为PHP的一个pecl扩展程序可用。它可以更好地控制设计,并允许您创建像像素完美表单这样更复杂的设计。


1
但是使用dompdf的缺点是,如果您想要同时创建多个PDF或在循环中创建PDF,则无法正常工作。 - hmjha

5

http://sourceforge.net/projects/html2ps/是最好的选择,如果您需要CSS和3C兼容性。

如果您可以在服务器上安装软件,我建议您使用http://wkhtmltopdf.org/

还有一个使用wkhtmltopdf的Drupal模块 :)

PHP占用很多资源来将HTML转换为PDF,我认为PHP不是做这件事情的正确语言(如果您期望进行大量的转换或者转换大文件)。


我为wkhtmltopdf点赞,但特别是在使用像雇用外部转换器这样的方法时,PHP不应该受到速度损失的指责。我认为使用来自asp.net的wkhtmltopdf或prince几乎与从PHP相同的速度(尽管我使用asp.net)。当然,PHP没有所有的.net进程控制,但我敢打赌它仍然足够快以适应大多数项目。 - Joel Peltonen

4
Zend框架的Zend_Pdf非常好。它在输出控制和复杂性方面与pdflib不相上下,并且由于它是纯php解决方案,因此更加便携。尽管如此,它比pdflib更慢并且使用更多内存。 Pecl模块始终比php解决方案更有效。 DOMPdf是快速制作pdf的最简单方法。像Mike说的那样,将html提供给它,然后输出pdf。在其底层,它有使用r&ospdfpdflib作为渲染引擎的选项。

1
Zend PDF在嵌入具有透明度的PNG时存在严重的性能问题。此外,Zend PDF对于更改第三方PDF文件的元数据来说是一个非常糟糕的工具,因为它无法处理接近完整PDF标准的任何内容,并且会导致崩溃。然而,如果您不需要这些功能,Zend PDF的工作效果还是相当不错的,并且具有良好的UTF-8支持。 - chrishiestand

3

我个人使用PHP生成XSL:FO,并使用Apache FOP将其转换为PDF。虽然不是PHP本地解决方案,效率也不是很高,但即使需要生成非常复杂的布局,它仍然可以很好地工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接