1. 程式人生 > >pdf檔案內容檢視器 -- 採用wpf開發

pdf檔案內容檢視器 -- 採用wpf開發

前言 pdf是一種應用非常廣的版式文件格式,已成為事實上的國際標準。關於pdf格式的文章汗牛充棟,本文也是關於pdf格式的文章,但是本文不是紙上談兵;本人這幾週一直研究pdf格式內容,不但對pfd格式的內容有所瞭解,同時也寫了一款軟體,可以方便檢視pdf檔案內容。使用該軟體,同時結合pdf相關文章,可以很快掌握pdf格式內容。

軟體截圖: 軟體下載地址 點我下載

pdf檔案內容簡要介紹

這裡對pdf檔案格式做個粗略介紹,只有瞭解了這些內容,才能知道如何使用該軟體。

pdf文件總結構如下:

1)header:主要包含版本資訊

2)tailer:pdf樹結構的入口點。

 3)交叉索引表;該表包含pdf每個obj在檔案中的位置,根據該表,可以快速定位和載入obj的內容。對於大檔案,不必一次載入所有的內容,只需載入當前頁包含的obj即可。

 4) body。 包含obj對應的內容。

pdf obj樹狀結構

要完成對pdf檔案的分析和顯示,首先需要構建pdf檔案的obj的樹狀模型。這個樹狀模型的入口點就是trailer,trailer包含root元素(Catalog),其下包含Pages,Page。Page中包含內容和資源。

 

結合軟體分析pdf檔案格式

用該軟體開啟一個pdf檔案,對照示例來分析。

1)pdf header: 

2)trailer和交叉引用表,

3)body 由一系列obj組成。每個obj由唯一編號,可根據編號定位到內容。

 4)文件樹狀結構

頁集是頁的集合,pdf規範建議用平衡樹來組織頁,便於快速查詢。

 

程式設計心得。

1 不能嚴格按照pdf標準來分析pdf。

pdf文件應用非常廣,生成pdf檔案的軟體非常多。不是所有的pdf文件都嚴格符合標準。所謂“林子大了,什麼鳥都有“。所以開發軟體要經過大量的pfd文件測試。

2 分析obj的內容

pdf索引表只給出了obj開始檔案位置。obj一般包含dictionary和stream兩部分。所以需要根據關鍵詞來解析obj,這就需要有一定的技巧。dictionary開始和結束的關鍵字為“<<” 和">>",但是dictionary可能包含子dictionary。只靠關鍵字是無法確定dictionary的開始和結束位置的,需要一定的技巧。

 

 

 3 讀取obj的效率。

不必一次載入所有的obj,可以採取按需載入。

後記 讀取pdf檔案的內容,在記憶體中構建obj樹形結構,是下一步分析和顯示pdf的基礎。本人通過閱讀相關資料,加上編寫程式碼,實現了對pdf檔案內容的分析。理論和實踐相結合,就能快速的掌握相關知識。本軟體可以方便的窺探pdf內部結構,希望該軟體為你瞭解和開發pdf有所幫助。