压缩去掉的是冗余,不是内容

PDF 把页面存成绘图指令:带着字体的文字段、指定分辨率的图像、矢量路径,以及一棵结构树。压缩能去掉三类冗余——以远高于显示所需的分辨率保存的图片、只用到几个字形却整族嵌入的字体、以及编辑之后不再被任何对象引用的残留数据。

它去不掉的是内容。如果每一页都是 600 dpi 的扫描照片,唯一能让文件变小的办法就是丢掉像素——那是一个画质决定,不是一次优化。

输出变大的三种情况

结果比原文件大,几乎总是下面之一:

  • 文件本来就已经优化过。对一份字体已做子集、图片已降采样的文件再跑一遍,只能重新编码;把 JPEG 用相近的画质再编码一次,只会变大,不会多出细节。
  • 原文件是 JPEG 存储的扫描件,而压缩工具把它转成了无损格式或重新封装。无损按定义就是更大。
  • 输出时做了线性化、签名或加密。对象流、签名字典和增量更新各自都会增加字节,而这些字节和页面内容无关。

那应该怎么做

有用的问题不是「怎么压缩这个文件」,而是「空间被什么占着」。动手调参数之前,两个事实就能把范围缩小:

  • 试着在页面上选中文字。能选中,说明有文字层,体积在字体和图片上,不在页面扫描上。
  • 拿文件大小除以页数。文字型文档通常每页几十 KB;扫描件每页几百 KB 到几 MB。
  • 如果是扫描件,降低分辨率;内容允许的话再转灰度。占空间的 MB 就在这儿。
  • 如果每页本来就不大,就别动它。把 300 KB 的文字型 PDF 再压一遍,很少能低于 250 KB,还经常更大。

关于「压到指定大小」

有些工具提供目标大小——「压到 2 MB」。这是另一种操作:工具不断降低图片分辨率和画质,直到估算值符合目标,哪怕页面已经看不清也会继续压。如果某个表单有硬性上传上限,它管用;如果你只是想要更小的文件,固定画质是更稳的选择。