# 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 ```bash go run index.go ``` 默认目录: - 输入:./source - 输出:./output ### 4.2 指定目录(示例) ```bash go run index.go -i ./source -o ./output2 ``` ## 5. Windows 打包 ### 5.1 Windows 本机构建(PowerShell) ```powershell go mod tidy go build -o dist\pdf-picker.exe index_fk.go ``` ### 5.2 macOS 交叉编译 Windows exe(本次已验证) 先安装 MinGW: ```bash brew install mingw-w64 ``` 打包命令: ```bash 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 说明 文本提取失败时会尝试调用: ```text tesseract 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. 快速开始 ```bash # 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 ```