OFD 到底是个什么文件
OFD 是国家标准的版式文件(GB/T 33190),地位相当于中国自己的 PDF。 电子发票用它是有道理的:版式文件能保证十年后打开还是同一个样子, 这正是发票需要的性质。
但对系统来说它有个现实问题:Windows 不认识这个扩展名,Office 不认识, 大多数在线转换工具也不认识。于是一张合法合规的发票,落到会计手上第一步是 「打不开」。
拆开看,OFD 其实是一个 zip 包,里面是 XML:发票正文在
Doc_0/Pages/Page_0/Content.xml,每一段文字是一个
<ofd:TextObject>,带着自己在页面上的坐标。
也就是说,文字是好好地存在里面的,不需要 OCR,也不需要先转成 PDF。
为什么不是「先转 PDF 再说」
网上最常见的建议是找个工具把 OFD 转成 PDF。这条路能走通,但代价有三个:
- 要把发票传给别人。 在线转换意味着把公司一整年的进项票上传到 一个不知道是谁在运营的服务器上。发票上有供应商、金额、税号—— 这是一份完整的经营情况说明。
- 转完还是图。 转出来的 PDF 多数是把版面重画了一遍, 文字层未必还在。原本能直接读的字,转一次反而要靠 OCR 猜。
- 三百张要点三百次。 转换工具按张收费或按张限次, 而真正花时间的从来不是「看一张」,是「整理三百张」。
这里的做法是直接读 OFD 里的文字层,按坐标还原阅读顺序, 再走和 PDF 发票完全相同的字段抽取。中间不经过图片,也不经过第三方。
一次拖进来,出一张表
一行一张票:发票号码、开票日期、销方名称和税号、购方、金额、税额、 价税合计、发票类型。红章票(专票)和普票分得清, 作废和红冲的票单独标出来——红冲票在台账里是负数,混在正数里对不上账的时候最难找。
数字是从发票里读出来的,不是按税率反算的。这个差别在有零头的时候才显出来: 发票上写的是多少,表里就是多少,不会出现一个我们自己算出来的新数。
同一批里可以混着 OFD、PDF、图片、ZIP 包,甚至直接把 .eml /
Outlook 的 .msg 邮件拖进来——附件会自己被翻出来,
不用一封一封另存为。
重复的票会被拦下来
同一张票报销两次、或者三月已经入过账的票四月又混进来,是真的会出事的错误: 两个批次各自都干干净净,直到年底或者审计才发现。
批次内查重按发票号码加金额;跨批次靠本机的导出记录—— 导过的票再出现时会带上「已于某月某日导出」的标记。 这份记录只存在你这台电脑上,随时可以清掉。
做账的话,还能直接出凭证
进项票入账最花时间的一步是价税分离:一张票拆成三行,还要借贷相等。 几十张手工拆一遍是一下午。这里一键拆完,每张单独校验借贷相等, 凑不平的会被点名拦下,而不是默默写进去等导入时被打回。
科目只填一次,记在本机;代账可以按客户分账套,切换客户时工作区会清空—— 把两家客户的票混进同一批凭证是真会出事的错误,与其提醒不如直接杜绝。
文件不出这台电脑
所有解析都在你的浏览器里完成。不是「加密传输」,是根本没有传输, 而且你可以自己验:按 F12 打开「网络」面板,再拖一张发票进去, 不会有任何请求发出。第一次打开之后,断网也能用。
对代账公司来说这句话的意思是:客户的票据不会经过第三方—— 不是因为我们承诺,是因为它没有地方可去。
试试看
把文件拖到主页面上就行 —— 免费版每批 10 张、 每天 20 张,不用注册。