一个本地运行的发票 / 报销单打印排版工具。适合把电子发票、行程单、火车票、住宿票据等整理到 A4 页面,并生成差旅费报销单首页。
项目默认在本机运行,文件和 OCR 处理都在本地完成,适合个人报销整理场景。
- 按费用类型上传:飞机车船费、市区交通费、旅馆费、其他
- 支持拖拽上传图片或 PDF
- A4 打印排版:普通发票上下两张,火车票半页最多 6 张
- 市区交通费图片自动裁剪白边
- 独立打印页,支持 macOS / Windows 打印快捷键提示
- 差旅费报销单首页,可填写公司名、部门、姓名、事由 / 项目
- 报销单信息可手动保存到浏览器本地,下次打开自动恢复
- 本地 PaddleOCR 服务,支持图片和 PDF OCR
- 多语言 i18n:简体中文、繁体中文、English、日本語、한국어、Deutsch、Français、Español
- 提供 favicon / manifest,方便在面板工具中添加为本地应用
先确保已经安装 Docker Desktop。
git clone git@github.com:OneBigMoon/Invoice-Printing.git
cd Invoice-Printing
docker compose up --build -d打开浏览器访问:
http://127.0.0.1:4173/
OCR 服务地址:
http://127.0.0.1:8765/ocr
首次启动 PaddleOCR 可能需要下载模型,时间会稍长。
建议使用 Python 3.10。
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python -m http.server 4173另开一个终端启动 OCR:
source .venv/bin/activate
python ocr_server.py然后访问:
http://127.0.0.1:4173/
- 在左侧选择对应费用类型上传文件。
- 报销单首页会自动出现在右侧预览第一张。
- 在“报销单信息”中填写公司名、部门、姓名、事由 / 项目。
- 点击“保存到本地浏览器”,下次打开会自动恢复这些信息。
- 如需填写起止时间和地点,可直接在报销单表格内编辑,并可新增行。
- OCR 回填后请人工检查金额、时间、地点是否正确。
- 点击“打印”进入独立打印页,再确认打印。
以下字段可点击“保存到本地浏览器”后保存在浏览器本地:
- 公司名
- 部门
- 姓名
- 事由 / 项目
缓存使用 localStorage.invoiceExpenseForm。填写时会立即更新当前预览,但只有点击保存按钮才会写入浏览器本地缓存。如果要清空,可以在浏览器开发者工具中删除该项。
公司名默认为空。为空时,打印页不会显示公司名标题,方便公开部署或多人共用。
语言包集中在 i18n.js。
支持 URL 参数指定语言:
http://127.0.0.1:4173/?lang=en
http://127.0.0.1:4173/?lang=ja
支持的语言代码:
zh-CNzh-TWenjakodefres
启动或更新:
docker compose up --build -d查看日志:
docker compose logs -f停止服务:
docker compose down如果需要删除 OCR 模型缓存卷:
docker compose down -v.
├── index.html # 主页面
├── print.html # 独立打印页
├── i18n.js # 多语言字典和 i18n 工具
├── ocr_server.py # 本地 OCR 服务
├── requirements.txt # Python 依赖
├── Dockerfile
├── docker-compose.yml
├── favicon.svg
├── favicon.ico
├── icon-192.png
├── icon-512.png
└── site.webmanifest
默认部署方式下,上传文件只在本地浏览器预览,并发送到本机 OCR 服务识别。请不要把服务暴露到公网,除非你已经增加了访问控制。
MIT