1

我们有一个应用程序生成带有嵌入 NMSYS 字体的动态 PDF 文件。

但是与具有较大数据然后动态生成具有相同字体的原始文件相比,它的大小非常大。

是否可以使用 php 任何脚本、API 或扩展来减小此类 PDF 的大小?为什么较大内容和相同字体的源PDF(不是由脚本生成)的大小较小?

编辑

例子 -

文件 1

文件 2

文件 -1 是由我们的脚本生成的,它基本上显示了文件 2 中的一条信息。文件 -1 中只有 5 页,大小为 1.2 MB,文件 2 有 158 页类似的信息,但大小约为 4MB。

为什么会有这种尺寸差异?

4

2 回答 2

4

我查看了这两个文件,差异确实主要与字体有关。我保存了用 Adob​​e Acrobat XI 优化的两个文件——这(可以做)做了很多优化,但最重要的区别(对于文件 1)来自字体子集:

文件 1:前 1.2 MB / 后 253 KB 文件 2:前 4.7 MB / 后 3.7 MB

您的文件 2 是使用 FrameMaker 创建的,它通常会生成非常干净的 PDF(即使在这种情况下使用了非常旧的 Adob​​e Acrobat Distiller 版本),您的文件 1 是由 DomPDF 生成的,显然没有嵌入字体的子集。

如果您从 Acrobat 中查看第一个文件的空间审计报告:

在此处输入图像描述

您可以看到字体占据了文件中接近 96% 的空间。因此,对这个文件中使用的字体进行子集化基本上是您缩小它的唯一选择。

不同的库或应用程序有不同的选项来启用子集。专门针对 DOMPDF 使用选项 DOMPDF_ENABLE_FONTSUBSETTING 在它创建的 PDF 文件中启用字体子集:

def("DOMPDF_ENABLE_FONTSUBSETTING", true);

然后,这只会嵌入 PDF 文件中实际使用的那些字符,通常(取决于文本量和实际字体)会创建更小的文件。

(从评论中添加了DOMPDF解决方案,使答案更完整)

于 2013-08-01T08:36:27.540 回答
2

文件 1 使用 TrueType DejaVuSans 系列字体,它们不是子集。它们占用了大约 950kb 的 PDF 文件。其余的是图像、PDF 结构等
。文件 2 使用 TrueType Helvetica 字体,它们是子集。它们占用的空间要少得多。因为所有页面上的所有文本都使用几乎相同的字符,所以最终字体大小非常小。

于 2013-08-01T07:59:05.153 回答