扫描仪设成 A3 了,扫出来一半空白?写了个小工具一键裁掉

in STEEM CN/中文yesterday

图片.png

之前整理材料,连扫了十几份发票和合同。扫完打开一看——每一页都只有上半截有内容,下半截一片白。

愣了两秒反应过来:扫描仪上次扫图纸调成了 A3,忘改回来了。


先试了一圈现有方案

打开 WPS,想裁一下 PDF 页面。它跟我要会员。

去网上搜在线工具,PDF 切割、PDF 裁剪、PDF 编辑,一排一排的。点进去,每个都要上传文件。发票上有税号和公司抬头,我是真不敢往陌生的服务器上传。

命令行工具 pdfcrop 倒是有,但它是自动裁白边的——它不会告诉你"你这份文件是 A4 当成 A3 扫了",它就是整页均匀地裁。有时候空白区域太大,它裁完的尺寸反而不对。

于是自己写了一个。


它只干一件事:找到空白,裁掉

界面很简单,拖 PDF 进去,点一下,完事。和之前那篇 PDF 工具箱不同,这个不是大而全的瑞士军刀,就是一把剪刀。

自动识别 A3→A4。 算法会先分析整个页面的内容分布。如果发现某一半几乎是纯白的(空白比例超过 40%),它就判定这是"A4 被扫成 A3 了",然后精准地把空白半页切掉。不是简单地从中间一刀切——它会先找内容边界,再在边界外留 2% 的余量。

也能裁普通白边。 有些 PDF 每页四周有大片白边,也能处理。原理一样:逐行逐列计算像素灰度值,找到内容开始和结束的位置。

批量跑。 拖一个文件夹进去也行,十几份文件一起处理,不用一个个点。


为什么不做在线版

这类工具逻辑不重。不需要显卡,不需要云算力。传文件上去唯一的受益者是服务提供方。

这个工具全是本地跑:选文件用的是系统对话框,处理用的是 PyMuPDF 和 Pillow 两个 Python 库,网线拔了照样干活。你的文件自始至终没离开你的硬盘。


几个细节

  1. 算法是像素投影法,不是 AI。把一页 PDF 渲染成 200 DPI 的图像,逐行逐列统计"非白色像素的比例",找到内容块的上下左右边界。思路不复杂,准确率对付扫描件够用了。

  2. 输出 PDF 的尺寸是按 DPI 反算物理尺寸的。200 DPI 下 A4 大概 1654×2339 像素,裁完内容区域后按像素数 ÷ DPI × 25.4 算出毫米数,再生成等比例的 PDF 页面。所以裁完的文件打开看,页面尺寸基本就是 A4。

  3. 界面是 tkinter 写的,Python 自带,不依赖任何第三方 UI 框架。省掉了一套 Qt 或 Electron,打包体积小了一半。

  4. 打包成单文件 exe,48MB。首次启动要解压内置资源到临时目录,会多等两秒。之后正常运行。

  5. 源码 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 元

图片.png

Sort:  

Upvoted! Thank you for supporting witness @jswit.

Coin Marketplace

STEEM 0.04
TRX 0.33
JST 0.081
BTC 59331.41
ETH 1557.21
USDT 1.00
SBD 0.42