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