一个基于OCR技术的发票信息提取工具,能够自动从PDF发票中提取关键信息并导出到Excel文件。
- 🔍 智能识别:使用PaddleOCR技术识别PDF发票中的文本
- 📄 批量处理:支持多页PDF文件的批量处理
- 🎯 精准提取:自动提取发票代码、发票号码、开票日期、校验码信息
- 📊 数据导出:将提取结果导出为Excel格式,便于后续处理
- 🖥️ 图形界面:基于Flet框架的直观用户界面
- 🔧 调试支持:可选择保存裁剪后的图片,便于调试和优化
- Python 3.12 或更高版本
- 推荐使用 uv 包管理器
- 克隆或下载项目到本地
- 在项目目录中运行以下命令安装依赖:
# 使用uv安装依赖
uv sync
# 或者使用pip安装
pip install -r requirements.txt项目依赖以下主要包:
flet- 图形用户界面框架paddleocr- OCR文字识别引擎pymupdf- PDF文件处理pandas- 数据处理和导出numpy- 数值计算pillow- 图像处理openpyxl- Excel文件操作
# 使用uv运行
uv run main.py
# 或者直接运行Python文件
python main.py- 选择PDF文件:点击"上传PDF"按钮选择要处理的发票PDF文件
- 设置输出位置:点击"输出位置"按钮选择结果保存目录(默认为当前目录)
- 配置选项:可选择是否保存裁剪后的图片(用于调试)
- 开始处理:点击"开始处理"按钮,程序将自动处理PDF文件
- 查看结果:处理完成后,可点击"打开输出文件"按钮查看Excel结果
程序会生成一个Excel文件,包含以下字段:
| 字段 | 说明 |
|---|---|
| 页码 | 发票在PDF中的页码 |
| 发票代码 | 发票的唯一代码 |
| 发票号码 | 发票的编号 |
| 开票日期 | 发票开具日期 |
| 校验码 | 发票校验码 |
- PDFProcessor:负责PDF文件的解析和页面区域提取
- OCREngine:基于PaddleOCR的文字识别引擎
- InvoiceFieldExtractor:从识别文本中提取发票字段
- InvoiceProcessor:协调各组件完成整个处理流程
- InvoiceApp:基于Flet的图形用户界面
- PDF页面解析,提取右上角区域(横向70-100%,纵向0-25%)
- 对提取的图像进行OCR文字识别
- 使用正则表达式从识别文本中提取发票字段
- 将结果整理并导出为Excel文件
在 Constants 类中可以调整裁剪区域的参数:
CROP_LEFT_RATIO = 0.7 # 左边界比例
CROP_TOP_RATIO = 0.0 # 上边界比例
CROP_RIGHT_RATIO = 1.0 # 右边界比例
CROP_BOTTOM_RATIO = 0.2 # 下边界比例OCR引擎使用PaddleOCR,支持中文识别。默认配置:
- 启用角度分类
- 语言:中文
-
OCR识别率低
- 确保PDF文件清晰度足够
- 尝试调整裁剪区域参数
- 启用"保存裁剪后的图片"选项检查裁剪效果
-
PDF处理失败
- 检查PDF文件是否损坏
- 确认PDF文件权限是否可读
-
Excel导出失败
- 确保输出目录有写入权限
- 检查是否已存在同名文件被占用
应用界面底部提供实时日志显示,可以:
- 查看处理进度和状态
- 复制日志到剪贴板
- 识别错误信息
invoice/
├── main.py # 主程序文件
├── pyproject.toml # 项目配置和依赖
├── uv.lock # 依赖锁定文件
├── .python-version # Python版本配置
└── README.md # 项目说明文档
如需扩展功能或修改识别逻辑,主要关注以下类:
InvoiceFieldExtractor- 修改字段提取逻辑Constants- 调整应用常量InvoiceApp- 修改用户界面
本项目采用MIT许可证,详情请参阅LICENSE文件。
欢迎提交Issue和Pull Request来改进这个项目!
- 初始版本发布
- 实现基本的PDF发票识别功能
- 支持导出到Excel
- 提供图形用户界面