OFD文件解析流程
OFD解析數(shù)據(jù)流程分享
最近接到公司任務(wù),應(yīng)客戶要求要做ofd格式文件的電票識(shí)別。剛接到任務(wù)的時(shí)候我對(duì)于ofd格式文件知道的少之甚少。之前只是聽到同事提起過這樣的一種格式。在我當(dāng)時(shí)的認(rèn)知里就單純的知道他是"中國版的PDF"。對(duì)于他的底層實(shí)現(xiàn)和用途一無所知。所以我接到任務(wù)的時(shí)候就著手規(guī)劃解決流程。
1. ofd文件特性
簡(jiǎn)短的說一下ofd文件吧,想詳細(xì)了解的建議去看一下電子文件存儲(chǔ)與交換 板式文檔。需要的可以私信我。
OFD格式是我國自主可控的電子文件版式文檔格式。我有時(shí)候會(huì)跟別人解釋國產(chǎn)PDF。
在OFD格式產(chǎn)生之前,電子文件存檔格式并沒有統(tǒng)一的國家或行業(yè)標(biāo)準(zhǔn),檔案工作中普遍采用DOC、WPS、PPTX等流式文件格式。內(nèi)容易更改、轉(zhuǎn)移過程存在安全隱患,并不符合電子文件長(zhǎng)期保存要求。
一些格式依賴非自主可控技術(shù),使用和服務(wù)都受限于外部廠商和技術(shù),存在安全隱患。格式標(biāo)準(zhǔn)不公開,私有版式文檔的格式解析、標(biāo)準(zhǔn)解釋掌握在國外企業(yè)手中,文檔信息資源的保密性存在隱患。
OFD格式優(yōu)勢(shì)
1 產(chǎn)權(quán)屬于自主產(chǎn)權(quán)
2 具有便攜性:文件小,可壓縮比率大。測(cè)試顯示生成的文件體量比PDF還要小。
3 具有開放性:易于入門,對(duì)于使用者來說更具開放性。
4 具有擴(kuò)展性:預(yù)留了可擴(kuò)展入口和自定義標(biāo)引,設(shè)置了非接觸式引用機(jī)制,為特性化提供支持。
5 呈現(xiàn)效果與設(shè)備無關(guān),在各種設(shè)備上閱讀、打印或印刷時(shí),版面固定、不跑版。
6 應(yīng)用廣泛:無論是電子商務(wù)、電子公務(wù),還是信息發(fā)布、文件交換,檔案管理等都需要版式文檔的技術(shù)支持。
據(jù)我了解,現(xiàn)在國內(nèi)很多檔案館已經(jīng)開始用OFD版式文檔存檔了,畢竟響應(yīng)國家號(hào)召
OFD采用的是"容器+文檔"的方式描述和存儲(chǔ)數(shù)據(jù),容器是一個(gè)虛擬存儲(chǔ)系統(tǒng),將各類數(shù)據(jù)描述文件聚合起來,并提供相應(yīng)的訪問接口和數(shù)據(jù)壓縮方法。
現(xiàn)在我們要知道OFD文件層次組織結(jié)構(gòu)
在我看來ofd文件最為重要的一點(diǎn)是底層通過xml來進(jìn)行構(gòu)造。使得板式固定和文件的穩(wěn)定。既然是xml來實(shí)現(xiàn)那我們就可以通過xml入手。
新手的可以把ofd文件后綴改為zip(ofd本身就是壓縮文件,文件名不是文件的一部分,是文件系統(tǒng)的一部分。文件名只是文件在文件系統(tǒng)中的映射標(biāo)記,文件本身并不包含文件名)在進(jìn)行解壓就可以看到文件結(jié)構(gòu)了
OFD文件層次組織結(jié)構(gòu)
OFD.XML | 文件主入口文件,一個(gè)包內(nèi)存在且只存在一個(gè)OFD.xml文件,此文件名不應(yīng)修改
DOC_N | 第N個(gè)文檔的文件夾
Document.xml | 文檔的根節(jié)點(diǎn)
Page_N | 第N頁文件夾
Content.cml | 第N頁的內(nèi)容描述
PageRes.xml | 第N頁的資源描述
Res | 資源文件夾
PublicRes.xml | 文檔公共資源索引
DocumentRes.xml | 文檔自身資源索引
Image_M.png/Font_M.ttf | 資源文件
Signs | 數(shù)字簽名存儲(chǔ)目錄
Singatures.xml | 簽名列表文件
Sign_N | 第N個(gè)簽名/簽章
Signature.xml | 簽名/簽章描述文件
Seal.esl | 電子印章文件
SignedValue.dat | 簽名值文件
我們看到OFD.XML 為主入口文件,OFD.xml文件的結(jié)構(gòu)
我們可以在主入口文件里面找到根文件(Document.xml)的相對(duì)位置,根文件里面會(huì)有我們所需的數(shù)據(jù)文件的索引。
一般來看我們簡(jiǎn)單提取文件中的數(shù)據(jù)我們只需要找到數(shù)據(jù)文件包括(文本數(shù)據(jù)及bbox的坐標(biāo),線條的坐標(biāo))在重構(gòu)造了。我那示例圖來說一下我們所需要的的數(shù)據(jù)。
我們?cè)趫D上可以看到有"重慶增值稅電子普通發(fā)票 發(fā)票代碼: "這樣的紅色文本,還有"050001700111"這樣的黑色文本,還有紅色的線條。這是我們所需要的 當(dāng)然還會(huì)有二維碼和印章,提取方式都是一樣的。我們按照前三類去提取講解。
數(shù)據(jù)提取思路
我們根據(jù)主入口文件找到根文件在根據(jù)找到數(shù)據(jù)文件,在根據(jù)數(shù)據(jù)文件去解析數(shù)據(jù)就OK。
1.先找到主入口文件,這個(gè)當(dāng)然容易因?yàn)樗驮谧钔鈱硬⑶颐粫?huì)改變。我們現(xiàn)在就來看一下他的內(nèi)容。
我們能看到圖中紅框的就是根文件的相對(duì)目錄。我們可以把xml文件轉(zhuǎn)成json處理,這個(gè)操作不會(huì)的同學(xué)們自行百度,或者私信我。我們?cè)賮砜匆幌逻@個(gè)根文件內(nèi)容。
我們能看到紅框1中的相對(duì)路徑中的文件是上面提到的紅色字體和線條的數(shù)據(jù)存放文件,紅框2中的相對(duì)路徑的文件是黑色字體的數(shù)據(jù)存放文件。我們解析出數(shù)據(jù)存放的文件路徑那我們就可以去解析數(shù)據(jù)了。我們分別來看一下這兩類數(shù)據(jù)文件內(nèi)容。
我們雖然找到了這個(gè)數(shù)據(jù)文件,但是數(shù)據(jù)結(jié)構(gòu)還是比較復(fù)雜的,我是通過遞歸去找到需要的數(shù)據(jù)。當(dāng)然同學(xué)們也可以評(píng)論自己更好的方法。Boundary四位數(shù)分別代表的是 x y w h。(ofd是左上角的x,y。pdf是左下角的x,y)這樣我們就可以根據(jù)計(jì)算提供了x_mix,y_mix,x_max,y_max了這樣我們就可以畫出bbox了。線條和紅色字體也是同一道理.這樣我們可以根據(jù)自己的需求去重結(jié)構(gòu)化了。當(dāng)然這是高度個(gè)性化的開發(fā),所以我這邊就不做陳述了。
這樣我們就可以把ofd數(shù)據(jù)解析出來了,本人學(xué)識(shí)淺陋,對(duì)博大精深之ofd文件操作理論僅略知皮毛,在本文章中錯(cuò)謬之處在所難免,若蒙讀者諸君不吝指出,將不勝感激.
2020年8月于北京
總結(jié)
- 上一篇: sqlServer2012安装包下载
- 下一篇: 五种I/O模型详解