OFD解析数据流程分享

最近接到公司任务,应客户要求要做ofd格式文件的电票识别。刚接到任务的时候我对于ofd格式文件知道的少之甚少。之前只是听到同事提起过这样的一种格式。在我当时的认知里就单纯的知道他是"中国版的PDF"。对于他的底层实现和用途一无所知。所以我接到任务的时候就着手规划解决流程。

  1. 先了解ofd底层实现,解析构造文件
  2. 熟悉构造文件的实现原理,根据文件特性提取数据
  3. 结构化数据,并根据数据特点重构造。

1. ofd文件特性

简短的说一下ofd文件吧,想详细了解的建议去看一下电子文件存储与交换 板式文档。需要的可以私信我。
OFD格式是我国自bai主可控的电子文件版式文档du格式。我有时候会跟zhi别人解释国产PDF。

在OFD格式产生之前,dao电子文件存档格式并没有统一的国家或行业标准,档案工作中普遍采用DOC、WPS、PPTX等流式文件格式。内容易更改、转移过程存在安全隐患,并不符合电子文件长期保存要求。

一些格式依赖非自主可控技术,使用和服务都受限于外部厂商和技术,存在安全隐患。格式标准不公开,私有版式文档的格式解析、标准解释掌握在国外企业手中,文档信息资源的保密性存在隐患。

OFD格式优势

1 产权属于自主产权

2 具有便携性:文件小,可压缩比率大。测试显示生成的文件体量比PDF还要小。

3 具有开放性:易于入门,对于使用者来说更具开放性。

4 具有扩展性:预留了可扩展入口和自定义标引,设置了非接触式引用机制,为特性化提供支持。

5 呈现效果与设备无关,在各种设备上阅读、打印或印刷时,版面固定、不跑版。

6 应用广泛:无论是电子商务、电子公务,还是信息发布、文件交换,档案管理等都需要版式文档的技术支持。

据我了解,现在国内很多档案馆已经开始用OFD版式文档存档了,毕竟响应国家号召
OFD采用的是"容器+文档"的方式描述和存储数据,容器是一个虚拟存储系统,将各类数据描述文件聚合起来,并提供相应的访问接口和数据压缩方法。


现在我们要知道OFD文件层次组织结构


在我看来ofd文件最为重要的一点是底层通过xml来进行构造。使得板式固定和文件的稳定。既然是xml来实现那我们就可以通过xml入手。
新手的可以把ofd文件后缀改为zip(ofd本身就是压缩文件,文件名不是文件的一部分,是文件系统的一部分。文件名只是文件在文件系统中的映射标记,文件本身并不包含文件名)在进行解压就可以看到文件结构了


OFD文件层次组织结构

OFD.XML | 文件主入口文件,一个包内存在且只存在一个OFD.xml文件,此文件名不应修改
DOC_N | 第N个文档的文件夹
Document.xml | 文档的根节点
Page_N | 第N页文件夹
Content.cml | 第N页的内容描述
PageRes.xml | 第N页的资源描述
Res | 资源文件夹
PublicRes.xml | 文档公共资源索引
DocumentRes.xml | 文档自身资源索引
Image_M.png/Font_M.ttf | 资源文件
Signs | 数字签名存储目录
Singatures.xml | 签名列表文件
Sign_N | 第N个签名/签章
Signature.xml | 签名/签章描述文件
Seal.esl | 电子印章文件
SignedValue.dat | 签名值文件

我们看到OFD.XML 为主入口文件,OFD.xml文件的结构


我们可以在主入口文件里面找到根文件(Document.xml)的相对位置,根文件里面会有我们所需的数据文件的索引。
一般来看我们简单提取文件中的数据我们只需要找到数据文件包括(文本数据及bbox的坐标,线条的坐标)在重构造了。我那示例图来说一下我们所需要的的数据。

我们在图上可以看到有"重庆增值税电子普通发票 发票代码: "这样的红色文本,还有"050001700111"这样的黑色文本,还有红色的线条。这是我们所需要的 当然还会有二维码和印章,提取方式都是一样的。我们按照前三类去提取讲解。

数据提取思路
我们根据主入口文件找到根文件在根据找到数据文件,在根据数据文件去解析数据就OK。
1.先找到主入口文件,这个当然容易因为他就在最外层并且命名不会改变。我们现在就来看一下他的内容。


我们能看到图中红框的就是根文件的相对目录。我们可以把xml文件转成json处理,这个操作不会的同学们自行百度,或者私信我。我们再来看一下这个根文件内容。

我们能看到红框1中的相对路径中的文件是上面提到的红色字体和线条的数据存放文件,红框2中的相对路径的文件是黑色字体的数据存放文件。我们解析出数据存放的文件路径那我们就可以去解析数据了。我们分别来看一下这两类数据文件内容。

我们虽然找到了这个数据文件,但是数据结构还是比较复杂的,我是通过递归去找到需要的数据。当然同学们也可以评论自己更好的方法。Boundary四位数分别代表的是 x y w h。(ofd是左上角的x,y。pdf是左下角的x,y)这样我们就可以根据计算提供了x_mix,y_mix,x_max,y_max了这样我们就可以画出bbox了。线条和红色字体也是同一道理.这样我们可以根据自己的需求去重结构化了。当然这是高度个性化的开发,所以我这边就不做陈述了。

这样我们就可以把ofd数据解析出来了,本人学识浅陋,对博大精深之ofd文件操作理论仅略知皮毛,在本文章中错谬之处在所难免,若蒙读者诸君不吝指出,将不胜感激.
2020年8月于北京
————————————————
版权声明:本文为CSDN博主「Winston.H」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u013823545/article/details/108151914

OFD文件解析流程(转)相关推荐

  1. Android中measure过程、WRAP_CONTENT详解以及 xml布局文件解析流程浅析

    转自:http://www.uml.org.cn/mobiledev/201211221.asp 今天,我着重讲解下如下三个内容: measure过程 WRAP_CONTENT.MATCH_PAREN ...

  2. Android中measure过程、WRAP_CONTENT详解以及xml布局文件解析流程浅析(下)

       本文原创, 转载请注明出处:http://blog.csdn.net/qinjuning 上篇文章<<Android中measure过程.WRAP_CONTENT详解以及xml布局文 ...

  3. Android中measure过程、WRAP_CONTENT详解以及xml布局文件解析流程浅析(上)

    在之前一篇博文中<< Android中View绘制流程以及invalidate()等相关方法分析>> ,简单的阐述 了 Android View 绘制流程的三个步骤,即: 1. ...

  4. 1.MyBatis源码解析-XML解析流程--阿呆中二

    XML解析流程 MyBatis XML解析流程 与我联系 MyBatis 本文是对mybatis 3.x源码深度解析与最佳实践学习的总结,包括XML文件解析流程.SqlSession构建流程.CRUD ...

  5. Activiti的流程定义文件解析

    2019独角兽企业重金招聘Python工程师标准>>> 在实现流程的模拟运行时,需获取流程定义中的相关活动节点信息,故需对流程定义文件进行解析. 此处对流程定义文件的解析,主要是通过 ...

  6. ofd转成html,基于HTML5的OFD文件在线显示的方法以及装置与流程

    技术特征: 1.一种基于HTML5的OFD文件在线显示的方法,其特征在于:包括如下步骤: 步骤1.服务器端将OFD文件压缩包进行解压,并将解压后得到的OFD文档目录结构映射至HTML5客户端的URL: ...

  7. HTML页面加载和解析流程详细介绍

    浏览器加载和渲染html的顺序.如何加快HTML页面加载速度.HTML页面加载和解析流程等等,在本文将为大家详细介绍下,感兴趣的朋友不要错过 浏览器加载和渲染html的顺序 1. IE下载的顺序是从上 ...

  8. linux优化网页加载过程,HTML页面加载和解析流程 介绍

    1.浏览器加载和渲染html的顺序 1.1.IE下载的顺序是从上到下,渲染的顺序也是从上到下,下载和渲染是同时进行的. 1.2.在渲染到页面的某一部分时,其上面的所有部分都已经下载完成(并不是说所有相 ...

  9. html中加载解析,HTML页面加载和解析流程详细介绍

    序言: 我一直都认为"网页制作"这个词是一个不怎么高端的词,在我的印象中网页制作的词是没有生命力的一个制作,我喜欢用HTML 这样简单直接,这词凸显高端,有大气漂亮的UI.一套完美 ...

  10. MyBatis 源码分析 - 映射文件解析过程

    1.简介 在上一篇文章中,我详细分析了 MyBatis 配置文件的解析过程.由于上一篇文章的篇幅比较大,加之映射文件解析过程也比较复杂的原因.所以我将映射文件解析过程的分析内容从上一篇文章中抽取出来, ...

最新文章

  1. 二叉树 1.0 -- 创建二叉树、遍历二叉树、二叉树常见问题求解
  2. Struts(七):action配置文件之通配符映射
  3. STM32系统时钟默认设置
  4. 位操作的应用:无参数交换数据,异或加密,循环移位加密【位操作】(56)
  5. QT的QDrag类的使用
  6. scrapy的Middleware
  7. 讲100个科学道理,不如做这些有趣的理科实验!
  8. Devoxx的Red Hat Engineers提供了更多Java EE
  9. CentOS关闭图形界面(x window)
  10. html5 valid,html5中valid、invalid、required的定义
  11. Luogu1095 守望者的逃离
  12. 力软下拉框多选_力软快速开发平台:方便快捷的Web开发平台
  13. html自定义修改单选框多选框样式以及获取选中的值
  14. 利用矩阵特征值求解多项式的根
  15. appcrash事件怎么解决?三种方法教你
  16. 电脑显示黑屏但是鼠标能动怎么处理?
  17. 台式机设置声音快捷键
  18. 面试产品经理时如何回答“为什么想做产品经理”这个问题
  19. 民间秘方是一个老中医几十年的心血
  20. Vue中的@blur/@focus事件

热门文章

  1. HDFView安装及使用教程
  2. 美团外卖订单系统演进
  3. Vue 中播放帧动画(抽离方法)
  4. 全国计算机软考程序员考试大纲(2012)
  5. 史上最全高级Java教程总结版(强烈建议收藏)
  6. 小白能读懂的 《手把手教你学DSP(TMS320X281X)》第六章 F2812的存储器映像
  7. 先进过程工业控制与组态软件
  8. java企业员工考勤系统ssm框架
  9. 手机端通讯录制作,字母索引查找
  10. 基于Springboot+Mybatisplus的学校学院门户学生就业指导管理系统