夜雨聆风学习资料网

ARTICLE · 1355194

【开源】一行命令把 PDF 做旧成扫描件:反向操作:不修复扫描件,而是把干净的 "降级"成它

【开源】一行命令把 PDF 做旧成扫描件:反向操作:不修复扫描件,而是把干净的 "降级"成它

一行命令把 PDF 做旧成扫描件

你有没有遇到过这种情况——
手上是干净的电子 PDF,对方却只要"扫描件"。为了一个文件,专门跑一趟打印店,或者翻出吃灰的扫描仪,甚至把手机举歪了拍一页纸。
GitHub 上刚冒出来的 make-look-scanned 说:别折腾了,我帮你"扫"一遍。

它是什么

make-look-scanned 是一个用 Go 写的命令行工具,方向与绝大多数 PDF 工具相反:不清理扫描件,而是把干净的电子 PDF 主动"降级"成"从纸质打印件扫出来"的样子。
页面倾斜、灰度、米黄纸调、扫描颗粒、失焦模糊、边缘暗角、JPEG 压缩伪影——每一项都能单独调。
用法简单到发指:
make-look-scanned in.pdf                # 默认输出 in.scanned.pdfmake-look-scanned in.pdf -o out.pdfmake-look-scanned in.pdf --noise 0.4 --skew 2.5 --jpeg-quality 30

项目是怎么来的

这个品类其实不空,而且有个 3500+ 星的成熟网页对手——lookscanned.io(2022 年上线,Vue + MIT)。
面对这样一个已经站稳脚跟的竞品,多数人会在"做得更好"或"做得更大"上卷。而 make-look-scanned 的作者 overflowy 选了一条反常识的路:不做网页,做 CLI;不用 Vue,用 Go;不要随机,要确定性。
结果很打脸:上线 3 天拿到 362 星,7 天 426 星,如今已 800+ 星。
它的爆火不是因为"做得更好",而是因为做得不同——它卡住了一个 lookscanned.io 给不了的位置:自动化场景。

一个脚本要自动处理一批待发文件,网页工具就没法用了。这时候只有命令行能接进流程。

原理:一条干净的流水线

它的全部"魔力"来自三步:
PDF 矢量页 → 栅格化成位图 → 过一遍效果管线 → 组装回纯图片 PDF
第一步:栅格化。用 go-fitz(MuPDF 的 Go 绑定)把每一页按 150 DPI 渲染成 RGBA 位图。150 DPI 正是家用扫描仪的典型分辨率——看得清,又"扫描味"十足。
第二步:效果管线。灰度、暖纸色、倾斜、颗粒、模糊、边缘阴影依次叠加。每个参数都是独立旋钮,数值设为 0 即关闭该效果。

Flag

默认值

作用

--skew

0.6

页面歪斜角度

--grayscale

true

灰度化

--paper-tone

0.6

暖纸色调强度

--noise

0.08

扫描颗粒

--blur

0.4

高斯失焦

--edge-shadow

0.15

边缘暗角

--jpeg-quality

70

JPEG 压缩瑕疵

第三步:重组。把处理完的位图用 gopdf 打包成一个全新的纯图片 PDF。
这里有个"诚实"的细节:原 PDF 的可选文字层会彻底消失,输出就是一张图——和一台基础扫描仪的行为一模一样。

真正值钱的三个设计

1. 静态链接 MuPDF,零运行时依赖
go build 出一个二进制就完事,用户不用装 poppler、ImageMagick、Ghostscript。代价是编译需要 C 工具链,但"一次编译,到处运行"。
2. 确定性输出——这个品类里几乎没人做到
默认随机种子取自输入 PDF 的内容哈希,同一个文件不管跑多少遍,结果一模一样。再配合 --seed N,相同输入 + 相同种子能得到字节级一致的 PDF——方便复现和回归测试。
3. 浏览器版:用 PDF.js 替换 MuPDF
MuPDF 编不了 WASM,作者就换个思路:浏览器里用 PDF.js 栅格化页面,像素交给同一套 Go 效果代码编译成的 wasm 处理。最终能打包成约 8MB 的单文件 HTML,内联 wasm + PDF.js,双击离线可用。

一套算法,CLI 和浏览器共享——这是 Go 转 WASM 的漂亮实践。

优点与适用边界

优点

免费开源,无账号、无限制✅
文件永远不上传——合同、证件、票据这类敏感文件纯本地处理,这是这个品类的刚性要求 ✅

三个入口:Go CLI(批处理)、浏览器在线版、单 HTML 离线版 ✅

参数全可调 + 预设:常用组合写进 config.toml,用 --preset 调用 ✅

确定性可复现,适合测试和自动化 ✅

注意两点

文字会"消失"成图片:输出是纯图片 PDF,不可选中、不可搜索、不可复制。如果对方要可复制的电子 PDF,这个工具不适用。
许可证是 AGPL-3.0:CLI 因静态链接 MuPDF,整体为 AGPL,二次分发需提供源码;个人本地用完全没问题,但集成进商业 SaaS 前建议让法务评估一下。

横向对比

vs lookscanned.io(3500+ 星网页工具)
结论:这不是竞争,是互补。偶尔手动处理单文件选 lookscanned.io;要接进自动化流程选 make-look-scanned。
vs 其他方案

一句话总结

make-look-scanned 干的事很无聊——把干净的 PDF 弄脏。但它干得不糊弄:内容哈希做种子、为确定性专门挑库、特效顺序有讲究、WASM 和 CLI 共享代码。
GitHub:overflowy/make-look-scanned(AGPL-3.0)
下次再遇到"只要扫描件"的要求,别急着翻扫描仪——打开终端,一行命令就够了。

开源地址

https://github.com/overflowy/make-look-scanned
8元解锁820+优质项目!别再瞎找资料了!AI、低代码、Agent实战教程一网打尽,永久更新!

回首页,搜索你想要的文档

在首页搜索框输入关键词,快速定位资料

文库首页搜索指引 立即搜索

相关学习资料