trailer
<<
/size 211
/root 2 0 r
/info 1 0 r
/id
>>
其中0,211分別代表這個xref的obj的起始和終止序號。其中0這個是估計是為了程式中好處理所以加了這個(個人英文水平不行,有些地方看不明白),可以不加入這個。下面的各行就代表各個obj在這個文件的起始位置,其中第一串字元(10個)代表起始位置,中間的五個字元也是為了區分用的,現在基本上全為0,後面的字母有兩種f代表刪除的,n代表要使用的。後面的trailer是對整個xref的摘要,說明裡面有多少個obj,讀的時候從哪個obj開始解析,資訊節點等,id是為了讓一些檔案檢索工具能夠唯一區分檔案。
3、檔案尾。
startxref
88019
%%eof
因為乙個文件中可以有多個xref,所以這裡要指明要從哪個xref開始進行解析這個檔案。
從上面的分析來看:pdf檔案內部校驗是很複雜的,只要裡面有一位錯位了,就會導致整個文件讀取錯誤。而且它時碩會有不少的二進位制內容,所以一般來說在記憶體裡面儲存的時候,用流物件,而不能用字串,特別是生成的時候,每加入乙個obj的時候,去獲取一下當前流的長度就可以得到每個obj的起始位置,同時把獲取的這些位置存到arraylist裡面,這樣就可以很方便地得到和內容相一致的xref了。
三、pdf裡面物件的組成形式,可以說是用樹形結構來相互關聯的,駔下面掛頁集合,頁集合下面掛頁,頁裡掛,鏈結,內容等
四、pdf裡面的obj的型別主要有以下幾種:
1、檔案描述物件,用來描述這個檔案的標題,作者,時間等
2、組物件,也就是文件內容的起始結點。type 為catalog
3、頁集合,裡面聚合了大量的頁物件。 type 為pages
4、頁物件,裡面指明了當前頁裡面用到的字型,內容,活動物件,等。type 為page
5、活動物件,有鏈結,文字,聲音,電影等,type 為annots
6、物件, type 為 xobject
7、字型物件,type 為 font 。pdf可以內建字型,所以即使目標機器上沒有,只要它內建了,也可以正常地顯示,不受影響(內建字型,這個我還沒有研究清楚,希望知道的人可以告訴我一下,這裡先謝了)
8、流物件。所有的二進位制內容都是存在這個物件裡面,檔案流的常見的壓縮方式是:的一些壓縮演算法,flatedecode,asciihexdecode,ascii85decode等等,flatedecode事實上就是zip的壓縮演算法(關這個,我就花了好長的時間去研究)。流物件的長度是關連到乙個長度物件上的/length 188 0 r這種形式。188就是存這個長度的obj的順序號。
9、數字物件。
188 0 obj
2538
endobj
裡面只有乙個數字,經常用來表示長度,為什麼要把長度還要再用物件來表示,這個到現在我也想不太明白。
以上就是我對pdf檔案格式的理解的摘要。也許有些地方可能理解得不正確,希望得到大家的指正。
PE檔案格式的一些研究
最近抽空對pe檔案格式做了一些研究。眾所周知,pe檔案格式是windows平台下可執行檔案的格式。為什麼要研究pe檔案格式?可能有人認為,做這件事就是一件重複造輪子的事,因為之前已經有無數人做過這樣的事。但是有些事不是簡單地以是不是重複造輪子來衡量的。研究pe檔案格式對加深程式本質的認識和理解程式的...
關於顏色格式的一些心得
大自然中的顏色和計算機世界裡的顏色,頗有許多相似之處,甚至可以說計算機世界裡的顏色就是來自大自然的。我記得我的一位師長曾對我說 科學源於生活又低於生活,藝術源於生活而高於生活 現在想起來,似乎真的是這個樣子。大自然中的顏色有多少種呢?不知道唉,可以說是無數種了。不過既然科學源於生活又低於生活,那麼計...
7z檔案格式及其原始碼的分析
本文是乙個系列.主要是分享我最近一年做7z檔案開發的經驗.主要包括7z官方原始碼的結構分析,以及7z檔案格式的分析.其中涉及到7z原始碼結構的各個細節,以及7z檔案格式的具體細節.本文適合物件 想要了解學習7z原始碼的開發人員,想要了解7z檔案格式細節,做7z檔案壓縮器和解壓器的開發人員,以及其他壓...