扫描仪设成 A3 了,扫出来一半空白?写了个小工具一键裁掉
之前整理材料,连扫了十几份发票和合同。扫完打开一看——每一页都只有上半截有内容,下半截一片白。
愣了两秒反应过来:扫描仪上次扫图纸调成了 A3,忘改回来了。
先试了一圈现有方案
打开 WPS,想裁一下 PDF 页面。它跟我要会员。
去网上搜在线工具,PDF 切割、PDF 裁剪、PDF 编辑,一排一排的。点进去,每个都要上传文件。发票上有税号和公司抬头,我是真不敢往陌生的服务器上传。
命令行工具 pdfcrop 倒是有,但它是自动裁白边的——它不会告诉你"你这份文件是 A4 当成 A3 扫了",它就是整页均匀地裁。有时候空白区域太大,它裁完的尺寸反而不对。
于是自己写了一个。
它只干一件事:找到空白,裁掉
界面很简单,拖 PDF 进去,点一下,完事。和之前那篇 PDF 工具箱不同,这个不是大而全的瑞士军刀,就是一把剪刀。
自动识别 A3→A4。 算法会先分析整个页面的内容分布。如果发现某一半几乎是纯白的(空白比例超过 40%),它就判定这是"A4 被扫成 A3 了",然后精准地把空白半页切掉。不是简单地从中间一刀切——它会先找内容边界,再在边界外留 2% 的余量。
也能裁普通白边。 有些 PDF 每页四周有大片白边,也能处理。原理一样:逐行逐列计算像素灰度值,找到内容开始和结束的位置。
批量跑。 拖一个文件夹进去也行,十几份文件一起处理,不用一个个点。
为什么不做在线版
这类工具逻辑不重。不需要显卡,不需要云算力。传文件上去唯一的受益者是服务提供方。
这个工具全是本地跑:选文件用的是系统对话框,处理用的是 PyMuPDF 和 Pillow 两个 Python 库,网线拔了照样干活。你的文件自始至终没离开你的硬盘。
几个细节
算法是像素投影法,不是 AI。把一页 PDF 渲染成 200 DPI 的图像,逐行逐列统计"非白色像素的比例",找到内容块的上下左右边界。思路不复杂,准确率对付扫描件够用了。
输出 PDF 的尺寸是按 DPI 反算物理尺寸的。200 DPI 下 A4 大概 1654×2339 像素,裁完内容区域后按像素数 ÷ DPI × 25.4 算出毫米数,再生成等比例的 PDF 页面。所以裁完的文件打开看,页面尺寸基本就是 A4。
界面是 tkinter 写的,Python 自带,不依赖任何第三方 UI 框架。省掉了一套 Qt 或 Electron,打包体积小了一半。
打包成单文件 exe,48MB。首次启动要解压内置资源到临时目录,会多等两秒。之后正常运行。
源码 AGPL-3.0 授权,随便改。
怎么拿到
网盘下载:城通网盘
网盘密码:0033
解压密码:PDF空白裁剪工具.7z
压缩包里有:
PDF空白裁剪工具.exe,双击跑code/完整 Python 源码,pip install -r requirements.txt就能跑README.md使用说明和常见问题
macOS / Linux 直接跑 code/ 里的源码。
最后
代码是 BitFun 搭手写的——核心算法思路我提的,像素投影、AGPL 合规、PyInstaller 打包这些具体实现是 AI 写的。测试用的模拟 A3 PDF 也是 AI 生成的脚本自动跑的。这篇文章 AI 润色过。
如果你对 AI 辅助写代码有兴趣,欢迎订阅:
- 👉 Z.AI — GLM 官方海外版
- 👉 OpenCodeGo — 多模型订阅平台,5 美元一个月
本软件 + 本文全部使用 deepseek v4 pro 辅助完成,总花费 0.47 元。
Upvoted! Thank you for supporting witness @jswit.
0.00 SBD,
4.53 STEEM,
4.53 SP