PDF 压缩的两种做法,差在有没有理解页面结构
PDF 压缩有两种做法,产物完全不是一回事。一种压完你还能选中文字、点得开链接;另一种压完只剩一沓图片,体积是小了,文档也废了一半。区别不在压缩参数,在它有没有真的去理解页面结构。
两条路径,产物完全不同
第一条:整页栅格化。 把每一页渲染成一张图片,再把这些图片打包成新的 PDF。实现简单,体积降得也猛。代价是文字层、矢量图形、超链接、书签全部消失——你拿到的是一本图册,不再是文档。搜不到字就是这么来的。
第二条:只动内嵌位图。 解析 PDF 结构,找出真正撑体积的那些图(扫描页、照片、截图),逐张重新编码,页面尺寸、文字、矢量、链接原样不动。
一份 PDF 里,文字和矢量本身很小,字体通常几十到几百 KB,真正把文件撑到几兆几十兆的几乎总是内嵌位图。所以第二条路径能拿到的压缩空间,跟第一条差不了多少,但文档还是文档。
关键判断:这张图到底该不该缩
不是所有内嵌图都需要降采样。判断依据是有效 DPI——图片的像素数,除以它在页面上实际占的物理尺寸。
同一张 2400 像素宽的图,铺满整页和缩成一个角标,需要的分辨率完全不同。前者降下去会糊,后者留着纯属浪费。
我拿那份 4 页图文报告实测,工具报出来的原图有效 DPI 是 359×452。
注意这是两个数:横向 359、纵向 452。图片放进页面时可能被非等比缩放,横纵方向的有效 DPI 因此不一样。只按一个方向判断,要么缩过头、要么白留像素。

四档实测
同一份文件跑四个档位,横纵有效 DPI 都是 359×452,差别在降采样的目标:
| 档位 | 结果体积 | 降幅 | 内嵌图重编码 | 降采样到 | 质量 |
|---|---|---|---|---|---|
| 屏幕 / 邮件 72 dpi | 98 KB | −98.7% | 4/4 张 | 481×255 | q82 |
| 电子书 150 dpi | 560 KB | −92.5% | 4/4 张 | 1003×531 | q88 |
| 打印 300 dpi | 3.08 MB | −57.7% | 4/4 张 | 2400×1062 | q92 |
| 无损结构 | 7.27 MB | −0.1% | 0/4 张 | 不动像素 | — |
无损结构那档最能说明问题:一张图都没重编码,体积几乎没变,但它仍然清理了 4 项未使用资源、重压并合并了 4 条结构流。这说明「结构优化」和「图片降采样」是两件独立的事——前者永远无损,后者才是体积大头。

每张图的处理决策也是分别做的,不是一刀切。工具会给出每张图的原始体积、重编码后体积、有效 DPI 和最终质量参数。
压完到底有没有被压坏
这是我最关心的一步。光看体积降了多少没意义,得验证文档语义还在不在。
三个档位的产物,逐个用 PDF 解析库回读:
| 原文件 | 72 dpi | 150 dpi | 300 dpi | |
|---|---|---|---|---|
| 页数 | 4 | 4 ✓ | 4 ✓ | 4 ✓ |
| 可提取文字 | 2723 字符 | 2723 ✓ | 2723 ✓ | 2723 ✓ |
| 链接注解 | 4 个 | 4 ✓ | 4 ✓ | 4 ✓ |
| 页面框 | 595.3×841.9 | 一致 ✓ | 一致 ✓ | 一致 ✓ |
压到只剩原来 1.3% 体积的那一档,文字一个字符都没少,链接全部存活,页面框分毫不差。
顺带一提,处理流程本身也是可见的:解析结构 → 逐张重编码内嵌图 → 回收对象并写出 → 回读校验页面。最后那步是它自己做的验证,跟我在外面用解析库做的是一回事。
哪些情况压不动,得先知道
纯文字排版的 PDF 几乎没有空间。 我拿一份 6 页纯文字的文件测,37 KB 压完 33 KB,只省 11%——它内嵌图 0 张,能优化的只有结构流和未用资源。所以论文、合同这类纯文字文档别指望压缩率,它的体积本来就不在图片上。
加密或有权限保护的 PDF 要先解除保护,否则解析不了。
数字签名的 PDF 一经重写签名就会失效,这个是结构性的,任何重写工具都一样。
有些图片格式动不了:JPEG 2000、JBIG2、CCITT 传真、CMYK 印刷 JPEG,以及需要完整色彩管理的图片,浏览器没法可靠地等价重编码,只能原样保留。
最后
判断一个 PDF 压缩工具靠不靠谱,不用看它宣传的压缩率,压完之后做三件事就够了:全文搜一个词、点一下里面的链接、看看页数对不对。三样都在,才叫压缩;少了任何一样,那是把文档降级了。
我用的是图映(imging.cn)的 PDF 压缩,全程在浏览器本地跑——F12 开着 Network 面板压完整个流程,没有一个上传请求。这类文档很多时候是合同、报表、证件材料,能不出设备是有意义的。
利益相关:这个工具是我参与做的。文中所有数字都是写这篇时实测跑出来的,测试方法和验证方式都写在上面,可以自己复现。
浙公网安备 33010602011771号