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