前言 版式文檔格式是版面呈現效果固定的電子文檔格式, pdf和ofd均為板式文檔格式標准;pdf板式文件占有絕對的統治地位;ofd是我國自主研發的板式文檔規范,屬於后起之秀。同為板式文件, 理論上可以實現互轉而又能達到呈現格式完全一致。
ofd標准晚於pdf標准將近20年,ofd標准采用吸納了軟件行業近年來的一些先進技術和通用做法;ofd和pdf雖均為板式文件,但是兩個標准對板式文件的描述差別還是非常大的。市面上的板式文件大部分為pdf,如果能實現pdf轉ofd,就解決了ofd的來源問題,可以促進ofd更快的普及。
作者研究ofd和pdf多年,采用c#實現了pdf轉ofd,並將此功能集成到閱讀器;閱讀器打開pdf文件時,是將pdf轉換為ofd后再顯示的。完全實現pdf到ofd的轉換需要大量的工作,作者會逐步完善。對於wps生成的pdf的文件,大部分是可以轉換成功的。ofd閱讀器下載(集成pdf與ofd互轉)(百度網盤提取密碼:jj9v)。
pdf轉ofd初步思路
板式文件描述的內基本分為三大類:文字、線、圖,稱之為圖元。繪制圖元時,還需要確定圖元所處的“環境”,如:前景色、背景色、剪切區域、坐標系等;稱之為狀態。最終的呈現效果由圖元和狀態決定的。
ofd與pdf描述這些元素的詞是完全不同的,但是有相同的“意境”。將pdf轉換為ofd的前提是充分理解pdf和ofd標准,找准兩個標准相通的“意境”;轉換就是意境的轉換,而不是詞匯的轉換。下面逐步分析兩個標准之間的差異。
pdf與ofd文檔描述差異
pdf屬於單體文件,ofd屬於容器文件;暨ofd是壓縮包,壓縮包包含多個文件。pdf文件分為很多塊,每個塊稱之為object,有唯一id對應。每個塊分為header和body,header描述格式為dictionary。pdf文件的結構需要通過專用軟件才能查看,這一點不如ofd。pdf文件內容查看器。
ofd容器內主要包括資源文件和格式描述文件。資源文件可以是任意文件,如:圖片、字體、簽章數據等;文件之間互不影響,可以方便的添加刪除文件。格式文件是描述呈現格式的文件,為xml格式;采用xml格式的好處是:xml是標准格式、解析xml有現成的庫;xml的描述能力也比pdf的文本描述能力更好。
對於狀態的描述,ofd和pdf采用了兩種不同的方式。pdf對狀態的描述是分散的,確定當前狀態的屬性需要追溯到文檔開始。ofd對狀態的描述是自包含的,僅僅通過當前xml節點就能確定狀態屬性。從上可以看出,分析pdf的狀態難度更大,但是pdf這種描述方式更能節省空間,特別是描述非常復雜的狀態時。
文字描述差異
pdf對文字的描述比ofd要復雜很多;pdf標准誕生時,還沒有unicode概念,最初pdf只是用來顯示拉丁文字。為了顯示東亞文件,pdf標准只能另辟蹊徑,采用了cid格式字體文件。ofd對字體描述統一采用unicode,達到了化繁為簡的效果。
圖片描述差異
pdf圖片處理部分比ofd復雜很多。pdf中的圖片不是一個直接的“圖”,它會描述圖的壓縮格式、像素顏色個數、調色板等信息,需要軟件合成圖片文件;而ofd文件是直接存入一個圖片文件。
線描述差異
這兩部分差異不大,線處理是相對來說簡單些。ofd有一個特殊的操作符A,用來表示圓弧。
c# 實現pdf轉ofd步驟
1)pdf文件讀取
可以借助開源庫處理pdf,比如:itext,apose,pdfbox等。pdf文件的結構還是比較復雜的,實現文件的讀取邏輯也是非常復雜。
2)pdf指令的分割
每個pdf的指令包括操作數和操作符。這些數據是混合到一塊的,需要快速高效的找到每個完整的指令。
下圖恰好是每行一個指令。
3)pdf指令的處理
這里是pdf處理最復雜部分。pdf指令歸為十幾大類。從作用上來講可以分為兩類:狀態指令、操作指令。狀態指令是修改pdf狀態屬性的,操作指令是執行具體操作,如:顯示文字、划線等。
4) pdf轉ofd
理解pdf的處理指令就是掌握了“語義”,這是將pdf翻譯成ofd必要條件。將語義用xml語法表示出來就是水到渠成的事。
后記 要完成pdf轉ofd的功能,需要同時理解pdf和ofd標准。只要准確把握了這兩種標准的內涵,就能實現pdf轉ofd而又能確保不失真。
在板式文件領域,pdf仍然是主流;但是ofd具有后發優勢。pdf標准文檔達1300多頁,還有大量的附加協議,完全掌握pdf標准需要假以時日。pdf標准出現的較早,所以背負了沉重的歷史包袱;標准中的部分內容在今天看來是過時、冗余的。
pdf已成為事實上的國際標准,流式文檔軟件(wps等)或其他編輯設計軟件大都有轉換pdf功能。ofd的普及需要各方面的共同努力, 讓用戶快捷方便的生成ofd文件是其中重要的一環。畢竟,無源之水無法匯集成浩瀚海洋。作者用c#嘗試實現了pdf轉ofd功能,達到了初步可用狀況。實現pdf完美轉換為ofd及ofd在國內普及是作者的夢想;前途漫漫,唯有奮斗。