2026-05-27 13:42:17 +08:00
2026-05-26 21:36:35 +08:00
2026-05-26 21:36:35 +08:00
2026-05-26 21:36:35 +08:00
2026-05-26 21:36:18 +08:00
2026-05-27 13:42:17 +08:00

pdf-picker

基于 Go 的 PDF 回执拆分与分类工具。

1. 功能概览

  • 扫描输入目录中的 PDF 文件
  • 按页面内回执数量拆分并导出图片
  • 从文本中提取“收/付款人全称”并按名称分类到输出目录
  • 文本提取失败时可使用 OCR 兜底
  • 生成执行结果记录文件(含每个 PDF 的目录与图片明细)

2. 目录结构

  • index.go主程序入口收款人版本
  • index_fk.go主程序入口付款人版本
  • go.mod / go.sumGo 模块依赖
  • 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 exemacOS 交叉编译)
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
No description provided
Readme 39 KiB
Languages
Go 73.5%
Python 26.5%