软件简介:
发票酱 – 发票批量打印工具,轻量桌面应用+WEB模式,支持 PDF、OFD、XML、图片等多格式,一键识别发票数据,快速排版、打印、重命名或导出。
功能特性:
🏆 OFD 完整支持
OFD(开放版式文档)是国家标准电子发票格式,本工具提供原生完整支持 — 矢量渲染、发票信息直提、印章保真,拖入即用,无需 OCR。
⚠️ 不同厂商/转换工具生成的 OFD 发票格式存在差异(如税务原版 OFD、iloveofd 转换、dzcp 公共服务平台等),如遇解析渲染问题请及时反馈,我们会持续适配。
📥 文件管理
多格式支持:PDF、OFD、XML 数电票、JPG、PNG、BMP、WebP、TIFF
XML 数电票(v2.0.7):解析 格式,提取发票号码/日期/金额/买卖方信息,汇总表、CSV 导出、批量重命名全兼容;纯数据格式不参与排版打印
文件列表记忆(v2.0.7):可选开关,启动时自动恢复上次打开的文件列表,仅记忆文件路径
打印状态追踪(v2.0.7):三种过滤(全部/未打印/已打印),打印后自动标记绿色 ✓,状态持久化
PDF 渲染双引擎(v1.10.0+):首选 WinRT 原生渲染(Windows.Data.Pdf),自动 fallback PDFium(Chromium 内核),兼容企业精简版/LTSC 系统
PDF 文字层提取(轻量版也可用):解析 PDF 内容流 Tm+Tj/TJ 指令直接提取文字坐标,~5ms/页,无需 OCR 即可识别发票信息
PP-OCRv5 智能识别(OCR 版,适用于图片型 PDF 和图片):文本优先 + 坐标回退双重架构,含税价 / 不含税价 / 税额数学验证配对,发票号码 / 日期 / 买卖方信息自动提取
金额校验可视化:OCR / PDF 提取金额求和校验失败时,发票卡片金额徽章 ⚠ 警告标识,hover 可查看含税/不含税/税额验证详情
EXIF 方向自动修正:导入图片/车票时自动读取 EXIF Orientation 旋转像素,PDF /Rotate 属性 + CropBox 坐标归一化保障页面方向正确
发票查验:一键跳转国家税务总局查验平台
骨架屏渐进加载:批量导入时骨架屏秒出 + 逐文件渐进渲染 + 持久进度 toast,大文件不卡 UI
日期排序(v2.0.8):📅 按钮弹出菜单,可选旧→新 / 新→旧,空日期自动排末尾
↑↓ 排序:↑↓ 按钮排序(替换 Tauri webview 拖拽卡顿),hover 浮动显示不占空间
批量重命名(v2.0.5):汇总表内嵌面板,预设模板(金额+销售方+号码等)或自定义字段勾选,一键批量重命名发票磁盘文件,重名自动序号
重复发票识别与去重(v2.2.2 / v2.3.1):按发票号自动检测可靠重复并支持「添加时自动去重」与「重复」筛选一键勾选删除;无发票号时按 销售方+金额+日期 仅作 ⚠ 疑似标记,不自动删除,避免误删同日同额的真发票
空白槽位加号上传(v2.2.2):版面空白格子显示加号,点击上传并按需精准落位(支持版面中间留白,占位可替换/删除)
设置自动记忆:关闭后自动记住布局、纸张、打印模式等全部设置,打开即恢复
📐 排版设置
纸张:A4 / A5 / B5 / Letter / Legal / 自定义
布局:6 个固定预设 + 自定义行列(1-10 × 1-10),自动横纵方向
快捷布局:顶部快捷按钮默认提供 1×1 / 1×2 / 2×3 / 2×1 / 2×2 / 3×3 / 4×5,可增删、编辑、排序并限制显示数量;配置自动记忆,允许全部删除
边距 / 间距:独立可调,预设快捷按钮
缩放:自适应 / 拉伸填充 / 原始大小 / 自定义百分比
旋转:全局 0° / 90° / 180° / 270° / 自动 + 单张旋转
单票独立调整(v1.9.0+,v2.0.1-v2.0.2, v2.0.8 增强):每张发票预览拖拽移动 + 角落 handle 缩放,九宫格快速对齐,滚轮微调 + 滚轮单票缩放(5%/步),±150mm 偏移范围,拖拽约束动态化,放大上限 3x,编辑态溢出预览,打印区域虚线标识,双击重置,调整参数可选持久化记忆,侧边栏「单票调整」面板或发票弹窗参数编辑,PDF 按参数裁剪输出
✂️ 辅助功能
裁切线、编号标记、边框显示、裁剪白边、自定义水印
金额统计、车票票种标签、发票类型自动检测
页脚:打印页码(第 X 页 / 共 Y 页)、打印日期、自定义页脚文本,独立下边距控制
📊 数据导出
发票汇总表(v2.0.3):报销必备,一键导出所有发票明细,字段可勾选(14 项),金额/名称等可直接编辑修正,合计行自动汇总含税/不含税/税额,CSV 格式 Excel 直接打开,列选择和备注持久化记忆
🖨️ 打印与导出
打印模式:四种模式可选
PDF 阅读器(默认):生成 PDF 后由系统默认程序处理,保持矢量质量,数据量最小
弹窗确认:预览后确认打印,可选 PDFium 或 SumatraPDF 引擎
静默打印(PDFium):Chromium PDFium 引擎直打打印机 DC,打印清晰(需下载 pdfium.dll)
静默打印(SumatraPDF):通过 SumatraPDF 直接发送到打印机(需安装 SumatraPDF)
PDF 统一直通(v1.9.0+):lopdf Form XObject + JPEG DCTDecode 直通,PDF 页面以原始质量嵌入合成 PDF,无二次压缩
印章烘焙(v2.0.4):生成 PDF 时自动将原票印章/签章标注烘焙到输出,印章位置/大小与原票一致
份数控制:全局 + 单张份数,逐份 / 逐页打印,双面打印,彩色 / 灰度 / 黑白
PDF 导出:自动打开或自定义保存目录
确认弹窗:打印前显示发票数量 / 版面 / 纸张 / 打印机 / 引擎 / 份数,防止误操作
🎨 界面
深色 / 浅色模式、实时预览(缩放 + 翻页)
快捷键:Ctrl+O 添加 · Ctrl+P 打印 · Ctrl++/- 缩放 · Ctrl+0 自适应 · ←→ 翻页
系统要求:
仅支持 Windows 10 1803 及以上版本 或 Windows 11。
更新日志:
更新原版 v2.6.2、更新 仅剩执着 基于 chenghaitao 分支的BUG修复版
v2.6.2 (原版)
✨ 新增
裁剪留边可配置:「排版 → 辅助选项」的「裁剪白边」下方新增「留边」输入框 —— 裁剪时向外保留的像素数,默认 3(≈0.25mm),范围 0–60(≈0–5mm,上限取 60 是因为再大就失去”裁掉白边”的意义,也避免极端值让裁剪框反转)。改动后自动清空白边缓存并按新值重算,随设置持久化;Rust 端 trim_white_box / trim_white_edges 增加 pad 参数,trim_image 命令与 RenderSettings.trimPad(位图导出路径)同步生效
🐛 修复
裁剪白边只进了预览,进不了 PDF:PDF 发票走 lopdf 矢量直通时,extract_page_as_form_xobject() 嵌入的是整页原件,完全没读 trim_white,于是”预览白了、打印没白”。现在前端把预览检测到的裁剪框一并传给 Rust,直通路径按裁剪框做矢量裁切(平移 + 收窄 BBox)——白边真正裁掉,同时保留矢量文字的清晰度
裁剪框按「旋转后显示坐标系」换算:像素原点左上 → PDF 点原点左下,/Rotate 页面同样成立;空框/无效框自动忽略,退回整页
裁剪后按内容比例适配:预览、拖拽范围约束、九宫格对齐与 PDF 导出统一走 getObjDims(),裁剪后的发票按裁剪尺寸铺满槽位;「自动旋转」也改为按裁剪后的内容比例判断方向
trim_image 返回结构变更:由纯 dataURL 改为 { dataUrl, trimBox };trim_white_edges() 同步返回裁剪框,新增独立可复用的 trim_white_box()
浅灰细字被当白边裁掉:发票右侧「下载次数:1」是 250 上下的浅灰细字,原 245 阈值把它算作白边(合成图实测复现:灰度 250/252 直接裁到主体边界,裁剪后即”消失”)。阈值提到 253,并要求一行/列至少 2 个非白像素才算「有内容」以抑制孤立浅色噪点(电子发票白底是纯白 255,放宽阈值无副作用)
印章/文字边缘被裁掉一点点:内容边缘经「抗锯齿 + JPEG」后会有一圈 253~254 的淡像素,原阈值 252 把它判为白 → 检测边界内缩;且向外留边距(pad)只有 5px(≈0.42mm)。改为检测准确 + pad 收敛:四边统一 3px(≈0.25mm)(曾按方向加大兜底,会让没有「下载次数」字段的发票白白多留白边)
左右两侧白边收不干净(pad 兜底 + 列检测范围):右侧曾单独设 28px pad 兜「下载次数」,但那是无差别的 —— 没有该字段的发票会白白多留 2.4mm。同时列统计此前限定在行检测的 top..bottom 内,位于该范围外的左右内容(如超出主体行范围的竖排浅字)会被漏检、边界内缩。现改为列统计扫全高(0..h) + 四边统一 3px,实测(4855 真实样本)四边保留均为 0.25mm
左/上白边裁不干净:页面边缘的浅灰渐变(R=G=B≈252)被 253 的宽松阈值当成内容 → 上下/左侧边界停在渐变处。改为分方向阈值:上下方向用严格的 EDGE_THRESHOLD=245(只认彩色/深色内容 —— 红章是彩色的 min 通道很低照样保留,纯灰渐变被正确忽略),左右方向保持 253(继续保护浅色小字)
加载发票后没自动裁剪:「裁剪白边」开关是跨会话记忆的,但批量加载完成后没有任何触发点(此前只在切换开关/还原/增强时裁剪),表现为”开关是开的、加载后却没裁”。在三处加载收口点新增 maybeAutoTrim() 自动补裁剪
裁剪后垂直贴顶:裁剪白边后图片宽高比变化,contain 适配后在槽位内垂直居中,上方留白看起来像”白边没裁掉”。现改为开启「裁剪白边」时垂直贴顶(水平仍居中)——build_nup_content_stream 的 offset_y(与报销单模式同款贴顶逻辑)、预览 layout.js 的 wrapper top、HTML 打印路径的 align-items 三处同步
边缘细线”厚度过滤”已回退:曾为解决”页面边缘浅灰细线顶住上下白边”引入 MIN_CONTENT_THICKNESS(浅灰内容需连续 ≥4 像素),但它会误伤横排文字的左右边界(笔画在水平方向不连续),把「下载次数」又裁掉,故回退为「阈值 252 + 每行/列至少 2 个非白像素」。代价:页面边缘若有浅灰细线,上下白边会保留(实测数据见下表)
📌 说明
图片/OFD 发票本来就走位图路径(裁剪烘焙进像素),不受此缺陷影响;只有 PDF 发票受影响
Web 版同一缺陷已在 v3.4.2 修复,两版行为现已一致
v2.6.3
🐛 修复
左侧列表拖动排序:排序后按发票对象重新定位预览页和槽位,支持多月份发票、排版多份及正/倒序显示,序号与实际顺序保持一致
侧栏金额显示:侧栏宽度改为响应式自适应,金额和排版份数徽章允许换行,避免内容被截断
NSIS 安装包图标:安装器图标统一使用 src-tauri/icons/icon.ico
开源地址:
原版:https://github.com/erma0/fapiao-print
分支:https://github.com/chenghaitao/fapiao-print
下载地址:
软件截图:

贰五软库








