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:35 +08:00
2026-05-26 21:36:35 +08:00
2026-05-26 21:36:18 +08:00
2026-05-26 21:36:35 +08:00

pdf-picker

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

功能说明:

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

1. 项目结构

  • index.go: Go 主程序
  • go.mod / go.sum: Go 模块依赖
  • source/: 默认输入目录(放 PDF
  • output/: 默认输出目录(分类后的图片)

2. 运行环境

  • Windows
  • Go 1.19+
  • C 编译器(用于 cgogo-fitz 依赖)
  • 可选Tesseract OCR用于识别扫描件

当前项目依赖:

  • github.com/gen2brain/go-fitz v1.20.2

3. 工具链配置Windows

如果构建时报错 gcc not found,可使用 LLVM-MinGW。

示例(已验证可用路径):

  1. 安装 LLVM-MinGW任选一种
  • 使用 winget
  • 手动下载并解压到 C:/llvm-mingw
  1. 配置 Go 使用 clang 作为 cgo 编译器PowerShell
go env -w CC="C:\llvm-mingw\llvm-mingw-20260519-ucrt-x86_64\bin\clang.exe"
go env -w CXX="C:\llvm-mingw\llvm-mingw-20260519-ucrt-x86_64\bin\clang++.exe"
go env -w CGO_ENABLED=1
  1. 检查配置
go env CC CXX CGO_ENABLED

4. 编译

go mod tidy
go build index.go

编译成功后会生成可执行文件:

  • index.exe

5. 运行

5.1 默认目录

.\index.exe

等价于:

  • 输入目录:./source
  • 输出目录:./output

5.2 指定目录(短参数)

.\index.exe -i ./source -o ./output2

5.3 指定目录(位置参数)

.\index.exe ./source ./output2

优先级:

  • 命名参数(-i/-o 或 --input/--output
  • 位置参数
  • 默认目录source/output

6. 输出结果

运行结束后会看到控制台统计,并在项目根目录生成记录文件:

  • 执行结果记录_YYYYMMDD_HHMMSS.txt

记录内容包括:

  • 每个 PDF 拆分目录数
  • 每个目录对应图片数量
  • 识别成功/失败数量
  • 全部汇总

7. OCR 说明

程序在文本提取失败时会尝试调用:

tesseract <image> stdout -l chi_sim+eng

如果本机未安装 tesseractOCR 兜底会自动跳过,不影响程序主流程(但扫描件识别率会下降)。

8. 常见问题

Q1: 构建时报 gcc not found

原因:缺少 cgo 编译器。 处理:按第 3 节安装并配置 LLVM-MinGW。

Q2: 构建时出现大量 ld.lld: warning: duplicate symbol

这是链接阶段警告,若最终退出码为 0 且生成 index.exe可继续使用。

Q3: 没有识别出“收款人全称”

  • 可能是 PDF 为扫描件且 OCR 不可用
  • 可能是单据模板字段格式与当前规则不一致

可通过增强正则规则或补充 OCR 环境提升识别率。

9. 快速开始

# 1) 放入 PDF 到 source
# 2) 编译
go build index.go
# 3) 运行
.\index.exe -o ./output2
Description
No description provided
Readme 39 KiB
Languages
Go 73.5%
Python 26.5%