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

时间:2013-07-31 13:29:03

标签: php pdf compression size-reduction

我们有一个apllication生成带有嵌入式NMSYS字体的动态PDF文件。

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

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

修改

示例 -

file 1

file 2

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

为什么会出现这种尺寸差异?

2 个答案:

答案 0 :(得分:4)

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

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

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

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

enter image description here

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

不同的库或应用程序具有不同的选项来启用子集。特别是对于DOMPDF,使用选项DOMPDF_ENABLE_FONTSUBSETTING在它创建的PDF文件中启用字体子集:

def("DOMPDF_ENABLE_FONTSUBSETTING", true);

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

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

答案 1 :(得分:2)

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