141 lines
3.0 KiB
Markdown
141 lines
3.0 KiB
Markdown
# 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 <image> 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
|
||
```
|