返回

文章详情

展示 HN:使 PDF 看起来像扫描件(CLI 或通过 WASM 在浏览器中)

Hacker News2026年6月20日 18:17

一个命令行工具,它接收一个 PDF 文件并使其外观退化,看起来像印刷品的物理扫描——倾斜、灰度、暖色调纸张、扫描仪颗粒、失焦、边缘阴影和 JPEG 压缩伪影。也可以通过 WASM 在浏览器中客户端运行。每个页面被光栅化为图像,经过效果管道处理,然后重新组装成一个新的图像-only PDF(原始可选择文本消失——忠实于基本扫描仪的效果)。构建需要 Go 和 C 工具链(go-fitz 通过 cgo 链接 MuPDF,因此二进制文件是自包含的——运行时无需安装任何东西)。执行命令:go build -o make-look-scanned . 使用方法:make-look-scanned [标志] input.pdf 标志可以出现在输入文件名之前或之后。 make-look-scanned in.pdf # -> in.scanned.pdf make-look-scanned in.pdf -o out.pdf make-look-scanned in.pdf --noise 0.4 --skew 2.5 --jpeg-quality 30 标志: | 标志 | 默认值 | 含义 | | --------------------- | ------------------ | -------------------------------------- | | -o <input>.scanned.pdf | 输出路径 | | | --preset | — | 来自 config.toml 的命名预设 | | --seed | 内容哈希随机种子 | (覆盖以获取新外观) | | --force | false | 覆盖现有输出文件 | | --dpi | 150 | 渲染分辨率 | | --skew | 0.6 | 最大旋转角度(0 禁用) | | --grayscale | true | 去饱和(--grayscale=false 保持颜色) | | --paper-tone | 0.6 | 暖纸张色调强度 0..1 | | --noise | 0.08 | 扫描仪颗粒 0..1 | | --blur | 0.4 | 失焦高斯 sigma | | --edge-shadow | 0.15 | 边缘渐变 0..1 | | --jpeg-quality | 70 | JPEG质量 1..100 | 每个数字调节器在 0 时禁用其效果。 确定性: 输出默认是确定性的:种子源自输入 PDF 的内容,因此相同的文件始终产生相同的扫描。通过 --seed N 传递不同的(但可重现的)外观。相同的输入 + 种子将产生字节完全相同的 PDF。 预设: 在 $XDG_CONFIG_HOME/make-look-scanned/config.toml 中定义可重用的捆绑包(当 XDG_CONFIG_HOME 未设置时回退至 ~/.make-look-scanned/config.toml)。键名与标志名称镜像,以下划线分隔: [presets.medium] skew = 1.5 paper_tone = 0.6 noise = 0.2 blur = 0.6 edge_shadow = 0.3 jpeg_quality = 45 make-look-scanned --preset medium in.pdf 优先级: 内置默认值 → 选定预设 → 显式 CLI 标志(标志总是优先)。 浏览器(WebAssembly): 效果管道也在浏览器中运行。go-fitz/MuPDF 无法编译为 wasm,因此浏览器使用 PDF.js 来光栅化页面,并将像素传递给相同的 Go 效果 + 编译为 wasm 的汇编代码。开发(需要网络以获取 PDF.js CDN): ./web/build.sh # 构建 web/main.wasm + wasm_exec.js (cd web && python3 -m http.server 8080)# 然后打开 http://localhost:8080 单个自包含文件(离线工作,无需提供服务): task build:web # 写入 dist/make-look-scanned.html(~8 MB) dist/make-look-scanned.html 将 wasm、Go 的运行时胶水和 PDF.js(库 + 工作线程)内联为 base64 — 可直接在浏览器中打开。 输出在视觉上与 CLI 等效,但字节上不相同,因为 PDF.js 和 MuPDF 的光栅化方式不同。 许可证:AGPL-3.0。CLI 静态链接 MuPDF(通过 go-fitz),其许可证为 AGPL-3.0,因此组合二进制文件的许可证为 AGPL-3.0——分发它需要提供相应的源代码。浏览器构建不包括 MuPDF(它使用 PDF.js,Apache-2.0)。

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡