# 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 编译器(用于 cgo,go-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 2) 配置 Go 使用 clang 作为 cgo 编译器(PowerShell) ```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 ``` 3) 检查配置 ```powershell go env CC CXX CGO_ENABLED ``` ## 4. 编译 ```powershell go mod tidy go build index.go ``` 编译成功后会生成可执行文件: - index.exe ## 5. 运行 ### 5.1 默认目录 ```powershell .\index.exe ``` 等价于: - 输入目录:./source - 输出目录:./output ### 5.2 指定目录(短参数) ```powershell .\index.exe -i ./source -o ./output2 ``` ### 5.3 指定目录(位置参数) ```powershell .\index.exe ./source ./output2 ``` 优先级: - 命名参数(-i/-o 或 --input/--output) - 位置参数 - 默认目录(source/output) ## 6. 输出结果 运行结束后会看到控制台统计,并在项目根目录生成记录文件: - 执行结果记录_YYYYMMDD_HHMMSS.txt 记录内容包括: - 每个 PDF 拆分目录数 - 每个目录对应图片数量 - 识别成功/失败数量 - 全部汇总 ## 7. OCR 说明 程序在文本提取失败时会尝试调用: ```text tesseract stdout -l chi_sim+eng ``` 如果本机未安装 tesseract,OCR 兜底会自动跳过,不影响程序主流程(但扫描件识别率会下降)。 ## 8. 常见问题 ### Q1: 构建时报 `gcc not found` 原因:缺少 cgo 编译器。 处理:按第 3 节安装并配置 LLVM-MinGW。 ### Q2: 构建时出现大量 `ld.lld: warning: duplicate symbol` 这是链接阶段警告,若最终退出码为 0 且生成 index.exe,可继续使用。 ### Q3: 没有识别出“收款人全称” - 可能是 PDF 为扫描件且 OCR 不可用 - 可能是单据模板字段格式与当前规则不一致 可通过增强正则规则或补充 OCR 环境提升识别率。 ## 9. 快速开始 ```powershell # 1) 放入 PDF 到 source # 2) 编译 go build index.go # 3) 运行 .\index.exe -o ./output2 ```