# PDF 压缩 给 PDF 瘦身

文档变小，不用送去任何地方。

> 不上传也能给 PDF 瘦身。读取、重新压缩、重新写出，全由你自己的浏览器完成，而且动手之前先告诉你这份文件的体积到底压在哪儿。

这是一个浏览器交互工具，地址是 https://abox.tools/zh/compress-pdf/。文件在运行该浏览器的设备上处理。主动分享和可选联网功能都在页面上说明。下文是它的文字说明；使用工具请打开该地址。

## 你的文档**在浏览器里处理**，无须上传处理。

文档在这台机器上打开、拆开、再写回去，全程在内存里，跑的是从这个地址发出的代码。这里没有任何东西能发起上传，这个页面的另一头也没有服务器能接住上传。

- ✗ 不上传
- ✗ 不注册
- ✓ 断网能用
- ✓ 开源
- ✓ 文件留在你的设备上

## PDF 怎么变小

1. **选一个 PDF。** 拖到下面的方框里，或者点开自己挑。浏览器直接从你的硬盘上读，这期间没有东西发出去。
2. **先看清体积压在哪儿。** 第二步的重点就是这张分布图。条形图里大半是图片，这个工具就有东西可做；大半是字体和页面内容，它会直说，老实说也就能省下百分之几。这事儿花一分钟之前就知道，总比之后才知道强。
3. **定个力度。** 那几档给的是分辨率，不是“高中低”这种含糊的等级。96 DPI 给屏幕上看的，130 给要发邮件的，220 给还得打印的。每一档都按图片在页面上实际画多大来算，所以一张只当缩略图用的照片，不会被当成整页扫描件对待。
4. **压完之后，看一眼那句“已核对”。** 重写完成后，成品会被这个页面上同一个读取器再打开一遍，页数点一遍。跟原来对不上，这一次就算失败，也不会给你下载。

## 说得更细的版本

[怎么给 PDF 瘦身，以及有些为什么压不动](https://abox.tools/zh/guides/make-a-pdf-smaller/): 一份 PDF 的体积到底压在哪儿，扫描件为什么能小 80% 而合同几乎纹丝不动，这里的 DPI 是什么意思，以及压缩工具绝不该对你的文档做什么。

## 工具箱里还有

- [PDF 解锁](https://abox.tools/zh/unlock-pdf/): 权限限制与打开密码不同。页面会说明你的 PDF 使用哪种保护。
- [PDF 加密](https://abox.tools/zh/protect-pdf/): 把文档锁上，而不是为了锁它先把它交给一个网站。
- [PDF 水印](https://abox.tools/zh/watermark-pdf/): 一份写着自己去了哪里的扫描件，就没法悄悄再去别的地方。
- [PDF 涂黑](https://abox.tools/zh/redact-pdf/): 字从文件里删掉，然后再搜一遍这个文件来证明。

## 常见问题

### 我的 PDF 会传到什么地方去吗？

不会。读取、重新压缩、写出，全由你自己的浏览器在你自己的硬件上完成。这个工具没有服务器那一半，页面的 `Content-Security-Policy` 把它可能联的地址全列了出来，没有一个是本站的。连可选的联网功能都没有。

### 我的 PDF 能小多少？

完全取决于里面装的是什么，所以工具在动手之前先量一遍、摆给你看。扫描件几乎全是照片，通常能小 60% 到 90%。合同、论文这类是文字、矢量图形和内嵌字体，做它的软件早就压过一轮了，这种一般只能省下百分之几，来源是重新打包文件、丢掉已经没人引用的东西。哪个工具连你的文件都没看就承诺一个固定百分比，那是在猜。

### 压缩 PDF 会掉画质吗？

里面的图片要重新编码，这部分会。别的都不动：文字还是文字，选得中也搜得到，字体整份留着，矢量图形原样复制过去。工具也不会白白把一张图弄差。重编之后要是并不比原来小，那就把原来的字节放回文档里，一点没动。

### 这里的 DPI 是什么意思，为什么要问我？

PDF 里记着每张图在页面上画多大，所以工具能算出它的有效分辨率。一张 4000 像素的扫描图，铺在八英寸宽的纸上，等于每英寸 500 个像素。屏幕根本用不上这么多，纸上也用不上多少，所以超过你选定那一档的像素被最先扔掉，它们换来的画质谁也看不见。正因为量过这一下，一个放得很小的 logo 才不会跟整页扫描件被同等对待。

### 带密码的 PDF 能打开吗？

不能，这是故意的。加密的文档会被拒收并说明原因，哪怕密码是空的也一样，而很多扫描仪和复印机就是这么存的。给文件解保护跟给文件瘦身是两码事，一声不吭就办了，等于替你做了你没要求的事。

### 有压不动的 PDF 吗？

有些内嵌图片压不动。JPEG 2000、JBIG2 和传真编码（CCITT）这几种，任何浏览器都没有解码器，所以原样放行，并在结果里注明。后两种本来就是双色编码，一般已经接近最小了。CMYK 图片也不动，重编有可能让印出来的颜色偏掉。凡是工具跳过的，结果里都会点名，并说明原因。

### 压完的文件还能到处打开吗？

能。输出按 PDF 1.5 写，2003 年之后出的阅读器都认。而且工具在你自己的机器上验一遍：把成品重新打开，把页数点一遍，再交给你。表单、链接、书签、无障碍结构和内嵌附件都带过去，留下不要的只有文档里已经没人引用的那些东西。

### 免费吗？要注册吗？

免费，没有账号，不用登录，没有试用期。文件大小的上限只取决于你这台机器的内存。本站带广告，经费就是这么来的，广告拿不到关于你文档的任何信息。

### 断网能用吗？

能。页面开一次之后断网，它照干不误。这也是证明“什么都没上传”最省事的办法。一个把文档送出去压缩的工具，拔线那一刻就停了。

## 这条隐私承诺怎么核实

- **处理在这个浏览器里完成。** 本工具在浏览器里处理输入和结果，处理代码不把它们上传去处理。Content-Security-Policy 限制可用资源和连接目的地，但已允许的主机仍可接收请求。策略不检查载荷，不能单独证明什么都没有发出。请把具体操作的请求与源码核对，或断网完成该本地操作。
- **整套格式的处理都在这个仓库里。** 一个 PDF 说白了就是一串对象，外加一张记着每个对象从哪儿开始的表。`src/shared/pdf-objects.js` 读这套语法，`src/shared/pdf-reader.js` 跟着那张表走，`src/shared/pdf-writer.js` 写出一份新的，三个文件谁都没有引入能发请求的东西。没有库要去外面取，也没有哪一步是在服务器上渲染的。
- **加密的文件直接挡下来，不去打开它。** 带密码的 PDF 一律拒收，包括扫描仪常留的那种空密码，技术上明明能打开。给文档解保护跟给文档瘦身是两码事，一声不吭就替你办了，这种工具才叫吓人。
- **它是往外拿东西，不是往里塞东西。** 写出来的文件里没有创建日期，没有生成器署名，也没有做它那个工具的名字。勾上那个选项，XMP 数据包和排版软件留下的私有块也一并去掉。EXIF 那个工具讲的是同一个道理，只不过换了一种容器。
- **Google 加载了什么，又拿不到什么。** 广告脚本和统计脚本来自 Google。关于你文档的信息，一条都没给它们，文件不给，页面不给，文件名、大小、页数也不给。读 PDF、解码、写 PDF 的每一行代码都从本站发出，也都摆在仓库里。
- **捐助按钮加载了什么，又拿不到什么。** 页头那个“Buy me a coffee”按钮，由 cdnjs.buymeacoffee.com 的脚本画出来，字体取自 Google Fonts。它就是个链接，仅此而已，不上报访问，也拿不到关于你或者你文档的任何东西。你不点它，什么都不会发生；点了，跳过去的是别人的网站。
- **断网照样能用。** 断开网络，这个页面上的一切照常工作。这是最省事的一条证明。一个把文档送出去压缩的工具，这时候就该停了。

**你可以自己核对。**上面这些不用你信。这个页面是仓库里的模板和配置生成出来的，构建脚本你能读，也能自己跑一遍，跑出来的结果就提交在 `dist` 分支上。拿实际发给你的内容，跟你自己从源码构建出来的结果对一遍就知道了： https://github.com/A-Box-of-Tools/website

最值得先读的几个文件：`config/site.toml` 里是 Content-Security-Policy，读和写的全部过程在 `src/shared/pdf-reader.js` 和 `src/shared/pdf-writer.js` 里，这两个文件都够不着网络。
