PDF 压缩是日常最高频的文档处理之一——邮件超 20MB 发不出、微信文件超 200MB、网盘空间紧张,临到要发现 PDF 超大才发现要压。
本工具给出 high / balanced / extreme 三档预设 + 自定义,完全在浏览器本地运行——不上传、不限页、不限次。但理解原理才能选对档:本工具走的是”每页 raster 化为 JPEG 再合成”路线,胜在普适但有 trade-off。
这篇按”原理 → 档位对照 → 何时不该用本工具 → 大文件处理 → 实测对照”五段讲清楚。
工作原理:每页 raster 化
原 PDF 本工具 输出 PDF
┌─────────────┐ ┌──────────┐ ┌─────────────┐
│ 文字 (text) │ │ pdf.js │ │ ❌ 文字层 │
│ 矢量 (path) │ ───► │ 渲染每页 │ ───► │ ❌ 矢量层 │
│ 图像 (jpg) │ │ → canvas │ │ ✅ 整页 JPEG│
└─────────────┘ │ → JPEG │ └─────────────┘
└──────────┘
DPI × Quality
关键点:
- 每一页被 pdf.js 渲染成 canvas
- canvas 用
toBlob('image/jpeg', quality)转 JPEG - 所有 JPEG 拼成新 PDF(一页一图)
收益:
- 对任何来源 PDF 通用(扫描件、Office 导出、设计稿)
- 压缩比稳定可预测
- 完全本地,无上传
代价:
- 原文字层丢失——不能选、不能搜、不能高亮、不能复制
- 矢量图(图表、Logo)变成栅格——放大就糊
- 屏幕阅读器读不出(访问性丢失)
- 文档大小可能略涨(如果原 PDF 全是文字 + 矢量)
3 档预设的精确含义
high DPI 150 Quality 85% 视觉几乎无损 + 体积 30-50% 压缩
balanced DPI 110 Quality 70% 肉眼略软 + 体积 60-80% 压缩
extreme DPI 72 Quality 50% 屏幕尚可打印糊 + 体积 85-95% 压缩
DPI 直接决定每页像素:
| DPI | A4 单页像素 | 单页 JPEG 体积(q=0.7) |
|---|---|---|
| 72 | 595 × 842 | ~ 50 KB |
| 110 | 909 × 1287 | ~ 110 KB |
| 150 | 1240 × 1754 | ~ 200 KB |
| 200 | 1654 × 2339 | ~ 350 KB |
| 300 | 2480 × 3508 | ~ 800 KB |
JPEG quality 决定单像素压缩率:
| Quality | 视觉感受 | 文件比 q=1.0 |
|---|---|---|
| 0.95 | 视觉无损 | 70% |
| 0.85 | 视觉几乎无损 | 50% |
| 0.70 | 肉眼可见但可接受 | 30% |
| 0.50 | JPEG 伪影明显 | 18% |
| 0.30 | 文字开始糊 | 10% |
两者乘积就是单页最终体积。
实测压缩比(按 PDF 类型)
| 原 PDF 类型 | high | balanced | extreme |
|---|---|---|---|
| 扫描书籍(300 DPI 黑白)20MB / 200 页 | 12MB(-40%) | 5MB(-75%) | 2MB(-90%) |
| 扫描合同(200 DPI 彩色)8MB / 5 页 | 4MB(-50%) | 1.8MB(-78%) | 0.6MB(-93%) |
| PPT 导出 PDF(高清图)30MB / 50 页 | 18MB(-40%) | 7MB(-77%) | 2.5MB(-92%) |
| Word 导出 PDF(纯文字)500KB / 20 页 | 800KB(+60%) | 600KB(+20%) | 400KB(-20%) |
| 简历 PDF(文字 + 单图)200KB / 1 页 | 220KB(+10%) | 150KB(-25%) | 90KB(-55%) |
两个关键认识:
- 图像占主的 PDF 压缩比惊人——extreme 档普遍 -90%
- 文字 / 矢量主体的 PDF 可能变大——本工具是”raster 化”,文字 raster 化后比原指令格式占空间
什么时候不要用本工具
按权重排:
1. 需要保留文字可选可搜
合同需要复制条款、论文要 Ctrl+F 搜关键词、屏幕阅读器要读——绝对别用本工具。改用:
- Acrobat Pro 的”减小文件大小”
- PDF Squeezer(mac)
- Ghostscript
gs -sDEVICE=pdfwrite -dPDFSETTINGS=/ebook - 源文件是 Office 时,从源头导出时勾选”压缩图像”
2. 原 PDF 已经很小(< 5MB)
文字主体 + 体积已经压过——本工具基本压不动甚至变大。
3. 印刷 / 出版用途
extreme 档 72 DPI 打印出来文字毛糙、图片块状——印刷必须 ≥ 300 DPI,本工具做不到(DPI 上限受浏览器内存限制)。
4. 含表单 / 注释 / 书签
本工具 raster 化后所有交互元素丢失——表单不能填、注释看不到、书签消失。要保留这些用 [[pdf-edit]] 单独处理或 Acrobat。
5. 超大文件(> 300 页或 > 100MB)
浏览器内存上限 2-4GB,几百页 PDF 全部渲染到 canvas 会 OOM。先 [[pdf-split]] 拆开,逐份压再 [[pdf-merge]] 合。
输出体积估算公式
预估输出体积 ≈ DPI² / 72² × 单页像素基数 × Quality 系数 × 页数
简化版(A4 全图页):
| 档位 | 单页约 KB | 100 页约 |
|---|---|---|
| high | 200 | 20 MB |
| balanced | 110 | 11 MB |
| extreme | 50 | 5 MB |
反推 DPI:如果想把 200 页文件压到 10MB——目标单页 50KB——查表 ≈ extreme 档。
大文件 / 多页的处理策略
200 页以下
balanced 直接跑——80% 场景一次过。
200-500 页
| 子策略 | 操作 |
|---|---|
| 拆分压缩 | [[pdf-split]] 拆成 100 页/份,分别压,再 [[pdf-merge]] 合 |
| 直接 extreme | 单次跑通的话最快,但浏览器可能卡 |
| 降 DPI 自定义 | DPI 60-70 + Quality 0.6 单页 30KB,500 页 ≈ 15MB |
> 500 页
强烈建议用桌面工具——浏览器内存不够稳。
# Ghostscript(开源跨平台)
gs -sDEVICE=pdfwrite \
-dCompatibilityLevel=1.5 \
-dPDFSETTINGS=/ebook \
-dNOPAUSE -dQUIET -dBATCH \
-sOutputFile=out.pdf in.pdf
/ebook 档约相当于本工具的 balanced,且保留文字层。
5 个常见误判
1. 把 balanced 当 lossless
balanced 用 70% JPEG 质量——肉眼可见(但可接受)的画质下降。真正无损只有桌面工具的”仅压缩 stream”模式,本工具做不到。
2. extreme 用来压印刷件
72 DPI 屏幕看 OK 但打印 A4 后字符边缘锯齿明显。要打印的至少 high。
3. 期待”压缩 + 保留文字”
本工具结构决定不可能。两难取其一。
4. 拿来压扫描身份证想缩到 < 1MB
扫描身份证通常 2-5MB,extreme 能压到 200-500KB——够用但隐私问题大。永远别把身份证 PDF 上传到任何在线服务,本地处理后用安全渠道传。
5. 用浏览器内存挑战 1000 页 PDF
会卡死浏览器,可能丢未保存的其它 tab 数据。先 [[pdf-split]]。
默认不做的事
- 不保留文字层——所有页面 raster 化,原文字、矢量、表单元素丢失
- 不上传任何 PDF——纯浏览器本地处理
- 不限定页数 / 体积 / 次数——但浏览器内存限制 200-300 页
- 不识别表单 / 注释 / 书签——这些元素压完都消失,需要保留的话用 [[pdf-edit]]
要保留文字层做”温柔压缩”——用桌面 Acrobat / Ghostscript / PDF Squeezer;要拆分大 PDF 用 [[pdf-split]];要合并多份 PDF 用 [[pdf-merge]];要给 PDF 加密 / 解密用 [[pdf-encrypt]] / [[pdf-decrypt]]。pdf-compress 专攻”普适的 raster 化大幅压缩”——理解它的代价,用对场景就是高效又隐私安全的方案。