做了个网页版 PDF 压缩工具,解决「不想上传隐私文件」的问题

2025 年 11 月 3 日
 hiko2chen

起因是有一个银行的亲戚,需要压缩一个用户的合同 PDF ,内容基本拍摄的合同照片导致文件很大,因为文件敏感涉及到具体客户信息,所以不想使用需要上传文件的在线服务,私聊让我帮他手动压缩一下。 弄完后我发现对于一些,可能企业内部没有提供工具,但是又有敏感文件压缩的人来说,当前确实希望有一个即时可用,安全的工具。

所以就做了这个: • 打开网页就能用,无需下载安装 • 文件在浏览器里处理( Ghostscript WASM ) • 完全不上传服务器

技术栈:React + Ghostscript WASM + Cloudflare Pages

适合场景:偶尔压缩几个 PDF ,注重隐私,即时可用 不适合:批量处理或需要高级功能

域名是 https://safetypdf.com

上线以后没怎么做推广,不过也有 19 个自然流量用户压缩了文件,节省 362MB 空间。 欢迎 v 友们试用,有问题随时提~

4317 次点击
所在节点    分享创造
51 条回复
Izual_Yang
2025 年 11 月 4 日
@Izual_Yang #39 看了一下就是 /screen 和 /printer ,那确实快
dimwoodxi27
2025 年 11 月 4 日
@hiko2chen 按加载体感来说感觉慢,而且其他的 PDF 压缩网站加载更快,但感觉你这个压缩速度还行是我用过十几个 PDF 中算最快的,其他的都是上传到后端压缩的,但你这个算是离线压缩是不错的方式,网站体积和质量压缩更小是能比 90%的 PDF 压缩网站好用的;个人感觉大部分人压缩 PDF 的目的就是为了上传到一些在线文档,而在线文档限制了 PDF 的上传体积为 100M 以内。
hugodotlau
2025 年 11 月 4 日
@Izual_Yang 不太理解 SafetyPDF 和 gs 命令行不应该一致么?
hugodotlau
2025 年 11 月 4 日
果然是 gs , 小文件负压缩效果问题还存在 :D

原始大小
5.44 MB
压缩后大小
5.66 MB
节省空间
-4.2%
hiko2chen
2025 年 11 月 4 日
@gdfsjunjun 我找到问题了
[核心原因]
1. 原 PDF 里面的 JPEG 文件已经经过一次压缩率较高的“激进压缩”,文件已经很小且优化了。
2. 如果使用的是推荐模式进行压缩的话,我的 GS 内使用的是/printer 预设进行压缩,内部的参数 QFactor 较低,相当于保守压缩,此时 GS 会对 JEPG 全部解码重新编码。
3. 因为重新编码参数更保守,所以会尝试保留更多已经在第一次压缩时丢失的细节,编码一些已经损坏的数据。

最终导致体积上升。

而且我算了一下,这个文件 280 个 JPEG 图片,使用重压缩,每个图片可能会增加 50-100KB ,增量也是差不多 21 MB ,和预期差不多😂

[解决方案]
对于这种已经被压缩处理过的 PDF ,再压缩的方式可以使用极致压缩模式,这样会再对内容进行有损压缩,但是速度会较慢,我试了下,压缩了 18%,从 51MB 压缩到 42MB 。
不过我当前这个也有设计缺陷,我后续考虑拓展一下 PDF 分析组件,提前提取分析 jpeg 质量,如果高于当前压缩算法,忽略重新编码 jpeg ,仅优化数据流
hiko2chen
2025 年 11 月 4 日
@dimwoodxi27 主要还是有些文件,比如比较重要的合同,文件,私人的内容之类的,上传到别人服务器总是有些不放心
hiko2chen
2025 年 11 月 4 日
@hugodotlau 这个问题不知道是不是也是类似上面的,小文件里面的图片文件已经被压缩过了,推荐模式的重新编码可能会导致体积上升
hugodotlau
2025 年 11 月 6 日
@hiko2chen 不完全是,理论上你可以先提取图片判断压缩率后,再决定压缩策略。这里面有个更难的问题是重新生成的 pdf 的字库会被更新有可能变大
PbCopy111
2025 年 11 月 7 日
@xinyu391
@gdfsjunjun 国企最爱啊,国企付费使用没毛病吧。
wxf666
2025 年 11 月 7 日
@hiko2chen #45

36 楼的 PDF ,可能重复图片只保存了一份,但你可能重复压缩并存储了,所以体积缩小不明显?

---

1. 我用 pdfimages 解包出原始图片,压缩前共 55.6 MB ,极致压缩后共 21.0 MB ,都是 6297 张。

2. 再用 rdfind 删除重复文件后,压缩前剩 3086 张 27.4 MB ,极致压缩后剩 3186 张 9.2 MB 。(难道同一张图片,多次压缩结果不同?)

3. 猜测:

3.1 原 PDF 只存储一份重复图片(因为 55.6 MB > 51 MB ,还有其他内容、字体等要存储)

3.2 极致压缩后,可能重复图片也原样存储了,因为 ( 51 MB - 42 MB = 9 MB 极致压缩后节省体积 ) = ( 27.4 MB - 21.0 MB + 其他被精简掉的 2.6 MB ),看起来对得上?

3.3 如果极致压缩后,也能去掉重复图片,最终文件应该能小至 30 MB ?


---


感觉除非大幅牺牲画质,jpg / png 已经很难再减少体积了。。

要是 PDF 支持 avif 、heic 、jpeg-xl 等先进格式图片,就好了。。

4K 阿凡达图,4.23 MB jpg ,压成 0.15 MB avif ,减少 97% 体积,细节纹路噪点都还保留的可以。。

实测 avif-enc 压一遍那 3086 张原图,原始分辨率,画质基本不变时,可减少 72% 体积,只剩 7.8 MB 。。

bigbug55
2025 年 11 月 13 日
题主,代码开源了么?想学习下.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1170060

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX