我用 C# 开发了一款电子发票自动整理工具

上个月,一个做财务的朋友跟我抱怨:

邮箱、微信、网盘里全是电子发票 PDF,有的还打成 ZIP。

月底入账就得一个个打开,抄号码、日期、金额......坐一下午是常态。

我下意识回了一句:「这玩意儿不就是解析 PDF、填 Excel 吗?」

朋友白了我一眼:「你说得轻巧。」

说完我就后悔了------因为我是写 C# 的,这句话等于给自己挖了个坑。

于是有了 发票助手 Pro :面向中小企业财务、外贸、代账场景的电子发票批量整理工具。

今天把从吐槽到上线的过程写下来,给同样被「重复劳动」折磨的人,也给对 .NET 桌面工具感兴趣的开发者。


一、问题不是「会不会转 Excel」,而是「适不适合你们的表」

市面上并不缺「PDF 转 Excel」。但财务真正要的往往是:

  1. 一次扔进整月压缩包,而不是一张张选文件
  2. 抽出能入账的字段(号码、日期、买卖方、金额、税额、明细)
  3. 填进公司已经在用的 Excel 模板,而不是再适应一款软件的固定表头
  4. 金额对得上------价税合计、明细加总、行内税率,错了要标出来

所以我从一开始就没把产品定位成「转换器」,而是:

企业发票自动整理工具 ------ 解析引擎 + 标准数据模型 + 模板输出。

价值叙事很简单:

复制代码
1000 张发票 → 批量解析 → 校验勾稽 → 套你们的模板 → 接近可入账的台账

二、为什么用 C# / .NET?

个人偏好和技术现实叠在一起:

选择 原因
C# / .NET 10 我更熟,类型系统适合做票据规则与金额计算
MAUI 桌面端 财务习惯本地跑、数据留在自己电脑
PdfPig 抽文本 国内全电票多数带文本层,优先规则解析,成本可控
自研 Parser 路由 普票 / 地区版式 / 电商「甩值」布局差异大,要可扩展

技术上踩过的坑,比想象中「读个 PDF」脏得多:

  • 有的票版面好看,文本层却是空模板 + 末尾甩值
  • 买卖方公司名、税号可能粘在一行没空格
  • 折扣行税额和税率会合成离谱的 38.5413%
  • 竖排「销售方信息」先于「购买方」,赋值顺序一反就「销售方空白」

这些不会出现在宣传页上,但决定了「能不能真的省时间」。

解析之后还有一层 金额勾稽:对不上的票在预览里标「异」,优先人工复核------软件负责提速,人不负责闭眼相信。

架构上大概是这样(开发者可略看):

复制代码
PDF/ZIP
  → 文本提取
  → 票种检测
  → ParserRegistry(多 Parser 路由)
  → InvoiceInfo 标准模型
  → 金额校验
  → 默认 Excel / CSV,或自定义模板填充

授权与更新走国内服务(激活、版本检查),企业版支持离线场景------这是另一篇文章的事。


三、现在能做什么?

对用户侧,当前大致能力:

  • 拖拽 / 选择 PDF,ZIP 批量解压再解析
  • 电子发票(普通发票)等常见文本票解析
  • 汇总 + 明细导出,专业版支持 CSV 、自定义 Excel 模板 + 字段映射
  • 预览阶段做金额勾稽,异常票优先复核
  • 免费体验(每天有额度);个人版 / 专业版买断;企业年费

也提供 代整理服务:发票包发过来,整理成 Excel(也可按公司模板),适合月底实在没空自己跑的人。


四、写给同类开发者的几句实话

  1. 先服务,再软件也可以。早期用「代整理」收真实样本和反馈,比空想功能列表快。
  2. 中国财务更认买断。 个人/专业版永久,企业再谈年费,比硬推纯订阅省心。
  3. 规则解析有天花板。 扫描件、复杂版式后面要上 OCR;但文本票把规则做透,已经能覆盖大量刚需。
  4. 本地工具要过「信任关」。 安装包体积、更新、授权、售后话术,和解析准确率一样影响复购。

五、写在最后

这不是一个「改变世界」的项目,只是把一件月底反复发生的苦差事,变成几分钟的批量活。

若你是:

  • 财务 / 外贸 / 代账,每月被电子发票折磨
  • 或用 .NET 做工具型产品的同行

欢迎试试 发票助手 Pro,或把样本票发我聊聊场景。

也欢迎转发------说不定你朋友圈里,就有一个正在对着 ZIP 叹气的人。


相关推荐
csdn_aspnet2 小时前
C# .NetCore Swagger ISchemaFilter Long 转 String 防精度丢失
c#·.netcore·swagger
下页、再停留19 小时前
【C#桌面客户端系列学习-11】将SQLite数据库打包到exe里
数据库·c#·visual studio
下页、再停留19 小时前
【C#桌面客户端系列学习-12】封装SQLite数据库基础操作工具类(CURD)
数据库·c#·visual studio
dwm8888888821 小时前
c# 创建使用本地NuGet包
开发语言·c#
进击的大海贼1 天前
【无标题】
c#
csdn_aspnet1 天前
C# .NetCore Swagger ISchemaFilter 注入示例值、描述
c#·.netcore·swagger
海天鹰1 天前
C#:object.ShortcutKeys 不支持非功能单独按键
c#
下页、再停留1 天前
【C#桌面客户端系列学习-10】连接SQLite数据库
数据库·c#·visual studio