FPDF.php 的文件大小比 TCPDF.php 小约 20 倍?为啥?

Posted

技术标签:

【中文标题】FPDF.php 的文件大小比 TCPDF.php 小约 20 倍?为啥?【英文标题】:FPDF.php is ~20 times smaller filesize than TCPDF.php? Why?FPDF.php 的文件大小比 TCPDF.php 小约 20 倍?为什么? 【发布时间】:2011-11-18 04:51:54 【问题描述】:

我知道有很多关于这两个的帖子,但我想我会解决一个明显的问题。我们的一位设计师最近向我发送了一些已绑定 TCPDF 的文件,因为他的一位朋友说它“更好”。

过去我们在 php 中使用 FPDF 生成所有 PDF,但马上我就发现了一个巨大的明显差异:

fpdf.php 文件大小:46KB

tcpdf.php 文件大小:996 KB

注意:上面的文件大小是实际的 php 文件,而不是生成的 PDF。

我真的没有太多耐心坐下来查看两者之间的所有差异,但对于巨大的文件差异似乎不值得切换。 SO 上的大多数人似乎真的很喜欢 TCPDF,但什么给了?

主要问题

为什么大小有差异?我是否应该担心我的服务器必须每天加载数百或数千次的 1MB 文件,而 50KB 的文件执行几乎相同的操作?我在这里说我的 PDF 文件更大。 PHP脚本本身的文件大小是1MB到40Kb。

【参考方案1】:

我避免使用 TCPDF,因为它的许可证不友好(您必须在生成的 PDF 文档中保持链接 + 徽标完好无损)。 (注:似乎许可已更改,现在是标准 LGPLv3:http://www.tcpdf.org/license.php)

也就是说,文件较大的通常原因是嵌入字体。您可以通过几种不同的方式指定字体:

指定它们并且不要嵌入它们(最小尺寸,但是,文本可能无法正确显示) 完全嵌入(FPDF 已经支持) 仅嵌入使用的字符部分

第一个选项 生成最小的文件——我猜这就是你在 FPDF 中使用的。请注意,您的 PDF 在不同系统上的显示可能不同。

第二个选项 生成最大的文件。由于字体在那里(理论上 - 我对此没有经验)可以编辑文件并以相同的字体添加文本。

第三个选项是在大多数情况下应该使用的选项,但是,它在库中是最难实现的,并且核心 FPDF 不支持它(但 TFPDF 支持)。它仅嵌入使用的字形,因此它生成非常小的跨平台 PDF。

几年前,TCPDF 不支持第三个选项(但是,现在可能已经改变了)。正如我所提到的,核心 FPDF 也不支持它 - 但是,它在 MPDF 和 TFPDF 中受支持(我已在许多项目中成功使用)。

另一方面,我不使用 TCPDF 的另一个原因是先生的不友好和无助的态度。 Asani(开发人员)与 FPDF 论坛上的 FPDF / MPDF / TFPDF 社区(Oliver,Ian,...)帮助对比。在他承认TCPDF不支持部分字体嵌入之前,花了2周的时间在论坛上通信。但是,对我来说,真正破坏交易的是许可证。

所以,回答您的问题:您可以通过不嵌入字体使 TCPDF 生成更小的文件。但是,许可证应该是切换它的主要原因。 :)

【讨论】:

感谢您非常有帮助的回复。然而,我所指的文件大小在实际的 php 文件中(fpdf.php 和 tcpdf.php)。这两个文件的实际区别是什么才能产生如此巨大的差异? 我刚刚阅读了 TCPDF 的许可证,它是 GNU LGPL。你能告诉我他们在我的 PDF 中提到他们的徽标的部分吗? @JM4:哎呀,对不起,误读了这个问题。正如 Einacio 所说,差异可能是因为增加了功能。但是,您不应仅根据文件大小来判断库。如果它没有加载,你就不会太在意了。 @Einacio: tcpdf.org/license.php 说:“此外,您不能从生成的 PDF 文档中删除任何 TCPDF 版权声明或链接。” 据我发现,它只是 pdf 属性中的“生产者”字段,其中包含一个 url。但我没有找到任何标志或图像。它不会影响我当前对图书馆的使用,但我会记住它以备不时之需,谢谢。我稍后会检查我是否可以根据 gpl 的条款修改库本身,因此该字段永远不会进入 pdf,所以我不会通过从最终文档中删除它来侵犯它【参考方案2】:

我花了一点时间比较了这两个来源。

fpdf 几乎没有 cmets。

tcpdf 有更多方法,但也有完整的类似 phpDoc 的 cmets 块,在每个方法和属性之前以 html 格式解释每个参数和用法以及示例。我会说这是大文件大小的主要原因。

【讨论】:

我应该担心我的服务器每天要加载 1MB 文件而不是 50KB 文件吗? 据我了解 gpl(许可证),只要您保留有关许可证的内容,您就可以删除所有这些 cmets。那么你将有一个 50k 的 tcpdf。您还可以使用一些操作码缓存,例如 memcache,以避免重复编译,即使在 50k 文件上也是如此。但一般来说这应该不是问题,除非在对服务器的每个请求中都加载了它。【参考方案3】:

请注意,TCPDF 许可证上的“您不能从生成的 PDF 文档中删除任何 TCPDF 版权通知或链接”这句话仅指不可见的链接(元数据),而不是标题徽标和出现在默认示例。 这意味着使用 TCPDF 生成的文档不包含任何干扰文档布局的可见伪影。

然后,为了回答您的问题,文档大小取决于您使用的 FPDF 中不存在的新功能。如果您不需要某些功能并且想减小文档大小,请禁用 Unicode,仅使用 helvetica 等核心字体,并在http://www.tcpdf.org 网站上应用其他提示。

【讨论】:

我不是在谈论文档大小——它是 php 文件的大小【参考方案4】:

TCPPDF 包含比 FPDF 更多的数百个功能,这就是它更大(更好)的原因。 与 TCPDF 是什么以及它能做什么相比,FPDF 是一个非常原始的库。

【讨论】:

"X 比 Y 好" - 这是一个虚假的陈述,并且没有接近指出 1 megabyte php 文件比使用40 千字节 文件。谁在乎 TCPDF 是否可以在一个脚本中完成所有操作而无需添加新类?我还没有找到任何我在 FPDF 中做不到或我自己无法轻松扩展到 FPDF 的 TCPDF 可以做的事情。

以上是关于FPDF.php 的文件大小比 TCPDF.php 小约 20 倍?为啥?的主要内容,如果未能解决你的问题,请参考以下文章

TCPDF说明文档

在 FPDF 中显示值

如何使用 PHP MySQL 创建 PDF 文件?

TCPDF微软雅黑字体

使用 FPDF 通过 PHP 发送 PDF 附件

PHP使用FPDF pdf添加水印中文乱码问题