OFD文件解析流程(转)
OFD解析數據流程分享
最近接到公司任務,應客戶要求要做ofd格式文件的電票識別。剛接到任務的時候我對于ofd格式文件知道的少之甚少。之前只是聽到同事提起過這樣的一種格式。在我當時的認知里就單純的知道他是"中國版的PDF"。對于他的底層實現和用途一無所知。所以我接到任務的時候就著手規劃解決流程。
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文件解析流程(转)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Socket的3次握手链接与4次断开握手
- 下一篇: 网络通信的工作原理