动态压缩生成的具有嵌入字体的 PDF 文件

Hel*_*hon 2 php compression pdf size-reduction

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

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

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

编辑

例子 -

文件1

文件2

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

为什么会有这种大小差异?

Dav*_*che 5

我查看了这两个文件,差异确实主要与字体有关。我保存了使用 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);
Run Code Online (Sandbox Code Playgroud)

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

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