使用Rust编写的发票识别工具,自动识别和提取PDF发票信息,生成Excel清单。
- 🖥️ 图形化界面 - 使用egui构建的现代化GUI界面
- 📊 自动提取信息 - 发票号码、日期、购买方、销售方、金额等
- 🎯 高识别率 - PDF发票识别率接近100%
- ⚡ 高性能 - Rust原生性能,处理速度快
- 🔒 内存安全 - Rust的内存安全保证
- Rust 1.70 或更高版本
- macOS / Windows / Linux
如果还没有安装Rust,请访问 rustup.rs 安装。
cd invoice_rust
cargo build --releasecargo run --release或者直接运行编译后的可执行文件:
./target/release/invoice-extractor- 选择发票目录 - 点击"浏览..."按钮选择包含发票PDF文件的目录
- 输入购买方关键词 - 输入购买方公司名称的关键词(用于识别购买方)
- 选择输出文件 - 选择Excel文件的保存位置(可选,默认为发票目录下的"发票清单.xlsx")
- 开始识别 - 点击"开始识别"按钮,程序会自动处理所有发票文件
- 查看结果 - 处理完成后,在日志区域查看识别结果,Excel文件已保存到指定位置
程序会自动提取以下信息:
- 发票号码(20位数字)
- 开票日期
- 购买方名称
- 购买方税号
- 销售方名称
- 销售方税号
- 项目内容
- 金额
- GUI框架: egui + eframe
- PDF处理: pdf-extract
- 正则表达式: regex
- Excel生成: rust_xlsxwriter
- 文件对话框: rfd
invoice_rust/
├── Cargo.toml # 项目配置和依赖
├── README.md # 项目说明文档
└── src/
├── main.rs # 程序入口
├── extractor.rs # 发票信息提取核心逻辑
└── gui.rs # GUI界面实现
本项目使用基于规则的文本提取方法:
- PDF文本提取 - 使用pdf-extract库从PDF中提取纯文本
- 正则表达式匹配 - 使用多个正则表达式模式识别和提取不同的发票信息字段
- 关键词匹配 - 通过关键词识别销售方和购买方
- 上下文分析 - 从税号附近提取公司名称
- PDF发票销售方识别率: ~100%
- PDF发票金额识别率: ~100%
| 特性 | Python版本 | Rust版本 |
|---|---|---|
| 性能 | 中等 | 高 |
| 内存占用 | 较高 | 较低 |
| 启动速度 | 较慢 | 快 |
| 跨平台 | 是 | 是 |
| GUI框架 | tkinter | egui |
| 依赖管理 | pip | Cargo |
- 修改
src/extractor.rs添加新的提取逻辑 - 修改
src/gui.rs更新界面 - 运行
cargo test进行测试
cargo build --release可执行文件位于 target/release/invoice-extractor
MIT