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有所幫助。