日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > C# >内容正文

C#

思路初探:采用c#实现pdf转ofd

發(fā)布時(shí)間:2023/12/20 C# 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 思路初探:采用c#实现pdf转ofd 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言?  版式文檔格式是版面呈現(xiàn)效果固定的電子文檔格式, pdf和ofd均為板式文檔格式標(biāo)準(zhǔn);pdf板式文件占有絕對(duì)的統(tǒng)治地位;ofd是我國(guó)自主研發(fā)的板式文檔規(guī)范,屬于后起之秀。同為板式文件, 理論上可以實(shí)現(xiàn)互轉(zhuǎn)而又能達(dá)到呈現(xiàn)格式完全一致。

  ofd標(biāo)準(zhǔn)晚于pdf標(biāo)準(zhǔn)將近20年,ofd標(biāo)準(zhǔn)采用吸納了軟件行業(yè)近年來(lái)的一些先進(jìn)技術(shù)和通用做法;ofd和pdf雖均為板式文件,但是兩個(gè)標(biāo)準(zhǔn)對(duì)板式文件的描述差別還是非常大的。市面上的板式文件大部分為pdf,如果能實(shí)現(xiàn)pdf轉(zhuǎn)ofd,就解決了ofd的來(lái)源問(wèn)題,可以促進(jìn)ofd更快的普及。

? ?作者研究ofd和pdf多年,采用c#實(shí)現(xiàn)了pdf轉(zhuǎn)ofd,并將此功能集成到閱讀器;閱讀器打開(kāi)pdf文件時(shí),是將pdf轉(zhuǎn)換為ofd后再顯示的。完全實(shí)現(xiàn)pdf到ofd的轉(zhuǎn)換需要大量的工作,作者會(huì)逐步完善。對(duì)于wps生成的pdf的文件,大部分是可以轉(zhuǎn)換成功的。ofd閱讀器下載(集成pdf與ofd互轉(zhuǎn))(百度網(wǎng)盤(pán)提取密碼:jj9v)。

pdf轉(zhuǎn)ofd初步思路

  板式文件描述的內(nèi)基本分為三大類(lèi):文字、線、圖,稱(chēng)之為圖元。繪制圖元時(shí),還需要確定圖元所處的“環(huán)境”,如:前景色、背景色、剪切區(qū)域、坐標(biāo)系等;稱(chēng)之為狀態(tài)。最終的呈現(xiàn)效果由圖元和狀態(tài)決定的。

?

?  ofd與pdf描述這些元素的詞是完全不同的,但是有相同的“意境”。將pdf轉(zhuǎn)換為ofd的前提是充分理解pdf和ofd標(biāo)準(zhǔn),找準(zhǔn)兩個(gè)標(biāo)準(zhǔn)相通的“意境”;轉(zhuǎn)換就是意境的轉(zhuǎn)換,而不是詞匯的轉(zhuǎn)換。下面逐步分析兩個(gè)標(biāo)準(zhǔn)之間的差異。

pdf與ofd文檔描述差異

  pdf屬于單體文件,ofd屬于容器文件;暨ofd是壓縮包,壓縮包包含多個(gè)文件。pdf文件分為很多塊,每個(gè)塊稱(chēng)之為object,有唯一id對(duì)應(yīng)。每個(gè)塊分為header和body,header描述格式為dictionary。pdf文件的結(jié)構(gòu)需要通過(guò)專(zhuān)用軟件才能查看,這一點(diǎn)不如ofd。pdf文件內(nèi)容查看器。

?

?  ofd容器內(nèi)主要包括資源文件和格式描述文件。資源文件可以是任意文件,如:圖片、字體、簽章數(shù)據(jù)等;文件之間互不影響,可以方便的添加刪除文件。格式文件是描述呈現(xiàn)格式的文件,為xml格式;采用xml格式的好處是:xml是標(biāo)準(zhǔn)格式、解析xml有現(xiàn)成的庫(kù);xml的描述能力也比pdf的文本描述能力更好。

  對(duì)于狀態(tài)的描述,ofd和pdf采用了兩種不同的方式。pdf對(duì)狀態(tài)的描述是分散的,確定當(dāng)前狀態(tài)的屬性需要追溯到文檔開(kāi)始。ofd對(duì)狀態(tài)的描述是自包含的,僅僅通過(guò)當(dāng)前xml節(jié)點(diǎn)就能確定狀態(tài)屬性。從上可以看出,分析pdf的狀態(tài)難度更大,但是pdf這種描述方式更能節(jié)省空間,特別是描述非常復(fù)雜的狀態(tài)時(shí)。

?文字描述差異

  pdf對(duì)文字的描述比ofd要復(fù)雜很多;pdf標(biāo)準(zhǔn)誕生時(shí),還沒(méi)有unicode概念,最初pdf只是用來(lái)顯示拉丁文字。為了顯示東亞文件,pdf標(biāo)準(zhǔn)只能另辟蹊徑,采用了cid格式字體文件。ofd對(duì)字體描述統(tǒng)一采用unicode,達(dá)到了化繁為簡(jiǎn)的效果。

圖片描述差異

  pdf圖片處理部分比ofd復(fù)雜很多。pdf中的圖片不是一個(gè)直接的“圖”,它會(huì)描述圖的壓縮格式、像素顏色個(gè)數(shù)、調(diào)色板等信息,需要軟件合成圖片文件;而ofd文件是直接存入一個(gè)圖片文件。

線描述差異

  這兩部分差異不大,線處理是相對(duì)來(lái)說(shuō)簡(jiǎn)單些。ofd有一個(gè)特殊的操作符A,用來(lái)表示圓弧。

c# 實(shí)現(xiàn)pdf轉(zhuǎn)ofd步驟

1)pdf文件讀取

  可以借助開(kāi)源庫(kù)處理pdf,比如:itext,apose,pdfbox等。pdf文件的結(jié)構(gòu)還是比較復(fù)雜的,實(shí)現(xiàn)文件的讀取邏輯也是非常復(fù)雜。

2)pdf指令的分割

每個(gè)pdf的指令包括操作數(shù)和操作符。這些數(shù)據(jù)是混合到一塊的,需要快速高效的找到每個(gè)完整的指令。

下圖恰好是每行一個(gè)指令。

?

?3)pdf指令的處理

  這里是pdf處理最復(fù)雜部分。pdf指令歸為十幾大類(lèi)。從作用上來(lái)講可以分為兩類(lèi):狀態(tài)指令、操作指令。狀態(tài)指令是修改pdf狀態(tài)屬性的,操作指令是執(zhí)行具體操作,如:顯示文字、劃線等。

4) pdf轉(zhuǎn)ofd

  理解pdf的處理指令就是掌握了“語(yǔ)義”,這是將pdf翻譯成ofd必要條件。將語(yǔ)義用xml語(yǔ)法表示出來(lái)就是水到渠成的事。

后記 要完成pdf轉(zhuǎn)ofd的功能,需要同時(shí)理解pdf和ofd標(biāo)準(zhǔn)。只要準(zhǔn)確把握了這兩種標(biāo)準(zhǔn)的內(nèi)涵,就能實(shí)現(xiàn)pdf轉(zhuǎn)ofd而又能確保不失真。

  在板式文件領(lǐng)域,pdf仍然是主流;但是ofd具有后發(fā)優(yōu)勢(shì)。pdf標(biāo)準(zhǔn)文檔達(dá)1300多頁(yè),還有大量的附加協(xié)議,完全掌握pdf標(biāo)準(zhǔn)需要假以時(shí)日。pdf標(biāo)準(zhǔn)出現(xiàn)的較早,所以背負(fù)了沉重的歷史包袱;標(biāo)準(zhǔn)中的部分內(nèi)容在今天看來(lái)是過(guò)時(shí)、冗余的。

  pdf已成為事實(shí)上的國(guó)際標(biāo)準(zhǔn),流式文檔軟件(wps等)或其他編輯設(shè)計(jì)軟件大都有轉(zhuǎn)換pdf功能。ofd的普及需要各方面的共同努力, 讓用戶快捷方便的生成ofd文件是其中重要的一環(huán)。畢竟,無(wú)源之水無(wú)法匯集成浩瀚海洋。作者用c#嘗試實(shí)現(xiàn)了pdf轉(zhuǎn)ofd功能,達(dá)到了初步可用狀況。實(shí)現(xiàn)pdf完美轉(zhuǎn)換為ofd及ofd在國(guó)內(nèi)普及是作者的夢(mèng)想;前途漫漫,唯有奮斗。

總結(jié)

以上是生活随笔為你收集整理的思路初探:采用c#实现pdf转ofd的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。