PDF 压缩 vs ZIP:到底谁真正减小文件大小?
把 PDF 放进 ZIP 很少能减小其体积——大多数 PDF 内部已经压缩过。PDF 压缩远比它有效。本页解释两者为何如此不同、ZIP 何时仍有用,以及如何真正缩小 PDF。
简短回答
为什么把 PDF 放进 ZIP 几乎没用
PDF 不是原始文档——它是一个容器,其内部流(页面描述、图像、字体)已经用 Flate(zlib)压缩过,这正是 ZIP 使用的同一算法。当你把 PDF 放进 ZIP,本质上是在压缩已经压缩过的数据。压缩后的数据是高熵的,几乎没有冗余可供第二轮去除。
实际上,把典型 PDF 打成 ZIP 通常只节省 0–5%。ZIP 能处理的只有几 KB 未压缩的元数据和未压缩的 PDF 头。文件的大头——已经压缩的流——原封不动地通过。
机制
PDF 如何在内部压缩
现代 PDF 通过几种独立方式压缩内容:
- Flate 流——页面内容、字体和许多对象都用 zlib 压缩包裹,与 ZIP 使用的算法相同。
- JPEG 图像——照片以已压缩的 JPEG 存储,而 JPEG 本身是有损编解码器。
- 对象流(PDF 1.5+)——许多小的结构对象被打包进一个压缩流。
- JBIG2 / CCITT——二值扫描文本使用专用编解码器,胜过通用 zlib。
因为重活已经在 PDF 内部做完,外层的 ZIP 包装几乎没什么可压缩的。关于每种机制的更多内容,见PDF 压缩解析。
替代方案
PDF 压缩实际做什么
PDF 压缩工具在容器内部工作。它用对象流重新保存 PDF,丢弃未引用的对象,并压缩交叉引用表。这些结构性改动去除了 ZIP 无法触及的真实开销,因为开销位于 PDF 自己的流内部,而非文件层级。
结果:对较旧的 PDF 做一次压缩通常节省 10–40%,而把同一文件打成 ZIP 最多节省几个百分点。你可以在真实文件上用压缩 PDF 工具试一试——它在浏览器本地运行,不上传任何东西。
例外
ZIP 仍然有用的时候
ZIP 对 PDF 并非无用——它只是不是 PDF 的体积缩减工具。ZIP 在你想做以下事情时有用:
- 把多个 PDF 打包成一个可下载文件。单一附件的便利性胜过可忽略的体积收益。
- 保留文件夹结构(例如一个章节放在子文件夹中的项目)。
- 用密码保护。ZIP 支持密码加密(较弱,但广泛支持)。PDF 通过 保护 PDF 有自己的加密,通常更强。
- 发送未压缩的 PDF(罕见)。如果 PDF 构建时没有任何内部压缩,ZIP 会有帮助——但几乎没有现代 PDF 是这样构建的。
实践
如何真正缩小 PDF
试一试
你可以做一个快速测试
拿任意一个手边的 PDF,两种都试:用压缩 PDF 压缩它,再用操作系统自带归档器把原文件打成 ZIP。比较三个体积——原始、压缩、ZIP。几乎在所有情况下,压缩后的 PDF 最小,ZIP 后的 PDF 与原始相差几个百分点,两者之间的差距就是 PDF 原本携带的结构性冗余的真实度量。
如果压缩体积和 ZIP 体积几乎相同,说明 PDF 已经优化得很好,没什么可赚。如果压缩体积小得多,说明源导出器在结构上留下了余地——每次从同一源生成新 PDF 时都值得压缩。
继续阅读