PDF學習六 物件

2021-08-21 10:53:09 字數 2992 閱讀 6949

本文**:

前言:pdf支援8種基本型別物件。布林物件、數字物件、串物件、名稱物件、陣列物件、字典物件、流物件、空物件和間接物件。

pdf reference1.7.pdf 3.2 objects

熟練掌握pdf8種基本型別物件。

true & false

整數物件(integer):以零為中心表示乙個特定間隔內的整數,例如:

123 43445 +17 -98 0

實數物件(real):類似於數學中的實數,但範圍和精度有限,例如:

34.5 -3.62  +123.6  4.  -.002  0.0

1)文字串 literal strings:以()為分隔符,包含在()中的一系列文字字元。例如:

(this is a (string))

2)轉義字元:\ddd 表示ascii字符集之外可列印的字元

文字串(\0053)表示這個串包含2個字元,\005(control-e)和數字3. 然而(\053)和(\53)表示串只包含乙個字元\053,即加號(+).

3)十六進製制串 hexadecimal strings:以< >為分隔符,包含在<>中的十六進製制資料。

如果串的位數是奇數,以0補齊。例如:<901fa3>該串由3個位元組構成分別是90,1f,和a3。但是<901fa>是由3個位元組構成的分別是90,1f和a0。

1)名稱是以斜線(/)打頭。斜線不是名稱的一部分。名稱中斜線和第乙個字元之間不允許有空格。名稱可以包含任意的常規字元,但不包含分隔符和空格符。名稱是有區分大小寫的:/a和/a是兩個不同的名稱。以下例子是有效的文字名稱:

/name1 /$$ /@pattern /. notdef

2)從pdf1.2開始,除了0以外的任何字元都可包含在名稱中,由(#)為字首和2位16進製制編碼的數表示例如:

/adobe#20green 表示adobe green

3)名稱的最大長度為127字元。字元數的計算是根據名稱實際表示的字元。例如,/a#20b是4個字元(/,a,空格,b),而不是6個字元。

1)陣列物件是乙個排列有序的一維物件集合。pdf陣列可以是不同性質的,陣列的元素可以由數(number),串,字典或其他物件,還可以包含其他陣列。

陣列書寫格式如下:(包含在[ 和 ] 之間)

[ 549 3.14 false ( ralph ) /somename ]

2)pdf 只支援一維陣列。多維的陣列可以用陣列巢狀的方式來構建。

1)字典物件是乙個包含多個物件的關聯表,稱為字典條目。每個條目的第乙個元素稱為關鍵字(key),第二個元素稱為值(value)。關鍵字必須是乙個名稱(name)。值可以是任何物件,包括其他字典。乙個字典的條目的值如果是null等同於該項預設。

字典書寫格式如下:(包含在<< 和 >>中,關鍵字-值是配對出現的)

<< /type /example 

/subtype /dictionaryexample 

/version 0.01 >>

2)字典物件是構建pdf檔案資料塊的主要部分。它們通常用於集合和繫結複雜物件的屬性,例如字型(font)或文件的頁面,其中的每個條目指定乙個屬性的名稱和值。根據規定,type條目指定這個字典所描述的物件型別。在某些情況下,subtype條目(或縮寫為s)用於進一步確定子型別。

1)流物件類似串物件,是一系列位元組構成。但是pdf應用程式可以逐步讀取乙個流,而乙個串必須全部一次性讀取。而且,流不限制長度,而串是有長度限制的。正因為如此,可能包含大量資料的物件,如影象,頁面描述,都用流來表示。

2)乙個流由乙個字典,後面緊隨的是0或更多的位元組構成,頭尾用關鍵字stream和endstream標識

dictionary 

stream 

… zero or more bytes … 

endstream

3)所有的流都必須是間接引用物件,流字典必須是直接物件。流字典後緊跟著必須有乙個行末識別符號,與strem關鍵字分隔開,這個行末識別符號可以是乙個回車符和是行末填充符,或是乙個行末填充符,但不是單獨乙個回車符。構成流的序列位元組,位於關鍵字stream和endstream之間;流字典中精確指定了流的位元組數。

4)每個流字典都有乙個length條目,說明pdf檔案中使用的流資料的位元組數。(如果流使用了filter(過濾器),length是已編碼資料的位元組數。)另外,為了資料的自身限制,大多數filters(過濾器)的定義,使用明確的資料結束標識(eod,end-of-data)界定資料的區域。最後,流用於表示許多物件,並且長度可以從屬性中推斷出來的。所有這些制約因素必須一致。

例如,乙個影象有10行和10列,乙個顏色成分組成,每個顏色成分有8位,那麼影象資料就需要200位元組來表示。如果流使用filter(過濾器),必須有足夠的編碼位元組數來表示這200位元組。如果length太小,或eod資料結束符出現的太早,或者解碼資料沒有200位元組,那麼都將出錯。

如果流中包含太多的資料也將出錯,除非在關鍵字endstream之前有乙個額外的行末結束符。

只有這個物件的型別是空,由關鍵字null指定。乙個間接物件指向乙個不存在的物件被看作是空物件。指定空物件為字典選項的值等同於忽略該項。

pdf 檔案中的任何物件都可以被標記為間接物件。這就要求每個物件有乙個唯一物件識別符號,通過這個識別符號其它物件都可以引用它(比如,陣列的乙個元素或字典選項的值)。物件識別符號包括兩個部分:

1. 乙個正整數物件編號,在 pdf 檔案中間接物件經常按順序編號,但不是必須的;物件編號可以以任意順序分配。

2.乙個非負整數版本編號generation number。乙個新建立的檔案中,所有間接引用的版本號為0.非0的版本號說明檔案更新過。

例如:12 0 obj ( brillig )endobj

定義了乙個間接串物件,物件號為12,版本號為0,值為brillig.

乙個物件可以被被位於檔案中任何位置的間接引用所引用,如下格式 12 0 r(物件編號,版本號及關鍵字r)。

乙個間接引用指向乙個未定義的物件不是錯誤。它只是被看作引用乙個空值物件。比如,如果乙個檔案包含間接引用 17 0 r 但沒有包含相應的定義

17 0 obj … endobj

那麼這個間接引用被認為是引用乙個空值物件。

PDF學習六 物件

說明 pdf支援8種基本型別物件。布林物件 數字物件 串物件 名稱物件 陣列物件 字典物件 流物件 空物件,以及間接物件。pdf reference1.7.pdf 3.2 objects 熟練掌握pdf8種基本型別物件。true false 整數物件 integer 以零為中心表示乙個特定間隔內的整...

Redis學習筆記(六) 物件

前面我們看了redis用到的主要資料結構,如簡單動態字串 sds 雙向鍊錶 字典 壓縮列表 整數集合等。但是redis並沒有直接使用這些資料結構來實現鍵值對,而是基於這些資料結構建立了乙個物件系統,這個系統包括字串物件 列表物件 雜湊物件 集合物件 有序集合物件,除此之外,redis的物件系統還實現...

Redis學習筆記(六) 物件系統

2.redis中的五種物件型別 2.2 列表物件 2.3 雜湊物件 2.4 集合物件 2.5 有序集合物件 3.記憶體 機制 4.物件共享機制 5.物件的空轉時長 總結參考資料 redis沒有直接使用基礎資料結構來實現資料庫,而是基於這些資料結構建立了乙個物件系統。這個系統包含字串物件 列表物件 雜...