pdf-picker
基于 Go 的 PDF 回执拆分与分类工具。
1. 功能概览
- 扫描输入目录中的 PDF 文件
- 按页面内回执数量拆分并导出图片
- 从文本中提取“收/付款人全称”并按名称分类到输出目录
- 文本提取失败时可使用 OCR 兜底
- 生成执行结果记录文件(含每个 PDF 的目录与图片明细)
2. 目录结构
- index.go:主程序入口(收款人版本)
- index_fk.go:主程序入口(付款人版本)
- go.mod / go.sum:Go 模块依赖
- source/:默认输入目录(放 PDF)
- output/:默认输出目录(分类后的图片)
- dist/:构建产物目录
3. 运行环境
- Go 1.19+
- C 编译器(go-fitz 依赖 cgo)
- 可选:Tesseract OCR(用于识别扫描件)
当前依赖:
- github.com/gen2brain/go-fitz v1.20.2
4. 本地运行(Go)
4.1 直接运行 index.go
go run index.go
默认目录:
- 输入:./source
- 输出:./output
4.2 指定目录(示例)
go run index.go -i ./source -o ./output2
5. Windows 打包
5.1 Windows 本机构建(PowerShell)
go mod tidy
go build -o dist\pdf-picker.exe index_fk.go
5.2 macOS 交叉编译 Windows exe(本次已验证)
先安装 MinGW:
brew install mingw-w64
打包命令:
mkdir -p dist && CGO_ENABLED=1 GOOS=windows GOARCH=amd64 CC=x86_64-w64-mingw32-gcc CXX=x86_64-w64-mingw32-g++ go build -o dist/pdf-picker.exe index_fk.go
产物:
- dist/pdf-picker.exe
6. 输出说明
运行后会生成:
- 控制台统计信息
- 执行结果记录_YYYYMMDD_HHMMSS.txt
记录内容包括:
- 每个 PDF 拆分目录数
- 每个目录对应图片数量
- 识别成功/失败数量
- 全部汇总
7. OCR 说明
文本提取失败时会尝试调用:
tesseract <image> stdout -l chi_sim+eng
未安装 tesseract 时会自动跳过 OCR,不影响主流程(但扫描件识别率会下降)。
8. 常见问题
Q1:构建时报 gcc not found
原因:缺少 cgo 编译器。
处理:
- Windows:安装 LLVM-MinGW 或 MinGW-w64,并配置 CC/CXX
- macOS 交叉编译:安装 mingw-w64
Q2:没有识别出“付款人全称”
可能原因:
- PDF 为扫描件且 OCR 不可用
- 单据模板字段格式与当前规则不一致
可通过增强正则规则或补充 OCR 环境提升识别率。
9. 快速开始
# 1) 放入 PDF 到 source
# 2) 运行
go run index_fk.go
# 3) 或直接打包 Windows exe(macOS 交叉编译)
mkdir -p dist && CGO_ENABLED=1 GOOS=windows GOARCH=amd64 CC=x86_64-w64-mingw32-gcc CXX=x86_64-w64-mingw32-g++ go build -o dist/pdf-picker.exe index_fk.go
Description
Languages
Go
73.5%
Python
26.5%