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 面板压完整个流程,没有一个上传请求。这类文档很多时候是合同、报表、证件材料,能不出设备是有意义的。

利益相关:这个工具是我参与做的。文中所有数字都是写这篇时实测跑出来的,测试方法和验证方式都写在上面,可以自己复现。

posted @ 2026-08-27 16:48  langka  阅读(4)  评论(0)    收藏  举报