PDF压缩库/工具

时间:2014-01-24 19:42:40

标签: pdf compression pdf-conversion

我正在开发一个项目来缩小PDF的大小,压缩它们。我想知道市场上有什么好的工具/库(.NET)非常好。 我尝试过一些像Onstream Compression这样的工具,但结果并不令人满意。

4 个答案:

答案 0 :(得分:5)

一些额外的(兆字节)字节很容易被挤出PDF。例如,一个众所周知的“PDF32000_2008.pdf”足够优化?文件大小为8,995,189个字节。它使用对象和外部参照流,(几乎)没有图像,一切都紧凑。或者不是吗?

查看页面词典:

Dict:9 [1 0 R]
.   /Annots Array:3
.   /Contents Stream:3 [2 0 R]
.   /CropBox Array:4
.   /MediaBox Array:4
.   /Parent Dict:4 [124248 0 R]
.   /Resources Dict:4
.   /Rotate 0 (Number)
.   /StructParents 2 (Number)
.   /Type Page (Name)

Rotate 0是默认值,为什么会出现?什么是CropBox?默认为MediaBox,此文档中没有CropBoxMediaBox以外的页面。为什么MediaBox在那里?它是可继承的,所有页面都是相同的大小,所以将它移动到Pages树根!有756页,即冗余(或无用)信息复制756次。

查看典型的注释字典:

Dict:6 [3548 0 R]
.   /A Dict:2
.   .   /S URI (Name)
.   .   /URI http://www.iso.org/iso/iso_catalogue/... (String)
.   /Border Array:3
.   .   [0] 0 (Number)
.   .   [1] 0 (Number)
.   .   [2] 0 (Number)
.   /Rect Array:4
.   .   [0] 82.14 (Number)
.   .   [1] 576.8 (Number)
.   .   [2] 137.1 (Number)
.   .   [3] 587.18 (Number)
.   /StructParent 3 (Number)
.   /Subtype Link (Name)
.   /Type Annot (Name)

本文档中有数千个(可能> 10'000?)链接注释。 /Type密钥是可选的,为什么会出现?它们是不可见的矩形,你认为除了整点数之外它们的位置精度是否相关?将其舍入为整数。

查看典型页面内容流的片段,显示运算符的文本:

[(w)7(ed)-6( b)21(u)1(t shal)-6(l no)-6(t b)-6(e)1( ed)-6(ite)-6(d)1( un)-6(less the typef)23(aces wh)-6(ich )]TJ

小于某个值的字距小数几乎是不可见的。这个可能会有争议,它就像JPEG压缩质量水平 - 一些人可以接受,其他人不同意。我认为非常保守的估计(即保留最高质量),对一般人来说是不可见的,可以省略绝对值小于10的字距。 (当然,必须注意保持理由)。 (我甚至没有提到有小数字距的文件,精度为3-6位小数!但不在此文件中)

并且,通过上面提到的优化,文件大小变为7,982,478个字节。削弱了一兆字节。并且它肯定不是限制,可能还有其他的,更好地隐藏,优化的来源。

答案 1 :(得分:3)

要为已经很好的答案添加更多注释,有一系列应用程序/库可以减少PDF文件的文件大小。第一个问题,与@ Jongware的答案一致,是否可以开始做任何事情。

如果您的PDF文件来自任何地方(您无法控制源),请收集文件样本并确定您对生成的PDF的要求。例如,如果您只想在屏幕上显示它们,则可以选择将图像重新取样到更低的分辨率(请注意,这不再是移动用途的必要条件)。如果PDF都是内部的,那么您可以更轻松地使用它,因为您可以检查它们并查看可以保存的位置。

使用Adobe Acrobat的“空间审核”功能。 Adobe似乎对隐藏这个漂亮的工具并在Acrobat版本之间移动它感到满意,但是在Acrobat Pro XI中可以通过打开PDF文件然后选择“文件>另存为>优化的PDF ...”来找到它... “(不像你想的那样”缩小尺寸PDF“)。在显示的对话框窗口中,有一个“审计空间使用”按钮,该按钮将显示一个信息窗口,显示PDF中正在使用的空间元素数量。

根据你在那里找到的东西,你可以做很多事情,大多数已经提到但是这里有一个不完整的清单:

  • 下采样图片。
  • 将图像的色彩空间从CMYK更改为RGB。要谨慎,因为它会a)不提供你可能想到的空间节省(因为压缩)和b)如果你运气不好(因为索引和其他整洁的图像技巧)可能会适得其反。
  • 删除文档和对象级元数据(杂志页面文件的一些示例集我包含的元数据多于实际内容)。
  • 删除专有应用程序数据(如果您不小心,Illustrator有将整个Illustrator文档嵌入PDF文件的恶习)。
  • 如果您确定所有正在使用的读者都能够处理它,请压缩对象流和XRef表。
  • 如果您的目标读者会处理(JBIG2,JPEG2000 ...)
  • ,请使用最佳压缩
  • 优化文件结构(一些不良的PDF文件不会优化字体和其他对象,并且会在整个文件中分散多个副本)。
  • 子集文档中的所有字体。
  • 如果不需要,请删除ICC配置文件。

如果您想执行这些任务,有许多工具可以提供帮助。这些库可以让您自己实现,也可以使用商业(可能还有其他)工具,这些工具可以通过命令行使用预定义的操作。 callas pdfToolbox是这些工具之一(我连接到这家公司!),Enfocus PitStop在这个领域有功能,Apago也有这里的功能(虽然我不确定他们有我的顶级命令行版本头)。

答案 2 :(得分:1)

@Jongware是对的。您不太可能显着减少正确创建的 PDF文件的大小。

但可以更好地压缩野外中的许多PDF 。这是因为许多PDF不使用在较新版本的PDF规范中引入的对象和交叉引用流。此外,PDF通常包含可以安全删除的未使用对象。是的,PDF中的图像可以调整大小/重新压缩,以进一步减小PDF的大小。

如果你对商业解决方案没问题,那么你可能会对我对类似问题的回答感兴趣。答案包含使用Docotic.Pdf库显示how to compress PDFs的代码(我是该库的开发人员之一)。

答案 3 :(得分:0)

有一个PDFBeads Ruby宝石。

它与带有DevKit的RubyInstaller 2.3.3 32位一起使用。 (更高版本需要不必要的大MSYS2 DevKit。)

对于Windows,这些程序是必需的:

iconv gem需要单独安装

62, 90, 106

(适用于简单,短路径)