




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
PDF規(guī)范
第六版Adobe?便攜式文件格式
版本1.7
2006年11月Adobe系統(tǒng)公司目錄目錄 2前言 6第1章介紹 61.1關(guān)于本書 61.2PDF1.7功能簡(jiǎn)介 71.3相關(guān)文獻(xiàn) 101.4版權(quán)說(shuō)明 10第2章概述 122.1圖像模型 122.2其他通用特性 152.3創(chuàng)建PDF 182.4PDF和PostScript語(yǔ)言 20第3章語(yǔ)法 213.1詞匯約定 223.2對(duì)象 243.3過(guò)濾器 343.4文件結(jié)構(gòu) 413.5加密 623.6文檔結(jié)構(gòu) 633.7內(nèi)容流和資源 653.8常用數(shù)據(jù)結(jié)構(gòu) 653.9函數(shù) 653.10文件規(guī)范 66第4章圖形 674.1圖形對(duì)象 674.2坐標(biāo)系 674.3圖形狀態(tài) 674.4路徑構(gòu)造與繪制 684.5顏色空間 684.6底紋 694.7外部對(duì)象 704.8圖像 704.9XObjects格式 714.10可選內(nèi)容 71第5章文本 725.1字體的組織和使用 725.2文本狀態(tài)參數(shù)和操作符 725.3文本對(duì)象 745.4字體數(shù)據(jù)結(jié)構(gòu)介紹 745.5簡(jiǎn)單字體 745.6復(fù)雜字體 745.7字體描述符 755.8嵌入式字體程序 755.9文本內(nèi)容提取 75第6章渲染 766.1CID-Based顏色到設(shè)備顏色 766.2設(shè)備顏色空間之間的轉(zhuǎn)換 766.3傳遞函數(shù) 766.4半色調(diào) 766.5掃描轉(zhuǎn)換細(xì)節(jié) 76第7章透明度 777.1透明度概述 777.2基本合成計(jì)算 777.3透明度組 777.4軟掩碼 787.5指定PDF中的透明度 787.6顏色空間和渲染問(wèn)題 78第8章交互功能 798.1查看器首選項(xiàng) 798.2文檔級(jí)導(dǎo)航 798.3頁(yè)面級(jí)導(dǎo)航 808.4注釋 818.5操作 838.6交互式表單 838.7數(shù)字簽名 918.8測(cè)量屬性 1078.9文檔需求 107第9章多媒體功能 1079.1多媒體 1079.2音頻 1089.3視頻 1089.4交替演示 1089.53D功能 108第10章文檔交換 10910.1過(guò)程集 10910.2元數(shù)據(jù) 11010.3文件標(biāo)識(shí)符 11010.4頁(yè)面片字典 11010.5內(nèi)容標(biāo)記 11010.6邏輯結(jié)構(gòu) 11010.7標(biāo)記PDF 11110.8輔助功能支持 11210.9網(wǎng)絡(luò)捕獲 11210.10印前支持 113附錄A運(yùn)算符摘要 114附錄B類型4函數(shù)運(yùn)算符 114B.1算術(shù)運(yùn)算符 114B.2關(guān)系、布爾和位運(yùn)算符 114B.3條件運(yùn)算符 114B.4棧運(yùn)算符 114附錄C實(shí)施限制 114附錄D字符集和編碼 114D.1拉丁字符集和編碼 114D.2PDFDocEncoding字符集 114D.3特殊字符集和MacExpertEncoding 114D.4符號(hào)字符集和編碼 114D.5ZapfDingbats字符集和編碼 114附錄EPDF名稱注冊(cè)表 114附錄F線性化PDF 114F.1背景和假設(shè) 114F.2線性PDF文檔結(jié)構(gòu) 115F.3提示表 115F.4訪問(wèn)策略 115附錄GPDF文件示例 116G.1最小的PDF文件 116G.2簡(jiǎn)單文本字符串示例 118G.3簡(jiǎn)單圖形示例 118G.4頁(yè)面樹示例 118G.5大綱層次結(jié)構(gòu)示例 118G.6更新示例 118G.7描述分層列表的結(jié)構(gòu)化元素 122附錄H兼容性和實(shí)現(xiàn)說(shuō)明 122H.1PDF版本號(hào) 122H.2功能兼容性 122H.3實(shí)現(xiàn)說(shuō)明 122附錄I對(duì)象雜湊的計(jì)算 122I.1基本對(duì)象類型 122I.2選擇性計(jì)算 122彩色板 123參考文獻(xiàn) 123Adobe系統(tǒng)公司資源 123其他資源 123索引 123前言第1章介紹1.1關(guān)于本書 本書提供PDF文件格式的描述,主要面向直接創(chuàng)建PDF文件的PDF制作應(yīng)用程序的開發(fā)人員。它還包含足夠的信息,允許開發(fā)人員編寫讀取現(xiàn)有PDF文件并解釋或修改其內(nèi)容的PDF消費(fèi)者應(yīng)用程序。雖然PDF規(guī)范與任何特定的軟件實(shí)現(xiàn)無(wú)關(guān),但通過(guò)描述典型應(yīng)用程序處理方式,可以最好地解釋一些PDF功能。在這種情況下,本書使用Acrobat系列PDF查看器應(yīng)用程序作為其模型。(原型查看器是完全功能的Acrobat產(chǎn)品,而不是AdobeReader?產(chǎn)品)。附錄C討論了Acrobat查看器應(yīng)用程序中的一些實(shí)施限制,但這些限制并不是文件格式本身的一部分。附錄H提供了兼容性和實(shí)現(xiàn)說(shuō)明,描述了Acrobat查看器在遇到不了解的較新功能時(shí)的行為方式,并指定了Acrobat產(chǎn)品與本書中提供的規(guī)范不一致的領(lǐng)域。PDF制作者和消費(fèi)者應(yīng)用程序的實(shí)施者可以使用此信息作為指導(dǎo)。此版本的PDF規(guī)范介紹了1.7版本的PDF(見附錄H中的實(shí)施說(shuō)明1)。在整本書中,PDF的特定版本的特定信息標(biāo)有(PDF1.3)或(PDF1.4)等指標(biāo)。在該版本中,如此標(biāo)記的特征可能是新的或基本上重新定義的。指定的功能(PDF1.0)一般在以后的版本中被取代;除非另有說(shuō)明,否則特定于其他版本的特征也被理解為在后續(xù)版本中可用。(為特定PDF版本設(shè)計(jì)的PDF消費(fèi)者應(yīng)用程序通常忽略他們不認(rèn)識(shí)的較新功能;附錄H中的實(shí)現(xiàn)說(shuō)明指出了異常。)注意:在本版本中,消費(fèi)者一詞通常用于參考PDF處理應(yīng)用程序;查看器保留用于實(shí)現(xiàn)與用戶交互的功能的應(yīng)用程序。然而,這種區(qū)別并不總是很清楚,因?yàn)榉墙换ナ綉?yīng)用程序可能會(huì)處理表示交互功能的PDF文檔(例如注釋)中的對(duì)象。本書的其余部分如下:第2章“概述”簡(jiǎn)要介紹了PDF的整體架構(gòu)及其背后的設(shè)計(jì)注意事項(xiàng),并將其與PostScript語(yǔ)言進(jìn)行比較,并描述了它們共享的基礎(chǔ)圖像模型。第3章“語(yǔ)法”介紹了PDF在對(duì)象,文件和文檔級(jí)別的語(yǔ)法。它為后續(xù)章節(jié)提供了一個(gè)基礎(chǔ),它們描述了該信息如何被解釋為頁(yè)面描述,交互式導(dǎo)航輔助工具和應(yīng)用程序級(jí)邏輯結(jié)構(gòu)。第4章“圖形”描述了用于描述PDF文檔中頁(yè)面外觀的圖形運(yùn)算符。第5章“文本”討論了PDF的特殊設(shè)施,用于以字體形式呈現(xiàn)文本,或者由字體定義的字形。第6章“渲染”考慮了與設(shè)備無(wú)關(guān)的內(nèi)容描述如何與特定輸出設(shè)備的特性相匹配。第7章“透明度”討論了在PDF1.4中介紹的透明成像模型的操作,其中可以以不同程度的不透明度繪制對(duì)象,允許頁(yè)面的原內(nèi)容顯示。第8章“交互功能”介紹了PDF的功能,允許用戶使用鼠標(biāo)和鍵盤與屏幕上的文檔交互。第9章“多媒體功能”介紹了支持嵌入和播放多媒體內(nèi)容(包括視頻,音樂(lè)和3D圖形)的PDF功能。第10章“文檔交換”顯示了PDF文檔如何合并可用于應(yīng)用程序之間的文檔交換的更高級(jí)別的信息。附錄A“運(yùn)算符摘要”列出了用于描述PDF文檔的可視內(nèi)容的所有操作符。附錄B“類型4函數(shù)運(yùn)算符”總結(jié)了可在PostScript計(jì)算器函數(shù)中使用的PostScript運(yùn)算符,該函數(shù)包含用PostScript語(yǔ)言的一小部分編寫的代碼。附錄C“實(shí)施限制”描述了Acrobat查看器應(yīng)用程序施加的典型大小和數(shù)量限制。附錄D“字符集和編碼”列出了假定在任何PDF消費(fèi)者應(yīng)用程序中預(yù)定義的字符集和編碼。附錄E“PDF名稱注冊(cè)表”討論了由AdobeSystems為開發(fā)人員維護(hù)的注冊(cè)表,其中包含PDF生成器或Acrobat插件擴(kuò)展使用的私有名稱和格式。附錄F“線性化PDF”描述了一種特殊形式的PDF文件組織,旨在在網(wǎng)絡(luò)環(huán)境中高效工作。附錄G“PDF文件示例”介紹了幾個(gè)示例,顯示了實(shí)際PDF文件的結(jié)構(gòu),范圍從包含最小單頁(yè)文檔的結(jié)果到顯示PDF文件結(jié)構(gòu)在多個(gè)修訂版本中演變的結(jié)構(gòu)。附錄H“兼容性和實(shí)現(xiàn)說(shuō)明”提供了Acrobat瀏覽器應(yīng)用程序行為的詳細(xì)信息,并描述了消費(fèi)者應(yīng)用程序如何處理包含他們無(wú)法識(shí)別的功能的PDF文件。附錄I“對(duì)象雜湊的計(jì)算”詳細(xì)描述了一種用于計(jì)算對(duì)象雜湊的算法(在第8.7節(jié)“數(shù)字簽名”中討論過(guò))。彩色板部分提供了一些PDF與顏色相關(guān)的特性的插圖。在“見第1版”的文本中引用本節(jié)的內(nèi)容。本書的結(jié)尾是參考文獻(xiàn)和索引。1.2PDF1.7功能簡(jiǎn)介在PDF1.7中介紹或修改了一些特性。下面列出了最重要的添加內(nèi)容,以及對(duì)這些添加內(nèi)容的主要部分的引用:1.2.13D圖形PDF1.7引入了新功能,增加了PDF查看應(yīng)用程序?qū)?D圖形外觀和行為的控制:更多地控制3D圖形的外觀,而無(wú)需更改原始圖稿,也不需要使用嵌入式JavaScript。3D圖形的具體視圖可以指定圖形應(yīng)如何呈現(xiàn),著色,點(diǎn)亮和橫截面。他們還可以指定應(yīng)在視圖中包含3D圖形的哪些節(jié)點(diǎn)(三維區(qū)域),哪些節(jié)點(diǎn)應(yīng)放置在視圖中,以及它們是否應(yīng)該是透明的。這些特征可以顯現(xiàn)出難以查看的幾何區(qū)域。在3D圖形的特定視圖上放置標(biāo)記注釋的功能。這可以確保適用于3D圖形的標(biāo)記隨后可以相對(duì)于藝術(shù)作品整體和藝術(shù)作品中的各個(gè)元素而正確顯示。應(yīng)用于3D圖形的標(biāo)記注釋提供了一種確保從應(yīng)用標(biāo)記注釋開始的圖形沒有更改的方法。控制3D圖形激活時(shí)顯示的用戶界面和工具欄。控制關(guān)鍵幀動(dòng)畫的時(shí)間框架,重復(fù)和播放風(fēng)格。游戲風(fēng)格是線性重復(fù)(如步行角色)和基于余弦的重復(fù)(如爆炸式收縮圖像)。1.2.2交互功能 標(biāo)記注釋的一些附加功能使它們更適合于技術(shù)通信和審查,或者用于法律環(huán)境。協(xié)助技術(shù)交流的交互功能 標(biāo)記注釋的幾個(gè)補(bǔ)充有助于技術(shù)溝通和審查:添加多義線和多邊形標(biāo)注注釋的維度意圖。維度意圖支持用戶提供的維度信息與構(gòu)成折線和多邊形標(biāo)注注釋的線段的關(guān)聯(lián)。此功能與在PDF1.6中為線標(biāo)記注釋引入的維度意圖類似。為線,折線和多邊形標(biāo)注注釋的維度指定單位和縮放的能力。該功能使用戶可以測(cè)量文檔中的距離,例如建筑圖的寬度或3D橫截面的直徑。在3D圖形的特定視圖上放置標(biāo)記注釋的功能。鎖定注釋內(nèi)容的功能。在法律環(huán)境中使用的交互功能 標(biāo)記注釋的另外一個(gè)用于法律環(huán)境,特別是銀行業(yè)務(wù)。添加指定打印特性的新的查看器首選項(xiàng)設(shè)置,如紙張選擇和處理,頁(yè)面范圍,副本和縮放。當(dāng)用戶使用這些瀏覽器首選項(xiàng)設(shè)置打印PDF文檔時(shí),打印對(duì)話框?qū)凑者@些設(shè)置中的指定進(jìn)行預(yù)先填充。這種能力增強(qiáng)了PDF文檔的打印預(yù)覽功能,這可以使PDF文檔更適合在法律環(huán)境中使用。1.2.3可訪問(wèn)性相關(guān)功能 TaggedPDF的增加標(biāo)識(shí)了更多類型的頁(yè)面內(nèi)容的作用:識(shí)別非交互式PDF文檔中表單域的角色的能力。此更改標(biāo)識(shí)按鈕字段(按鈕,復(fù)選框和單選按鈕)和文本字段(填充或未填充)。提供與表結(jié)構(gòu)相關(guān)聯(lián)的表摘要的能力。該功能可以幫助視障者了解表的目的和結(jié)構(gòu),而無(wú)需閱讀該表中的內(nèi)容。識(shí)別背景頁(yè)面工件的能力,這對(duì)文檔回流可能很重要。背景工件是對(duì)作者的原始內(nèi)容的意義無(wú)貢獻(xiàn)的對(duì)象的集合,例如側(cè)欄或全頁(yè)背景圖像后面的彩色矩形。這樣的頁(yè)面背景可能不與任何邏輯結(jié)構(gòu)相關(guān),但是它們可能在再現(xiàn)原始文檔的外觀方面是有用的。區(qū)分分頁(yè)工件的能力:水印、頁(yè)眉和頁(yè)腳。1.2.4文件導(dǎo)航功能 對(duì)文檔導(dǎo)航的添加指定了可移植集合的查看和組織特性,其中多個(gè)文件附件顯示在一個(gè)窗口內(nèi)。可移植的集合用于顯示、排序和搜索相關(guān)文檔的集合,如電子郵件歸檔、照片收集和工程投標(biāo)集。1.2.5安全相關(guān)功能 PDF1.7引入的內(nèi)容,增加了文檔作者可以對(duì)數(shù)字簽名和超出要求施加的控制。PDF消費(fèi)者應(yīng)用程序必須滿足:附加的數(shù)字簽名約束,在簽名應(yīng)用時(shí)執(zhí)行。這些約束包括優(yōu)先雜湊算法,簽名中使用的證書的撤銷檢查以及澄清其他參數(shù)解釋的標(biāo)志。關(guān)于簽署時(shí)使用的證書的其他限制。這些約束包括必須存在于證書中的主題可分辨名稱(DN)字典,必須存在于簽名證書中的KeyUsage擴(kuò)展名以及澄清指定證書約束的其他參數(shù)的解釋的標(biāo)志。在處理或顯示PDF文檔之前,可以指定要求處理程序來(lái)驗(yàn)證PDF消費(fèi)者應(yīng)用程序必須滿足的某些要求。此功能提供了一種方法,確保與PDF文檔的向后兼容性,PDF文檔可能包含JavaScript段以驗(yàn)證要求。在添加此功能之前,JavaScript是執(zhí)行此類需求檢查的唯一方法。該功能確保JavaScript段驗(yàn)證要求,或者指定的處理程序驗(yàn)證要求。1.2.6一般功能 通過(guò)提供字符串和文件名的編碼信息,PDF1.7的增加提供了更多的跨平臺(tái)和跨應(yīng)用程序穩(wěn)定性:描述用于字符串的編碼的字符串類型的說(shuō)明。在整個(gè)PDF引用中,字符串類型的任何用途都將替換為更具體的字符串類型之一。此澄清不需要更改PDF消費(fèi)者應(yīng)用程序。相反,它更清楚地了解每個(gè)PDF字符串條目支持的編碼。當(dāng)將PDF文檔中的字符串與外部源(例如XML文檔或3D圖形)中的字符串進(jìn)行比較時(shí),這種理解可能尤為重要。使用Unicode指定文件名的功能,以及使用正在查看文檔的平臺(tái)的標(biāo)準(zhǔn)編碼指定文件名。此功能可以減少在不同平臺(tái)或不同語(yǔ)言中編碼的文件路徑名稱解碼的問(wèn)題。1.2.7PDF規(guī)范更改 此版本的“PDF規(guī)范”包含與新功能或附加功能無(wú)關(guān)的說(shuō)明:所有混合模式的公式說(shuō)明。嵌套目錄條目或列表?xiàng)l目的TaggedPDF表示形式的說(shuō)明。1.3相關(guān)文獻(xiàn) PDF和PostScript頁(yè)面描述語(yǔ)言共享相同的底層Adobe成像模型??梢栽赑DF和PostScript語(yǔ)言之間直接轉(zhuǎn)換文檔;當(dāng)打印時(shí),兩個(gè)表示產(chǎn)生相同的輸出。然而,PostScript包括一個(gè)不存在于PDF中的通用編程語(yǔ)言框架。PostScript語(yǔ)言參考是PostScript語(yǔ)言及其成像模型的綜合參考。 PDF和PostScript程序支持的幾種標(biāo)準(zhǔn)格式字體,包括AdobeType1,CFF(CompactFontFormat),TrueType,OpenType和CIDkeyed字體。這些字體的PDF表現(xiàn)在本書中有說(shuō)明。然而,字體文件本身的規(guī)格是單獨(dú)發(fā)布的,因?yàn)樗鼈兪歉叨葘I(yè)化的,并且針對(duì)不同的用戶群體會(huì)有不同。有各種Adobe文獻(xiàn)說(shuō)明了字體格式。參考文獻(xiàn)列出了這些文獻(xiàn),以及與PDF相關(guān)的其他文獻(xiàn)和本書的內(nèi)容。1.4版權(quán)說(shuō)明 Adobe擁有PDF規(guī)范中的版權(quán)。Adobe將強(qiáng)制執(zhí)行其版權(quán)。AdobePDF必須保留其PDF版權(quán)的原因是為了保持便攜式文件格式標(biāo)準(zhǔn)的完整性,并確保公眾可以區(qū)分便攜式文檔格式和電子文檔的其他交換格式。然而,Adobe希望促進(jìn)使用便攜式文檔格式來(lái)進(jìn)行不同產(chǎn)品和應(yīng)用程序之間的信息交換。因此,Adobe以其版權(quán)的所有人授予復(fù)制,修改和分發(fā)書面規(guī)范中的任何示例代碼的權(quán)限,以符合PDF規(guī)范的方式實(shí)施便攜式文檔格式所必需的程度。1 Adobe系統(tǒng)公司及其子公司擁有涵蓋PDF規(guī)范文獻(xiàn)中披露的技術(shù)的多項(xiàng)專利。PDF規(guī)范文獻(xiàn)中的任何內(nèi)容均不授予任何專利權(quán)。盡管如此,Adobe希望鼓勵(lì)在各種設(shè)備和平臺(tái)上實(shí)施PDF計(jì)算機(jī)文件格式,因此為全球的PDF實(shí)施者提供了一些免版稅專利許可。要查看這些許可證,請(qǐng)?jiān)L問(wèn)/go/developer_legalnotices。1.該示例代碼包括但不限于數(shù)字結(jié)構(gòu),操作符和PostScript語(yǔ)言功能定義的受版權(quán)保護(hù)的列表,在PDF參考,第五版,1.6版,第1.5節(jié)(知識(shí)產(chǎn)權(quán))中引用。第2章概述2.1圖像模型 PDF的核心是它描述復(fù)雜圖形和排版的外觀的能力。通過(guò)使用Adobe成像模型實(shí)現(xiàn)此功能,該模型與PostScript頁(yè)面描述語(yǔ)言中使用的高級(jí)別,與設(shè)備無(wú)關(guān)的表示法相同。 雖然應(yīng)用程序理論上可以將任何頁(yè)面描述為全分辨率像素陣列,但是生成的文件對(duì)于高分辨率設(shè)備來(lái)說(shuō)將是龐大的,取決于設(shè)備的,并且是不切實(shí)際的。高級(jí)成像模型使應(yīng)用程序能夠根據(jù)抽象圖形元素而不是直接根據(jù)設(shè)備像素來(lái)描述包含文本、圖形形狀和采樣圖像的頁(yè)面的外觀。這樣的描述是經(jīng)濟(jì)的和設(shè)備獨(dú)立的,并且可以用于在廣泛的打印機(jī)、顯示器和其他輸出設(shè)備上產(chǎn)生高質(zhì)量的輸出。2.1.1頁(yè)面描述語(yǔ)言 在其他角色中,PDF使用頁(yè)面描述語(yǔ)言,這是一種用于描述相對(duì)于成像模型的頁(yè)面的圖形外觀的語(yǔ)言。應(yīng)用程序通過(guò)兩階段過(guò)程產(chǎn)生輸出:應(yīng)用程序在頁(yè)面描述語(yǔ)言中生成與設(shè)備無(wú)關(guān)的所需輸出的描述。控制特定輸出設(shè)備的程序解釋該描述并將其呈現(xiàn)在該設(shè)備上。這兩個(gè)階段可以在不同的地方和不同的時(shí)間執(zhí)行。頁(yè)面描述語(yǔ)言作為可打印或可顯示文檔的緊湊型設(shè)備獨(dú)立傳輸和存儲(chǔ)的交換標(biāo)準(zhǔn)。2.1.2Adobe圖像模型 Adobe成像模型是從圖形藝術(shù)中借鑒的二維圖形的簡(jiǎn)單而統(tǒng)一的視圖。在此模型中,“畫刷”放置在選定區(qū)域的頁(yè)面上:繪制的圖形可以是字符形狀(字形),幾何形狀,線條或采樣圖像的形式,例如照片的數(shù)字表示。畫刷可能是彩色或黑色,白色或任何陰影灰色。它也可能采取重復(fù)模式(PDF1.2)的形式或顏色之間的平滑過(guò)渡色(PDF1.3)。這些元素中的任何元素可以被剪切,使在它們被放置在頁(yè)面上時(shí),可以出現(xiàn)在其他形狀內(nèi)。頁(yè)面的內(nèi)容流包含描述一系列圖形對(duì)象的操作數(shù)和操作符。PDF消費(fèi)者應(yīng)用程序維護(hù)一個(gè)隱含的當(dāng)前頁(yè)面,它累積繪畫操作員創(chuàng)建的標(biāo)記。最初,當(dāng)前頁(yè)面完全為空。對(duì)于在內(nèi)容流中遇到的每個(gè)圖形對(duì)象,應(yīng)用程序?qū)?biāo)記放置在當(dāng)前頁(yè)面上,該代碼替換或組合它們可能覆蓋的任何先前標(biāo)記。一旦頁(yè)面完全組合,則在輸出介質(zhì)上呈現(xiàn)累積的標(biāo)記并且當(dāng)前頁(yè)面被清除為空白。PDF1.3和早期版本使用一種不透明的成像模型,其中每一個(gè)新的圖形對(duì)象被繪制在一個(gè)頁(yè)面上,完全覆蓋了這些位置上的原內(nèi)容(受某些可選參數(shù)的影響,可能會(huì)修改這種行為;參見第4.5.6節(jié)“套印控制”。不管是什么顏色的對(duì)象——白色、黑色、灰色或彩色——都被放在頁(yè)面上,就像用不透明的顏料涂在上面一樣。PDF1.4引入了一個(gè)透明的圖像模型,在該模型中,在頁(yè)面上繪制的對(duì)象不需要完全不透明。相反,新繪制的對(duì)象與頁(yè)面的先前存在的內(nèi)容相結(jié)合,產(chǎn)生的結(jié)果將對(duì)象的顏色和其背景根據(jù)其各自的不透明度特征組合起來(lái)。透明成像模型在第7章中描述。主要圖形對(duì)象(包括其他)如下:路徑對(duì)象由一系列連接的和斷開連接的點(diǎn)、線和曲線組成,它們一起描述形狀和它們的位置。它是通過(guò)對(duì)路徑構(gòu)建操作符的順序應(yīng)用而構(gòu)建的,每一個(gè)都附加一個(gè)或多個(gè)新元素。路徑對(duì)象是由一個(gè)路徑繪圖操作符結(jié)束的,它以某種方式繪制頁(yè)面上的路徑。主要的路徑繪制操作符是S(描邊),它在路徑上畫一條線,f(填充)繪制路徑的內(nèi)部。文本對(duì)象由一個(gè)或多個(gè)符號(hào)形狀組成,代表文本的字符。字符的字形在一個(gè)叫做字體的單獨(dú)的數(shù)據(jù)結(jié)構(gòu)中被描述。像路徑對(duì)象一樣,文本對(duì)象可以被描邊或填充。圖像對(duì)象是樣本值的矩形數(shù)組,每個(gè)值代表矩形內(nèi)特定位置的顏色。這些對(duì)象通常用來(lái)表示照片。繪制圖形需要各種參數(shù),一些是顯式的,另一些是隱式的。隱式參數(shù)包括當(dāng)前顏色、當(dāng)前行寬、當(dāng)前字體(字體和大小)以及其他許多參數(shù)。這些隱式參數(shù)組合在一起構(gòu)成了圖形狀態(tài);在圖形狀態(tài)中,有用于設(shè)置每個(gè)隱式參數(shù)值的操作符。繪制圖形時(shí),調(diào)用當(dāng)前生效的值。圖形狀態(tài)中的一個(gè)額外的隱式參數(shù)會(huì)修改繪制圖形對(duì)象的結(jié)果。當(dāng)前的剪切路徑概述了可以放置畫刷的當(dāng)前頁(yè)面的區(qū)域。雖然可以在當(dāng)前頁(yè)面的任何位置放置標(biāo)記,但只有落在當(dāng)前剪切路徑內(nèi)的標(biāo)記才會(huì)影響頁(yè)面;那些落在外面的不會(huì)影響頁(yè)面。最初,當(dāng)前的剪切路徑包含頁(yè)面的整個(gè)可成像區(qū)域。它可以暫時(shí)被簡(jiǎn)化為由路徑或文本對(duì)象定義的形狀,或者多個(gè)這樣的形狀的交集。隨后放置的標(biāo)記被限制在該邊界內(nèi)。2.1.3光柵輸出設(shè)備Adobe圖像模型的大部分功能源自它處理一般光柵類輸出設(shè)備的能力。這些技術(shù)包括激光、點(diǎn)陣、噴墨打印機(jī)、數(shù)字成像器和光柵掃描顯示器等技術(shù)。光柵輸出設(shè)備的定義特性是,一個(gè)打印或顯示的圖像由一個(gè)矩形陣列(或光柵)組成,這些點(diǎn)被稱為像素(圖像元素),可以單獨(dú)處理。在典型的bilevel輸出設(shè)備中,每個(gè)像素都可以是黑白的。在某些設(shè)備上,像素可以設(shè)置為灰色或某種顏色的中間陰影。設(shè)置單個(gè)像素顏色的能力使生成打印或顯示輸出成為可能,這些輸出可以包括文本、任意圖形形狀和采樣圖像。光柵輸出設(shè)備的分辨率可以測(cè)量沿兩個(gè)線性尺寸的每單位距離的像素?cái)?shù)。分辨率通常是水平和垂直,但不是一定的。制造商對(duì)設(shè)備技術(shù)和價(jià)格/性能的權(quán)衡,產(chǎn)生了特有的分辨率范圍:電腦顯示器的分辨率相對(duì)較低,通常為每英寸75到110像素。點(diǎn)陣式打印機(jī)通常每英寸有100到250個(gè)像素。噴墨和激光掃描靜電印刷技術(shù)實(shí)現(xiàn)了每英寸300至1400像素的中級(jí)分辨率。攝影技術(shù)允許每英寸2400像素以上的高分辨率。更高的分辨率可以產(chǎn)生更好的質(zhì)量和保真度,但成本更高。隨著技術(shù)的進(jìn)步和計(jì)算成本的降低,產(chǎn)品逐漸演變?yōu)楦叩姆直媛?。掃描轉(zhuǎn)換通過(guò)稱為掃描轉(zhuǎn)換的過(guò)程,在光柵輸出設(shè)備上渲染抽象圖形元素(例如線,圓,字符字形或采樣圖像)。給定圖形元素的數(shù)學(xué)描述,該過(guò)程確定要調(diào)整的像素以及為這些像素分配哪些值以在可用的設(shè)備分辨率下實(shí)現(xiàn)最忠實(shí)的再現(xiàn)。頁(yè)面上的像素可以由計(jì)算機(jī)內(nèi)存中的像素值的二維數(shù)組表示。對(duì)于其像素只能為黑色或白色的輸出設(shè)備,單個(gè)位足以表示每個(gè)像素。對(duì)于可以再現(xiàn)灰度級(jí)或彩色的設(shè)備,需要每像素多個(gè)位。注意:雖然印刷或顯示頁(yè)面的最終表示在邏輯上是一個(gè)完整的像素陣列,但其在計(jì)算機(jī)存儲(chǔ)器中的實(shí)際表示不需要由每個(gè)像素的一個(gè)存儲(chǔ)單元組成。一些實(shí)現(xiàn)使用其他表示,如顯示列表。Adobe成像模型經(jīng)過(guò)精心設(shè)計(jì),不依賴于光柵內(nèi)存的任何特定表示。對(duì)于要出現(xiàn)在頁(yè)面上的每個(gè)圖形元素,掃描轉(zhuǎn)換器設(shè)置相應(yīng)像素的值。當(dāng)頁(yè)面描述的解釋完成時(shí),存儲(chǔ)器中的像素值表示頁(yè)面的外觀。此時(shí),光柵輸出過(guò)程可以在打印頁(yè)面或顯示屏幕上呈現(xiàn)此表示(使其可見)。掃描轉(zhuǎn)換圖形形狀(如矩形或圓形)需要確定哪些設(shè)備像素位于形狀內(nèi),并適當(dāng)?shù)卦O(shè)置其值(例如,為黑色)。因?yàn)樾螤畹倪吘壊⒉豢偸蔷_地落在像素之間的邊界上,因此需要一些策略來(lái)決定如何沿邊緣設(shè)置像素。掃描轉(zhuǎn)換表示文本字符的字形在概念上與掃描轉(zhuǎn)換任意圖形的形狀相同。然而,字符字形對(duì)可讀性要求更加敏感,并且必須滿足更嚴(yán)格的客觀和主觀質(zhì)量測(cè)量。在雙層設(shè)備上渲染灰度元素通過(guò)稱為半色調(diào)的技術(shù)來(lái)實(shí)現(xiàn)。根據(jù)某些圖案將像素陣列分成小簇(稱為半色調(diào)屏)。在每個(gè)集群中,一些像素被設(shè)置為黑色,而其他像素被設(shè)置為與頁(yè)面上該位置所需的灰度級(jí)成比例的白色。當(dāng)從足夠的距離觀察時(shí),各個(gè)點(diǎn)變得不可察覺,感覺到的結(jié)果是灰色陰影。這使得二級(jí)光柵輸出設(shè)備能夠重現(xiàn)灰度,并近似諸如照片的自然圖像。一些彩色設(shè)備使用類似的技術(shù)。2.2其他通用特性本節(jié)介紹PDF的除了成像模型之外的其它需要注意的通用特性。2.2.1可移植性 PDF文件被表示為8位二進(jìn)制字節(jié)的序列。PDF文件被設(shè)計(jì)成可移植到所有平臺(tái)和操作系統(tǒng)。二進(jìn)制表示的目的是直接生成、傳輸和使用,而不需要在本機(jī)字符集、行尾表示或其他平臺(tái)上使用的其他約定之間進(jìn)行轉(zhuǎn)換。 任何PDF文件也可以以只使用7位ASCII(美國(guó)信息交換標(biāo)準(zhǔn)編碼)字符編碼的形式表示。這對(duì)于展示的目的很有用,就像在這本書里一樣。但是,這種表示并不推薦用于實(shí)際使用,因?yàn)樗绕胀ǖ亩M(jìn)制表示效率低。不管使用哪種表示,PDF文件都必須作為二進(jìn)制文件傳輸和存儲(chǔ),而不是作為文本文件。無(wú)意的更改,例如在文本結(jié)束的約定之間的轉(zhuǎn)換,將損壞該文件,并可能使其無(wú)法使用。2.2.2壓縮 為了減少文件大小,PDF支持許多種行業(yè)標(biāo)準(zhǔn)壓縮過(guò)濾器:JPEG和(PDF1.5)JPEG2000彩色和灰度圖像壓縮。CCITT(組3或組4),運(yùn)行長(zhǎng)度和(在PDF1.4)JBIG2單色圖像壓縮。LZW(Lempel-Ziv-Welch)和(從PDF1.2開始)Flate壓縮,文本,圖形和圖像的壓縮。使用JPEG壓縮,顏色和灰度圖像可以壓縮10倍或更多。對(duì)單色圖像的有效壓縮取決于所使用的壓縮過(guò)濾器和圖像的屬性,但降低2:1到8:1是常見的(或20:1至50:1,這是JBIG2壓縮的一頁(yè)圖片的圖像)。內(nèi)容流的LZW或Flate壓縮描述了文檔中所有其他文本和圖形的壓縮比,約為2:1。所有這些壓縮過(guò)濾器都產(chǎn)生二進(jìn)制數(shù)據(jù),如果需要一個(gè)7位的ASCII表示,則可以進(jìn)一步轉(zhuǎn)換為ASCIIbase-85編碼。2.2.3字體管理在文檔交換中,管理字體是一個(gè)基本的挑戰(zhàn)。通常,文檔的接收者必須擁有與創(chuàng)建文檔相同的字體。如果一個(gè)不同的字體被替換,它的字符集、字形形狀和指標(biāo)可能與原來(lái)的字體不同。這種替代可以產(chǎn)生意想不到的不需要的結(jié)果,比如文本的行延伸到邊緣或與圖形重疊。PDF提供了處理字體管理的各種方法:原始的字體程序可以嵌入在PDF文件中,這確保了最可預(yù)測(cè)和可靠的結(jié)果。PDF支持各種字體格式,包括Type1、TrueType、OpenType和cid-keyed字體。為了節(jié)省空間,可以嵌入一個(gè)字體子集,只包含那些在文檔中實(shí)際使用的字符的符號(hào)描述。另外,Type1字體可以用一種特殊的緊湊格式表示。PDF規(guī)定了一組14種標(biāo)準(zhǔn)字體,可以在沒有預(yù)先定義的情況下使用。這些包括三個(gè)拉丁文字體(Courier,Helvetica*和Times*)中的四個(gè)面,以及兩個(gè)符號(hào)字體(Symbol和ITCZapfDingbats?)。所有PDF消費(fèi)應(yīng)用程序都需要這些字體或具有相同指標(biāo)的合適替代字體。PDF文件可以通過(guò)名稱引用未嵌入PDF文件的字體。在這種情況下,PDF的使用者可以在其環(huán)境中使用這些字體。這種方法受到上面提到的不確定性的影響。PDF文件包含其使用的每種字體的字體描述符。字體描述符包括字體度量和樣式信息,使得應(yīng)用程序能夠在必要時(shí)選擇或合成合適的替代字體。雖然字形的形狀與預(yù)期的形狀不同,但它們的位置是準(zhǔn)確的。字體管理主要關(guān)注生成文本的正確外觀,即字形的形狀和位置。然而,PDF應(yīng)用程序有時(shí)需要提取文本的含義,以某些標(biāo)準(zhǔn)信息編碼(如Unicode)表示。在某些情況下,可以從用于表示PDF文件中的文本的編碼推導(dǎo)出此信息。否則,PDF制作應(yīng)用程序應(yīng)通過(guò)包含特殊對(duì)象ToUnicodeCMap來(lái)明確指定映射。2.2.4單次傳遞文件生成由于系統(tǒng)限制和效率考慮,可能需要或希望應(yīng)用程序在單次傳遞中生成PDF文件。例如,程序可能具有有限的可用內(nèi)存或無(wú)法打開臨時(shí)文件。因此,PDF支持單次傳遞生成文件。雖然一些PDF對(duì)象必須以字節(jié)指定其長(zhǎng)度,但是提供了一種機(jī)制,允許長(zhǎng)度跟隨PDF文件中的對(duì)象。此外,在生成所有頁(yè)面之后,文檔中的頁(yè)數(shù)等信息可以寫入文件。在單次傳遞中生成的PDF文件通常不是為了最有效的閱讀而排序的,特別是在通過(guò)網(wǎng)絡(luò)訪問(wèn)文件的內(nèi)容時(shí)。當(dāng)生成要多次查看的PDF文件時(shí),值得執(zhí)行第二次傳遞來(lái)優(yōu)化文件中發(fā)生的對(duì)象的順序。PDF指定了一個(gè)特定的文件組織,線性化PDF,它在附錄F中列出。其他優(yōu)化也是可能的,例如檢測(cè)圖形對(duì)象的重復(fù)序列,并將其折疊成只指定一次的共享序列。2.2.5隨機(jī)訪問(wèn)PDF文件應(yīng)該被認(rèn)為是一個(gè)數(shù)據(jù)結(jié)構(gòu)的扁平表示,它包含可以以任意方式相互引用的對(duì)象集合。在PDF文件中出現(xiàn)的對(duì)象順序沒有語(yǔ)義意義。一般來(lái)說(shuō),應(yīng)用程序應(yīng)該根據(jù)對(duì)象的引用來(lái)處理PDF文件,而不是按順序處理對(duì)象。這對(duì)于交互式文檔查看或任何在PDF文件中的頁(yè)面或其他對(duì)象被從序列中訪問(wèn)的應(yīng)用程序尤其重要。為了支持對(duì)單個(gè)對(duì)象的這種隨機(jī)訪問(wèn),每個(gè)PDF文件都包含一個(gè)交叉引用表,可用于定位和直接訪問(wèn)文件中的頁(yè)面和其他重要對(duì)象。交叉引用表存儲(chǔ)在文件的末尾,允許在單次傳遞中生成PDF文件的應(yīng)用程序可以輕松地存儲(chǔ)它,而那些讀取PDF文件的應(yīng)用程序可以輕松地定位它。通過(guò)使用交叉引用表,找到一個(gè)頁(yè)面或其他對(duì)象所需的時(shí)間幾乎與文檔的長(zhǎng)度無(wú)關(guān),從而可以有效地訪問(wèn)包含數(shù)百或數(shù)千頁(yè)的PDF文檔。2.2.6安全性PDF有兩個(gè)可以在任何文檔中單獨(dú)或一起使用的安全功能:該文檔可以加密,以便只有授權(quán)的用戶可以訪問(wèn)它。對(duì)文檔的所有者和所有其他用戶有單獨(dú)的授權(quán);可以選擇性地限制用戶的訪問(wèn)以僅允許某些操作,例如查看,打印或編輯。該文件可以進(jìn)行數(shù)字簽名,以證明其真實(shí)性。簽名可以采取許多形式,包括用公共/私人密鑰加密的文檔摘要,諸如指紋的生物特征簽名等。簽名PDF文件的任何后續(xù)更改都會(huì)使簽名無(wú)效。2.2.7增量更新應(yīng)用程序可能允許用戶修改PDF文檔。每次保存對(duì)文檔的修改時(shí),用戶不必等待整個(gè)文件(可能包含數(shù)百頁(yè)或更多頁(yè))。PDF允許對(duì)文件進(jìn)行修改,保留原始數(shù)據(jù)。增量更新文件時(shí)附加的附錄僅包含實(shí)際添加或修改的對(duì)象,并包含對(duì)交叉引用表的更新。增量更新允許應(yīng)用程序以與修改大小成比例的時(shí)間量將文檔的修改保存到PDF文檔,而不是文件的大小。另外,由于文件的原始內(nèi)容仍然存在文件中,所以可以通過(guò)刪除一個(gè)或多個(gè)附錄來(lái)撤消保存的更改。當(dāng)應(yīng)用數(shù)字簽名并隨后需要驗(yàn)證時(shí),恢復(fù)原始文檔的確切內(nèi)容的能力至關(guān)重要。2.2.8可擴(kuò)展性PDF的設(shè)計(jì)是可擴(kuò)展的。不僅可以添加新功能,而且基于早期版本的PDF的應(yīng)用程序在遇到不了解的較新功能時(shí)可以合理地執(zhí)行。附錄H描述了PDF消費(fèi)者應(yīng)用程序在這種情況下的行為。此外,PDF提供了應(yīng)用程序?qū)⑵渥约旱乃饺诵畔⒋鎯?chǔ)在PDF文件中的方法。當(dāng)該文件由同一應(yīng)用程序?qū)霑r(shí),可以恢復(fù)該信息,但是被其他應(yīng)用程序忽略。因此,PDF可以作為應(yīng)用程序的本機(jī)文件格式,而其文檔可以被其他應(yīng)用程序查看和打印。特定于應(yīng)用程序的數(shù)據(jù)可以作為標(biāo)記內(nèi)容存儲(chǔ)在PDF內(nèi)容流中注釋圖形對(duì)象,也可以作為與PDF內(nèi)容未連接的完全獨(dú)立的對(duì)象進(jìn)行存儲(chǔ)。2.3創(chuàng)建PDFPDF文件可以直接由應(yīng)用程序生成,也可以間接地通過(guò)其他文件格式或成像模型的轉(zhuǎn)換來(lái)生成。隨著PDF文檔和處理它們的應(yīng)用程序變得越來(lái)越普遍,將會(huì)產(chǎn)生新的創(chuàng)建和使用PDF的方法。許多應(yīng)用程序可以直接生成PDF文件,有些應(yīng)用程序也可以導(dǎo)入它們。這種直接方法是優(yōu)選的,因?yàn)樗箲?yīng)用程序能夠訪問(wèn)PDF的全部功能,包括成像模型和交互式和文檔交互功能。或者,直接生成PDF的應(yīng)用程序可以間接產(chǎn)生PDF輸出。有兩種主要的間接方法:應(yīng)用程序通過(guò)調(diào)用應(yīng)用程序編程接口(API)來(lái)描述其打印輸出,例如Microsoft?Windows?的GDI或蘋果MacOS的QuickDraw。一個(gè)稱為打印機(jī)驅(qū)動(dòng)程序的軟件組件攔截這些調(diào)用,并解釋它們以PDF格式生成輸出。應(yīng)用程序可以直接以某種其他文件格式生成可打印的輸出,例如PostScript,PCL,HPGL或DVI,它們通過(guò)單獨(dú)的翻譯程序轉(zhuǎn)換為PDF。雖然這些間接策略通常是從現(xiàn)有應(yīng)用程序獲取PDF輸出的最簡(jiǎn)單方法,但是生成的PDF文件可能無(wú)法充分利用高級(jí)Adobe成像模型。這是因?yàn)閼?yīng)用程序的API調(diào)用或中間輸出文件中體現(xiàn)的信息通常以太低的級(jí)別描述所需的結(jié)果。原始應(yīng)用程序維護(hù)的任何更高級(jí)別的信息都已丟失,不適用于打印機(jī)驅(qū)動(dòng)程序或轉(zhuǎn)換器。圖2.1和2.2顯示了Acrobat產(chǎn)品如何支持這些間接方法。在Windows和MacOS平臺(tái)上可用的AdobePDF打印機(jī)(圖2.1)充當(dāng)打印機(jī)驅(qū)動(dòng)程序,通過(guò)操作系統(tǒng)的API攔截正在運(yùn)行的應(yīng)用程序生成的圖形和文本操作。AdobePDF打印機(jī)將它們轉(zhuǎn)換為等效的PDF操作符,并將它們嵌入到PDF文件中,而不是將這些操作轉(zhuǎn)換為打印機(jī)命令并將其直接傳輸?shù)酱蛴C(jī)。結(jié)果是一個(gè)平臺(tái)獨(dú)立的文件,可以在任何支持的平臺(tái)上運(yùn)行的PDF查看器應(yīng)用程序(如Acrobat)進(jìn)行查看和打印,即使是與最初生成文件的平臺(tái)不同的平臺(tái)。圖2.1使用Adobe打印機(jī)創(chuàng)建PDF文件而不是通過(guò)API調(diào)用來(lái)描述其可打印的輸出,有些應(yīng)用程序直接生成PostScript頁(yè)面描述,或者是因?yàn)镼uickDraw或GDI圖像模型中的限制,或者因?yàn)閼?yīng)用程序運(yùn)行在諸如DOS或UNIX?等平臺(tái)上,而沒有系統(tǒng)級(jí)的打印機(jī)驅(qū)動(dòng)程序存在。這些應(yīng)用程序生成的PostScript文件可以使用AcrobatDistiller?應(yīng)用程序轉(zhuǎn)換為PDF文件(參見圖2.2)。因?yàn)镻ostScript和PDF共享相同的Adobe成像模型,所以Distiller可以將PostScript文件的精確圖形內(nèi)容保留在PDF中。此外,Distiller還支持PostScript語(yǔ)言擴(kuò)展,稱為pdfmark,它允許生產(chǎn)應(yīng)用程序在PostScript文件中嵌入指令,以創(chuàng)建超文本鏈接,邏輯結(jié)構(gòu)以及PDF的其他交互和文檔交互功能。同樣,可以在任何支持的平臺(tái)上使用查看器應(yīng)用程序(如Acrobat)查看生成的PDF文件。圖2.2使用AcrobatDistiller創(chuàng)建PDF文件2.4PDF和PostScript語(yǔ)言用于設(shè)置圖形狀態(tài)和繪制圖形對(duì)象的PDF操作符與PostScript語(yǔ)言中的相應(yīng)操作符類似。然而,與PostScript不同,PDF不是一個(gè)全面的編程語(yǔ)言;它降低了靈活性,提高了效率和可預(yù)測(cè)性。因此PDF與PostScript的區(qū)別在于以下重要方面:PDF強(qiáng)制執(zhí)行嚴(yán)格定義的文件結(jié)構(gòu),允許應(yīng)用程序以任意順序訪問(wèn)文檔的部分。為了簡(jiǎn)化內(nèi)容流的處理,PDF不包括常見的編程語(yǔ)言功能,如過(guò)程,變量和控制結(jié)構(gòu)。PDF文件包含字體指標(biāo)等信息,以確保查看保真度。PDF文件可能包含與成像模型不直接相關(guān)的附加信息,例如用于交互式查看的超文本鏈接和用于文檔交互的邏輯結(jié)構(gòu)信息。由于這些差異,PDF文件通常不能直接傳輸?shù)絇ostScript輸出設(shè)備進(jìn)行打?。ūM管有些這樣的設(shè)備也直接支持PDF)。將PDF文檔打印到PostScript設(shè)備的應(yīng)用程序必須遵循以下步驟:插入包含PostScript過(guò)程定義的過(guò)程集以實(shí)現(xiàn)PDF操作符。提取每個(gè)頁(yè)面的內(nèi)容。每個(gè)內(nèi)容流本質(zhì)上是傳統(tǒng)PostScript程序的腳本部分,使用非常具體的過(guò)程,例如m是moveto和l是lineto。根據(jù)需要對(duì)壓縮文本,圖形和圖像數(shù)據(jù)進(jìn)行解碼。PDF中使用的壓縮過(guò)濾器與PostScript中使用的壓縮過(guò)濾器兼容;它們可能或可能不受支持,具體取決于目標(biāo)輸出設(shè)備的語(yǔ)言級(jí)別。將任何所需的資源(如字體)插入到PostScript文件中。這些可以是基于PDF文件中的字體指標(biāo)的原始字體或合適的替代字體。字體可能需要轉(zhuǎn)換為PostScript解釋器識(shí)別的格式,例如Type1或Type42。以正確的順序放置信息。結(jié)果是一個(gè)傳統(tǒng)的PostScript程序,它完全代表文檔的視覺方面,但不再包含PDF元素,如超文本鏈接,注釋和書簽。將PostScript程序傳送到輸出設(shè)備。第3章語(yǔ)法本章介紹了PDF對(duì)象、文件和文檔級(jí)別的語(yǔ)法,是后續(xù)章節(jié)的語(yǔ)法基礎(chǔ)。后續(xù)章節(jié)介紹PDF文件的頁(yè)面描述、交叉引用和文件邏輯結(jié)構(gòu)。PDF語(yǔ)法分為4個(gè)部分,如圖3.1所示:對(duì)象。PDF文檔是一種數(shù)據(jù)集合,是由基本的數(shù)據(jù)對(duì)象組成。3.1節(jié),“詞匯術(shù)語(yǔ)(LexicalConventions)”介紹用于寫入對(duì)象和其他語(yǔ)法元素的字符集。3.2節(jié),“對(duì)象(Objects)”介紹對(duì)象的語(yǔ)法和基本屬性。3.2.7節(jié),“流對(duì)象(StreamObjects)”介紹最復(fù)雜的數(shù)據(jù)類型流對(duì)象。文件結(jié)構(gòu)。文件結(jié)構(gòu)定義了PDF文件中對(duì)象如何存儲(chǔ)、訪問(wèn)和更新。文件結(jié)構(gòu)與對(duì)象的語(yǔ)義無(wú)關(guān)。3.4節(jié),“文件結(jié)構(gòu)(FileStructure)”介紹文件結(jié)構(gòu)。3.5節(jié),“加密(Encryption)”介紹文件級(jí)加密。文檔結(jié)構(gòu)。PDF文檔結(jié)構(gòu)描述了如何使用基本類型對(duì)象來(lái)表示PDF文檔的組件,如頁(yè)、字體、注釋等等。3.6節(jié),“文檔結(jié)構(gòu)(DocumentStructure)”介紹文檔結(jié)構(gòu),后面的章節(jié)介紹文檔組件的詳細(xì)語(yǔ)義。內(nèi)容流。PDF內(nèi)容流包含描述頁(yè)面或其他圖形實(shí)體外觀的指令序列。這些指令,同時(shí)也被表示為對(duì)象,在概念上與表示文檔結(jié)構(gòu)的對(duì)象不同,并且分別描述。3.7節(jié),內(nèi)容流和資源(ContentStreamsandResources)介紹了內(nèi)容流及其相關(guān)資源。圖3.1PDF組件此外,本章還介紹了一些由基本數(shù)據(jù)對(duì)象構(gòu)成的數(shù)據(jù)結(jié)構(gòu),它們被廣泛使用,因此基本上可以將它們當(dāng)作基本數(shù)據(jù)對(duì)象。這些數(shù)據(jù)結(jié)構(gòu)包括3.8節(jié)“通用數(shù)據(jù)結(jié)構(gòu)”,3.9節(jié)“函數(shù)”,3.10節(jié)“文件規(guī)范”。PDF的對(duì)象和文件語(yǔ)法也被用作其他文件格式的基礎(chǔ)。包括8.6.6節(jié)表單數(shù)據(jù)描述的表單數(shù)據(jù)格式(FDF)和在Adobe的技術(shù)說(shuō)明#5620便攜作業(yè)格式中描述的便攜作業(yè)格式(PJTF)。3.1詞匯約定在最底層,PDF文件是一個(gè)8位字節(jié)的序列。這些字節(jié)可以根據(jù)后面的語(yǔ)法規(guī)則分組為不同的標(biāo)志(tokens)。一個(gè)或多個(gè)標(biāo)志構(gòu)成了更高級(jí)的語(yǔ)義實(shí)體,即對(duì)象。對(duì)象是構(gòu)建PDF文檔的基礎(chǔ)數(shù)據(jù)值。PDF可以完全表示可見的ASCII字符,加上空白字符(如空格、制表符、回車及換行)。ASCII是美國(guó)信息交互的標(biāo)準(zhǔn)編碼格式,ASCII編碼是將特定的128個(gè)字符使用二進(jìn)制編碼。但是,PDF文件不限于ASCII字符集,它可以包含任意的8位字節(jié),但須遵守以下條件:分隔對(duì)象和描述PDF文件結(jié)構(gòu)的標(biāo)志都是用ASCII字符集編碼的,用作保留字和標(biāo)準(zhǔn)字典中的關(guān)鍵字名稱。某些類型對(duì)象(字符串和流)的數(shù)據(jù)值可以不需要完全用ASCII字符集。如果是說(shuō)明或注釋,最好使用ASCII字符集。但是,在實(shí)際應(yīng)用中,有些數(shù)據(jù)本身就是二進(jìn)制的,如圖像,這樣比較緊湊和高效。包含二進(jìn)制數(shù)據(jù)的PDF文件必需原原本本的保存和傳輸文件的所有字節(jié),也就是說(shuō),作為一個(gè)二進(jìn)制文件而不是一個(gè)文本文件。這樣的文件不能移植到增加保留字符編碼,最大行長(zhǎng)度,行尾約定或其他限制的環(huán)境中。注意:本章中,字符和字節(jié)是表示相同的含義,都是指8位字節(jié)。它是獨(dú)立于任何上下文關(guān)系的邏輯意義。3.1.1字符集PDF字符集分為三類:常規(guī)字符、分隔符和空白字符。這個(gè)分類將字符串、流和注釋外的字符組合分組為不同的標(biāo)志。對(duì)于字符串、流和注釋有其它不同的規(guī)則??瞻鬃址ㄒ姳?.1)分隔了句子結(jié)構(gòu),如將名字、數(shù)字分隔開。除了在注釋、字符串和流的其他所有情況下,所有的空白字符都是等價(jià)的,PDF會(huì)將多個(gè)連續(xù)的空白字符當(dāng)作一個(gè)空白字符。表3.1空白字符十進(jìn)制值十六進(jìn)制值八進(jìn)制值名稱000000空(NUL)909011Tab(HT)100A012換行(LF)120C014換頁(yè)(FF)130D015回車(CR)3220040空格(SP)回車(CR)和換行(LF)符,也被稱為換行字符,被視為行結(jié)束(EOF)標(biāo)記?;剀嚭缶o跟換行符也作為行結(jié)束(EOF)標(biāo)記。在大多數(shù)情況下,EOF標(biāo)記也作為空白字符。但是,有時(shí)行結(jié)束標(biāo)記是必需的,因?yàn)楹罄m(xù)的標(biāo)志(tokens)必需在行首。注意:本書中的例子在行中放置標(biāo)志的用法是習(xí)慣用法,但是,例子中空白字符使用縮進(jìn)僅是為了易讀,在實(shí)際應(yīng)用中,不建議這樣做。 分隔符是一些特殊的字符,包含(,),<,>,[,],{,},/,%。它們分隔語(yǔ)法實(shí)體,如字符串、數(shù)組、名稱和注釋。這些字符中的任何一個(gè)都標(biāo)志一個(gè)實(shí)體的結(jié)束,但字符本身不屬于實(shí)體。 除了空白字符和分隔符之外的所有字符都稱為常規(guī)字符。這些字符包括ASCII字符集外的8位二進(jìn)制字符。連續(xù)的常規(guī)字符組成一個(gè)標(biāo)志(token)。注意:PDF是區(qū)分大小寫的,相應(yīng)的大小寫字母被認(rèn)為是不同的。3.1.2注釋 在字符串或流之外的任何地方出現(xiàn)的百分號(hào)符號(hào)(%),都被當(dāng)作注釋。注釋由百分號(hào)和行結(jié)束標(biāo)志之間的所有字符組成,包括常規(guī)字符、分隔符、空格和制表符。PDF忽略注釋,將其視為單個(gè)空白字符。也就是說(shuō),一個(gè)注釋將其之前的標(biāo)志和之后的標(biāo)志分開。因此,下面的PDF片斷abc%comment{/%)blahblahblah123在語(yǔ)法上只相當(dāng)于標(biāo)志abc和123。 注釋(除了在3.4節(jié)“文件結(jié)構(gòu)”中描述的%PDF-n.m和%%EOF)沒有任何語(yǔ)義。它們?cè)诰庉婸DF文件的應(yīng)用程序中不一定會(huì)被保存(見附錄H中的注釋2)。特別是,沒有PostScript文檔結(jié)構(gòu)約定(DSC)的PDF替代品。3.2對(duì)象PDF包含8種基本對(duì)象類型:布爾值整數(shù)和實(shí)數(shù)字符串名字?jǐn)?shù)組字典流空對(duì)象對(duì)象可能被標(biāo)記,這樣它們可以被其他對(duì)象引用。被標(biāo)記的對(duì)象也稱為間接對(duì)象。以下部分描述各個(gè)對(duì)象類型,以及如何創(chuàng)建和引用間接對(duì)象。3.2.1布爾對(duì)象PDF提供由關(guān)鍵字ture和false標(biāo)識(shí)的布爾對(duì)象。布爾對(duì)象可以用作數(shù)組元素和字典入口的值,也可以作為PostScript計(jì)算器函數(shù)的運(yùn)算結(jié)果以及作為條件運(yùn)算符(if和ifelse)中的操作數(shù)(見3.9.4節(jié)“類型4(PostScript計(jì)算器)函數(shù)”)。3.2.2數(shù)值對(duì)象PDF提供兩種類型的數(shù)值對(duì)象:整數(shù)和實(shí)數(shù)。整數(shù)對(duì)象表示以0為中心的一段范圍內(nèi)的數(shù)學(xué)整數(shù)。實(shí)數(shù)對(duì)象近似于數(shù)學(xué)實(shí)數(shù),但范圍和精度有限。它們通常以定點(diǎn)形式而非浮點(diǎn)形式表示。數(shù)字的范圍和精度受到PDF應(yīng)用程序的計(jì)算機(jī)中使用的范圍和精度限制。附錄C給出了通常實(shí)施環(huán)境中的限制。一個(gè)整數(shù)由一個(gè)或多個(gè)十進(jìn)制數(shù)組成,可帶一個(gè)符號(hào)。12343445 +17 -98 0上述值被解釋為帶符號(hào)的十進(jìn)制整數(shù),并被轉(zhuǎn)化為整數(shù)對(duì)象。如果它超出了整數(shù)的范圍,則被轉(zhuǎn)化為實(shí)數(shù)對(duì)象。一個(gè)實(shí)數(shù)一個(gè)或多個(gè)十進(jìn)制數(shù)和一個(gè)可選符號(hào)和頭,尾或小數(shù)點(diǎn)。34.5 -3.62 +123.6 4. -.002 0.0上述值被解釋為實(shí)數(shù),并被轉(zhuǎn)化為實(shí)數(shù)對(duì)象。如果超出了實(shí)數(shù)范圍,則會(huì)報(bào)錯(cuò)。注意:PDF不支持含有非十進(jìn)制格式(例如16#FFFE)或指數(shù)格式(例如6.02E23)數(shù)字的PostScript語(yǔ)法。 在本書中,術(shù)語(yǔ)“數(shù)”是指一個(gè)對(duì)象,可以是整數(shù)對(duì)象或?qū)崝?shù)對(duì)象。當(dāng)期望使用一個(gè)實(shí)數(shù)對(duì)象時(shí),可能被一個(gè)整數(shù)對(duì)象替代了,整數(shù)對(duì)象會(huì)自動(dòng)轉(zhuǎn)化為一個(gè)等價(jià)的實(shí)數(shù)對(duì)象。例如,沒有必要以實(shí)際格式使用實(shí)數(shù)1.0,而整數(shù)1就足夠了。3.2.3字符串對(duì)象 字符串對(duì)象由一系列字節(jié)(無(wú)符號(hào)整型,范圍0到255)組成,字符串對(duì)象不是整數(shù)對(duì)象,而是以更緊湊的格式存儲(chǔ)。字符串的長(zhǎng)度受到實(shí)施環(huán)境限制,參見附錄C。 字符串對(duì)象可由兩種方式表示:用括號(hào)()括起來(lái)的文本字符。參見下面的“文本字符串”。用尖括號(hào)<>括起來(lái)的十六進(jìn)制字符。參見下面的“十六進(jìn)制字符串”。本節(jié)只描述將字符串寫入字節(jié)序列的基本語(yǔ)法。字符串可以用于多種目的,可以有多種格式。當(dāng)字符串用于某些特定目的(例如表示日期)時(shí),就需要有對(duì)應(yīng)的格式標(biāo)準(zhǔn)(參見3.8.3節(jié)“日期”)來(lái)實(shí)現(xiàn)這些目的。這樣的格式只是用于解釋字符串的格式約定,而不是對(duì)象類型。使用特定格式的字符串對(duì)象的定義描述了該格式的用法。3.8.1節(jié)“字符串類型”描述了用于字符串對(duì)象內(nèi)容的編碼方案。文本字符串 文本字符串是包括在一對(duì)括號(hào)()內(nèi)的任意數(shù)量字符。除了不對(duì)稱括號(hào)和反斜杠字符外,任何字符都可以出現(xiàn)在字符串中。不成對(duì)括號(hào)和反斜杠字符需要特殊處理,字符串中成對(duì)的括號(hào)不需要特殊處理。 下面是合法的字符串: (Thisisastring) (Stringsmaycontainnewlinesandsuch.)(Stringsmaycontainbalancedparentheses()andspecialcharacters(*!&}^%andsoon).)(Thefollowingisanemptystring.)()(Ithaszero(0)length.)在文本字符串中,反斜杠(\)用作轉(zhuǎn)義字符功能,如換行符、不可見的ASCII字符、不成對(duì)括號(hào)或反斜杠字符本身。反斜杠之后的字符決定其精確的含義(見表3.2)。如果反斜杠字符后的字符不是表中的任何一個(gè),則反斜杠會(huì)被忽略。表3.2文本字符串中的轉(zhuǎn)義字符字符含義\n換行(LF)\r回車(CR)\t水平制表符(HT)\b回退(BS)\f換頁(yè)符(FF)\(左括號(hào)\)右括號(hào)\\反斜杠\ddd以八進(jìn)制表示的字符ddd如果一個(gè)字符串太長(zhǎng),一行放不下,可以使用反斜杠符號(hào)將它分為多行。反斜杠和緊隨其后的行結(jié)束標(biāo)記不被視為字符串的一部分。例如:(These\twostrings\arethesame.)(Thesetwostringsarethesame.)如果文本字符串中含有行結(jié)束標(biāo)記,并且沒有使用反斜杠符號(hào)進(jìn)行轉(zhuǎn)義,那結(jié)果相當(dāng)于\n(無(wú)論行結(jié)束標(biāo)記是回車還是換行,或者兩者都有)。(Thisstringhasanend-of-lineattheendofit.)(Sodoesthisone.\n)\ddd轉(zhuǎn)義符提供了一種表示不可見ASCII字符的方法。例如:(Thisstringcontains\245twooctalcharacters\307.)數(shù)ddd可由一個(gè),兩個(gè)或三個(gè)八進(jìn)制數(shù)字組成,高階溢出被忽略。如果字符串的下一個(gè)字符也是一個(gè)數(shù)字,則必需使用三個(gè)八進(jìn)制數(shù)字,若不夠三個(gè),則前面加0,例如:(\0053)該字符串包含兩個(gè)字符,\005(Control-E),然后是一個(gè)數(shù)字3。而下例中的兩個(gè)字符串都只包含單個(gè)字符\053,一個(gè)加號(hào)字符(+)。(\053)(\53)這種表示法提供了一種使用ASCII字符指定7位ASCII字符集之外的字符的方法。但是,任何8位值都可能出現(xiàn)在字符串中。特別是當(dāng)文檔被加密(參見3.5節(jié)“加密”)時(shí),它的所有字符串都被加密,并且通常包含任意的8位值。請(qǐng)注意,反斜杠字符仍然需要作為轉(zhuǎn)義符來(lái)指定不成對(duì)括號(hào)或反斜杠字符本身。十六進(jìn)制字符串 字符串也可以以十六進(jìn)制形式表示,這樣在PDF文件中就可以包含任意二進(jìn)制數(shù)據(jù)。十六進(jìn)制字符串以十六進(jìn)制數(shù)字(0-9和A-F或a-f)的序列表示,它們包含在一對(duì)尖括號(hào)內(nèi)。(<和>): <4E6F762073686D6F7A206B6120706F702E> 每對(duì)十六進(jìn)制數(shù)字表示字符串的一個(gè)字節(jié)??瞻鬃址ㄈ缈崭瘢票矸?,回車符,換行符和換頁(yè)符)被忽略。 如果十六進(jìn)制字符串的最后數(shù)字丟失,也就是說(shuō),如果有奇數(shù)個(gè)數(shù)字,則最后一位被假定為0。例如: <901FA3>是一個(gè)3字節(jié)的字符串,十六進(jìn)制編碼為90,1F和A3。但是 <901FA>是一個(gè)3字節(jié)的字符串,十六進(jìn)制編碼為90,1F和A0。3.2.4名字對(duì)象 名字對(duì)象是由字符序列唯一定義的原子符號(hào)。這種特殊的定義,意味著由相同字符序列組成的任意兩個(gè)名字對(duì)象,都是相同的對(duì)象。原子的概念意味著名字對(duì)象沒有內(nèi)部結(jié)構(gòu);雖然它是由字符序列定義的,但這些字符不被認(rèn)為是該名字對(duì)象的元素。 斜杠(/)字符表示了一個(gè)名字對(duì)象。斜杠字符不是名字的一部分,而是前綴,表示后面的字符序列構(gòu)成名字。斜杠字符與名字的第一個(gè)字符之間不能有空格字符。名字可能包含任意常規(guī)字符,但不包括分隔符和空白字符(參見3.1節(jié)“詞匯約定”)。大寫和小寫的字母被認(rèn)為是不同的:/A和/a是不同的名字。以下的示例是有效的文本名字: /Name1/ASomewhatLongerName/A;Name_With?Various***Characters?/1.2/$$/@pattern/.notdef注意:標(biāo)志/(后面沒有任何常規(guī)字符)也是一個(gè)有效的名字。 從PDF1.2開始,除空字符(字符代碼0)以外的任何字符,都可以通過(guò)在它的兩位十六進(jìn)制編碼前面加上數(shù)字符號(hào)(#),讓其包含在一個(gè)名字中;見附錄H的執(zhí)行說(shuō)明3和4。此語(yǔ)法可以表示任何分隔符或空格字符或數(shù)字符號(hào)本身,對(duì)于編碼不在范圍33(!)~126(~)的字符,建議使用此語(yǔ)法表示。表3.3中的示例是PDF1.2及更高版本中的有效文本名字。表3.3使用#字符的文本名字示例文本名字結(jié)果/Adobe#20GreenAdobeGreen/PANTONE#205757#20CVPANTONE5757CV/paired#28#29parenthesespaired()parentheses/The_Key_of_F#23_MinorThe_Key_of_F#_Minor/A#42AB 名字的長(zhǎng)度受實(shí)施環(huán)境的限制,見附錄C。該限制是針對(duì)名字內(nèi)部的實(shí)際字符個(gè)數(shù)。例如,名字/A#20B是四個(gè)字符(/,A,空格,B),而不是六個(gè)。 如上所述,名字對(duì)象在PDF文件中被視為原子符號(hào)。通常,構(gòu)成名字的字符序列從不會(huì)被當(dāng)作文本顯示給人看或輸出給外部程序。然而,偶爾需要將名字對(duì)象視為文本,例如表示一個(gè)字體名稱(請(qǐng)參見表5.8中的BaseFont條目)或結(jié)構(gòu)類型(請(qǐng)參見10.6.2節(jié)“結(jié)構(gòu)類型”)。 在這種情況下,建議采用UTF-8編碼來(lái)表示名字的字符序列。UTF-8編碼是一種Unicode的可變長(zhǎng)度字節(jié)編碼。ASCII碼中的可見字符的編碼與UTF-8相同。這使得名字對(duì)象能夠以任何自然語(yǔ)言表示文本,但需要對(duì)名字的長(zhǎng)度實(shí)施限制。(見附錄H中的實(shí)施說(shuō)明5)。注意:PDF不規(guī)定選擇哪一種UTF-8序列來(lái)將任意指定的外部文本表示為名字對(duì)象。在某些情況下,多個(gè)UTF-8序列可以表示相同的邏輯文本。由不同字節(jié)序列定義的名字對(duì)象在PDF中構(gòu)成不同的名字對(duì)象,盡管UTF-8序列可能具有相同的外部解釋。 在PDF中,名字對(duì)象始終以斜杠字符(/)開始,與諸如true,false和obj的關(guān)鍵字不同。本書遵循一種排版約定,當(dāng)它們出現(xiàn)在動(dòng)態(tài)的文本和表格中時(shí),無(wú)需使用前綴斜杠字符即可輸入名字。例如,以Type和FullScreen表示的名字,在PDF文件(和本書中的代碼示例)中以/Type和/FullScreen名字對(duì)象表示。3.2.5數(shù)組對(duì)象 數(shù)組對(duì)象是按順序排列的對(duì)象的一維集合。與許多其他計(jì)算機(jī)語(yǔ)言的數(shù)組不同,PDF數(shù)組可能是異構(gòu)的;也就是說(shuō),數(shù)組的元素可以是數(shù)字,字符串,字典或任何其他對(duì)象(包括其他數(shù)組)的任何組合。數(shù)組中的元素?cái)?shù)量受制于實(shí)施限制;見附錄C。 數(shù)組是一個(gè)包含在一對(duì)方括號(hào)([和])內(nèi)的對(duì)象序列: [5493.14false(Ralph)/SomeName] PDF直接支持一維數(shù)組??梢酝ㄟ^(guò)使用數(shù)組作為數(shù)組的元素來(lái)構(gòu)建更高維度的數(shù)組,可嵌套到任何深度。3.2.6字典對(duì)象 字典對(duì)象是包含成對(duì)對(duì)象(稱為字典條目)的關(guān)聯(lián)表。每個(gè)條目的第一個(gè)元素是鍵,第二個(gè)元素是值。鍵必須是一個(gè)名字(與PostScript中的字典鍵不同,它可能是任何類型的對(duì)象)。值可以是任何類型的對(duì)象,包括另一個(gè)字典。值為空的字典條目(參見3.2.8節(jié)“空對(duì)象”)等同于缺少條目。(這與PostScript不同,其中空的行為與任何其他對(duì)象一樣,作為字典條目的值)。字典中的條目數(shù)量受制于實(shí)施限制;見附錄C。注意:一個(gè)字典中不應(yīng)該有兩個(gè)條目具有相同的鍵。如果一個(gè)鍵出現(xiàn)多次,它的值是未定義的。 字典對(duì)象是包含在一對(duì)雙尖括號(hào)(<<>>)內(nèi)的一系列鍵-值對(duì)序列。例如: <</Type/Example/Subtype/DictionaryExample/Version0.01/IntegerItem12/StringItem(astring)/Subdictionary<</Item10.4/Item2true/LastItem(not!)/VeryLastItem(OK)>>>>注意:請(qǐng)勿將雙尖括號(hào)與單尖括號(hào)(<和>)混淆,單尖括號(hào)是定義十六進(jìn)制字符串的(請(qǐng)參見3.23節(jié)中的“十六進(jìn)制字符串”)。 字典對(duì)象是PDF文檔的主要構(gòu)建塊。它們通常用于集成并將復(fù)雜對(duì)象(例如文檔的字體或頁(yè)面)的屬性與字典中的每個(gè)條目相關(guān)聯(lián),以指定屬性的名稱和值。按照慣例,這樣的字典的類型條目標(biāo)識(shí)字典描述的對(duì)象的類型。在某些情況下,使用子類型條目(有時(shí)縮寫為S)進(jìn)一步標(biāo)識(shí)一般類型的專門子類型。類型或子類型條目的值始終是一個(gè)名字。例如,在字體字典中,類型條目的值始終為字體,而子類型條目的值可以是類型1,全真類型(TrueType)或其他幾個(gè)值之一。 類型條目的值幾乎可以總是從上下文推斷出來(lái)。例如,Tf操作符的操作數(shù)必須是字體對(duì)象;因此,字體字典中的類型條目主要用作記錄和錯(cuò)誤檢查的信息。類型條目不是必需的,除非在其描述中另有說(shuō)明;但是,如果條目存在,它必須具有正確的值。此外,任何字典中的類型條目的值,即使是私有數(shù)據(jù),都必須是本書中定義的名字或已注冊(cè)的名字;詳見附錄E。3.2.7流對(duì)象 流對(duì)象,和字符串對(duì)象一樣,是一個(gè)字節(jié)序列。但是,PDF應(yīng)用程序可以逐步讀取流,而字符串必須全部讀取。此外,流可以是無(wú)限長(zhǎng)度的,而字符串受到實(shí)施限制的。因此,具有潛在大量數(shù)據(jù)的對(duì)象(如圖像和頁(yè)面描述)被表示為流。注意:與字符串一樣,本節(jié)只描述將流的字節(jié)序列語(yǔ)法。這些字節(jié)表示的含義由引用流的上下文決定。 一個(gè)流對(duì)象,由字典和包含在stream和endstream關(guān)鍵字之間的0個(gè)或多個(gè)字節(jié)組成。例如: dictionarystream…Zeroormorebytes…endstream所有流對(duì)象必須是間接對(duì)象(請(qǐng)參見第3.2.9節(jié)“間接對(duì)象”),而流對(duì)象中的字典對(duì)象(流字典)必須是直接對(duì)象。跟在字典后的關(guān)鍵字stream,后面必需跟行結(jié)束標(biāo)記(EOF),行結(jié)束標(biāo)記可以是回車加換行或單獨(dú)的換行,但不能是單獨(dú)的回車。組成流對(duì)象的字節(jié)序列位于stream和endstream關(guān)鍵字之間;流字典指定字節(jié)流的確切字節(jié)數(shù)。建議在流數(shù)據(jù)和endstream關(guān)鍵字之間要有行結(jié)束標(biāo)記(EOF),此標(biāo)記不包括在流數(shù)據(jù)中。另外,從PDF1.2開始,字節(jié)可以包含在外部文件中,在這種情況下,流字典指定文件,并且忽略stream和endstream之間的任何字節(jié)。(見附錄H中的說(shuō)明6)。注意:stream關(guān)鍵字后的行結(jié)束標(biāo)記不能使用單獨(dú)的回車,是因?yàn)?,如果單?dú)的回車可作為行結(jié)束標(biāo)記,那就不能區(qū)分一個(gè)使用回車換行作為行結(jié)束標(biāo)記的流和一個(gè)以回車作為行結(jié)束標(biāo)記但以換行符為第一個(gè)數(shù)據(jù)字節(jié)的流。 表3.4列出了所有流字典中常見的條目;某些類型的流可能有額外的字典條目,比如說(shuō)明流位置的條目。關(guān)于流對(duì)象的可選條目過(guò)濾器,指明了流數(shù)據(jù)在使用前是否需要轉(zhuǎn)換或解碼,以及如何轉(zhuǎn)換或解碼。過(guò)濾器在3.3節(jié)“過(guò)濾器”中進(jìn)一步描述。流長(zhǎng)度 每個(gè)流字典都有一個(gè)長(zhǎng)度(Length)條目,表示用于流數(shù)據(jù)的PDF文件字節(jié)數(shù)。(如果流有過(guò)濾器,則長(zhǎng)度是編碼后數(shù)據(jù)的字節(jié)數(shù)。)此外,大多數(shù)過(guò)濾器被定義為使數(shù)據(jù)具有自限性;也就是說(shuō),采用一種編碼方案,使用顯式的數(shù)據(jù)終止(EOD)標(biāo)記界定數(shù)據(jù)的范圍。最后,流用于表示許多對(duì)象,可以從屬性中推斷長(zhǎng)度。所有這些約束必須是一致的。 例如,使用單顏色分量和每個(gè)分量8位的10行20列的圖像需要200字節(jié)的圖像數(shù)據(jù)。如果流使用過(guò)濾器,PDF文件中必需要有足夠的生成這200字節(jié)數(shù)據(jù)的編碼數(shù)據(jù)字節(jié)。如果長(zhǎng)度太小或數(shù)據(jù)終止標(biāo)記(EOD)標(biāo)記太早出現(xiàn)或解碼后數(shù)據(jù)不夠200字節(jié),則會(huì)發(fā)生錯(cuò)誤。 如果流包含太多的數(shù)據(jù),也是錯(cuò)誤的,除了PDF文件中有額外的行結(jié)束標(biāo)記在關(guān)鍵字endstream之前。表3.4流字典常見條目鍵類型值Length整型(必需)從關(guān)鍵字stream之后的行開始到關(guān)鍵字endstream之前的最后一個(gè)字節(jié)的字節(jié)數(shù)。(可能還有一個(gè)額外的行結(jié)束(EOL)標(biāo)記,不包括在計(jì)數(shù)中,邏輯上不屬于流數(shù)據(jù))。參見上面的“流長(zhǎng)度”。Filter名字或數(shù)組(可選)過(guò)濾器的名字或名字?jǐn)?shù)組。過(guò)濾器用于處理關(guān)鍵字stream和endstream之間的流數(shù)據(jù)。多個(gè)過(guò)濾器應(yīng)按他們的使用順序列出。DecodeParms字典或數(shù)組(可選)參數(shù)字典或此類字典的數(shù)組。參數(shù)字典是鍵Filter中的過(guò)濾器使用。如果只有一個(gè)過(guò)濾器和該過(guò)濾器有參數(shù),則DecodeParms必須設(shè)置為過(guò)濾器的參數(shù)字典,除非所有過(guò)濾器的參數(shù)都有默認(rèn)值,這種情況下可忽略DecodeParms條目。如果有多個(gè)過(guò)濾器,并且有任意一個(gè)過(guò)濾器的參數(shù)設(shè)置為非默認(rèn)值,則DecodeParms必需是每個(gè)過(guò)濾器條目的數(shù)組:條目是該過(guò)濾器的參數(shù)字典或空對(duì)象(該過(guò)濾器沒有參數(shù)或所有參數(shù)都有默認(rèn)值)。如果沒有一個(gè)過(guò)濾器有參數(shù),或者其所有參數(shù)都有默認(rèn)值,則可以省略DecodeParms條目。(見附錄H中的說(shuō)明7)F文件描述(可選,PDF1.2)包含流數(shù)據(jù)的文件。如果此條目存在,則忽略關(guān)鍵字stream和endstream之間的字節(jié)。過(guò)濾器由FFilter指定而不是Filter,過(guò)濾器參數(shù)由FDecodeParms指定而不是DecodeParms。但是,Length條目仍然指定stream和enstream之間的字節(jié)數(shù)量。(通常,stream和endstream之間沒有字節(jié),長(zhǎng)度為0)(見附錄H中的說(shuō)明46)。FFilter名字或數(shù)組(可選,PDF1.2)過(guò)濾器的名字或名字?jǐn)?shù)組。用于處理流數(shù)據(jù)定義在外部文件的情況。規(guī)則與Filter相同。FDecodeParms字典或數(shù)組(可選,PDF1.2)參數(shù)字典或此類字典的數(shù)組。用于過(guò)濾器由FFilter定義的情況。規(guī)則與DecodeParms相同。DL整型(可選;PDF1.5)非負(fù)整數(shù),表示解碼后流中的字節(jié)數(shù)。例如,它可以用于確定是否有足夠的磁盤空間可用于將流寫入文件。這個(gè)值只是一個(gè)提示;對(duì)于一些流過(guò)濾器,可能無(wú)法精確地確定此值。3.2.8空對(duì)象 空對(duì)象的類型和值與其他任何對(duì)象都是不同的。空對(duì)象的類型為空,由關(guān)鍵字null表示。間接對(duì)象(見3.2.9節(jié)“間接對(duì)象”)若引用了一個(gè)不存在的對(duì)象,則此間接對(duì)象與空對(duì)象相同。將空對(duì)象指定為字典條目的值(3.2.6節(jié)“字典對(duì)象”)相當(dāng)于完全省略該條目。3.2.9間接對(duì)象 PDF文件中的任何對(duì)象都可能被標(biāo)記為間接對(duì)象。給對(duì)象賦予一個(gè)唯一的對(duì)象標(biāo)識(shí)符,其他對(duì)象就可以引用它(例如,作為數(shù)組的元素或字典條目的值)。對(duì)象標(biāo)識(shí)符由兩部分組成:對(duì)象編號(hào),為正整數(shù)。間接對(duì)象通常在PDF文件中順序編號(hào),但不是必需的;對(duì)象編號(hào)可以任意順序分配。生成編號(hào),為非負(fù)整數(shù)。在新創(chuàng)建的文件中,所有的間接對(duì)象的生成編號(hào)都為0。當(dāng)文件以后更新時(shí)可能會(huì)引入非零生成編號(hào);請(qǐng)參見3.4.3節(jié)“交叉引用表”和3.4.5節(jié)“增量更新”。所以,對(duì)象編號(hào)和生成編號(hào)的組合唯一的標(biāo)識(shí)了間接對(duì)象。對(duì)象在其存在期間保留相同的對(duì)象編號(hào)和生成編號(hào),即使其值被修改。PDF文件中間接對(duì)象的定義,包含對(duì)象編號(hào)、生成編號(hào)以及關(guān)鍵字obj和endobj之間的對(duì)象值。例如,下面120obj(Brillig)endobj定義了一個(gè)間接流對(duì)象,對(duì)象編號(hào)為12,生成編號(hào)為0,對(duì)象值為Brilling。 可以通過(guò)由對(duì)象編號(hào),生成編號(hào)和關(guān)鍵字R組成的間接引用在文件中的其他位置引用該對(duì)象: 120R 從PDF1.5開始,間接對(duì)象可以放在對(duì)象流中(見3.4.6節(jié)“對(duì)象流”)。引用它們的方式完全相同,但是,在對(duì)象流中不使用關(guān)鍵字obj和endobj。 對(duì)未定義對(duì)象的間接引用不是錯(cuò)誤的,它被簡(jiǎn)單的認(rèn)為是對(duì)空對(duì)象的引用。例如,如果文件中有間接引用170R,但沒有對(duì)應(yīng)的定義 170obj…endobj那么間接引用被認(rèn)為是對(duì)空對(duì)象的引用。注意:在構(gòu)成PDF文檔的數(shù)據(jù)結(jié)構(gòu)中,需要將某些值指定為間接對(duì)象引用。除了顯式調(diào)用之外,任何對(duì)象(除了流)都可以直接指定或作為間接對(duì)象引用來(lái)指定;語(yǔ)義完全等價(jià)。特別要注意的是,定義文檔可視內(nèi)容的內(nèi)容流不能包含間接引用。(見3.7.1節(jié)“內(nèi)容流”)。另見附錄H中的說(shuō)明8。 示例3.1顯示了使用間接對(duì)象來(lái)指定流的長(zhǎng)度。在文件中,流的長(zhǎng)度條目是跟在流后面的整數(shù)對(duì)象。這允許在一次傳遞中生成PDF格式的應(yīng)用程序延遲指定流的長(zhǎng)度,直到其內(nèi)容生成為止。示例3.170obj<</Length80R>>%對(duì)對(duì)象8的間接引用streamBT/F112Tf72712Td(Astreamwithanindirectlength)TjETendstreamendobj80obj77%前面流的長(zhǎng)度endobj3.3過(guò)濾器 流過(guò)濾器在3.2.7節(jié)“流對(duì)象”中介紹。過(guò)濾器是流規(guī)范中的可選部分,指示流中的數(shù)據(jù)在使用之前必須進(jìn)行解碼。例如,如果流具有ASCIIHexDecode過(guò)濾器,則讀取該流中數(shù)據(jù)的應(yīng)用程序,需要將流中的ASCII十六進(jìn)制編碼數(shù)據(jù)轉(zhuǎn)換為二進(jìn)制數(shù)據(jù)。 生成PDF文件的應(yīng)用程序可以對(duì)某些信息(例如,采樣圖像的數(shù)據(jù))進(jìn)行編碼,將其壓縮或轉(zhuǎn)換為可移植的ASCII編碼。然后,讀取PDF文件的應(yīng)用程序可以調(diào)用相應(yīng)的解碼器,將信息轉(zhuǎn)換回其原始格式。 過(guò)濾器或流過(guò)濾器由流字典中的Filter條目指定(如果流是外部的話,則由FFilter條目指定)。過(guò)濾器可以級(jí)聯(lián)形成一個(gè)管道,它通過(guò)序列中的兩個(gè)或多個(gè)解碼轉(zhuǎn)換傳遞流。例如,可以使用以下流字典中的條目對(duì)使用LZW編碼和ASCIIbase-85編碼(按順序)編碼的數(shù)據(jù)進(jìn)行解碼: /Filter[/ASCII85Decode/LZWDecode] 有些過(guò)濾器可能需要參數(shù)來(lái)控制它們的運(yùn)行方式。這些可選參數(shù)由流字典中的DecodeParms條目指定(如果流是外部的話,則由FDecodeParms條目指定)。 PDF支持的標(biāo)準(zhǔn)過(guò)濾器,分為兩大類:ASCII過(guò)濾器可以對(duì)ASCII文本編碼的任意8位二進(jìn)制數(shù)據(jù)進(jìn)行解碼。(見3.1節(jié)“詞匯約定”,以了解此類編碼用途。)請(qǐng)注意,ASCII過(guò)濾器在加密的PDF文件中沒有任何用途;參見3.5節(jié)“加密”。解壓過(guò)濾器可對(duì)壓縮過(guò)的數(shù)據(jù)進(jìn)行解碼。壓縮數(shù)據(jù)始終為8位二進(jìn)制格式,即使原始數(shù)據(jù)為ASCII文本。(壓縮對(duì)于大型采樣圖像特別有價(jià)值,因?yàn)樗鼫p少了存儲(chǔ)空間要求和傳輸時(shí)間。某些類型的壓縮是有損的,這意味著一些數(shù)據(jù)在壓縮過(guò)程中會(huì)丟失,導(dǎo)致數(shù)據(jù)解壓后損失精度。沒有數(shù)據(jù)丟失的壓縮稱為無(wú)損壓縮。)標(biāo)準(zhǔn)過(guò)濾器總結(jié)在表3.5中,表中也指明過(guò)濾器是否接受任何可選參數(shù)。接下來(lái)的章節(jié)將詳細(xì)介紹這些過(guò)濾器及其參數(shù)(如果有的話),包括一些過(guò)濾器的編碼算法規(guī)范。(另見附錄H中的說(shuō)明9和10)。示例3.2顯示了一個(gè)包含頁(yè)標(biāo)記指令的流,它使用LZW壓縮算法壓縮,然后以ASCIIbase-85編碼表示。示例3.3顯示了相同流,但沒有任何編碼。(該流的內(nèi)容在3.7.1節(jié)“內(nèi)容流”中進(jìn)行了說(shuō)明,第5章進(jìn)一步描述了使用的操作符。)表3.5標(biāo)準(zhǔn)過(guò)濾器過(guò)濾器名稱參數(shù)描述ASCIIHexDecode無(wú)對(duì)以ASCII十六進(jìn)制格式編碼的數(shù)據(jù)進(jìn)行解碼,再現(xiàn)原始二進(jìn)制數(shù)據(jù)。ASCII85Decode無(wú)對(duì)以ASCIIbase-85十六進(jìn)制格式編碼的數(shù)據(jù)進(jìn)行解碼,再現(xiàn)原始二進(jìn)制數(shù)據(jù)。LZWDecode有解壓使用LZW(Lempel-Ziv-Welch)自適應(yīng)壓縮算法編碼的數(shù)據(jù),再現(xiàn)原始文本或二進(jìn)制數(shù)據(jù)。FlateDecode有(PDF1.2)解壓使用zlib/deflate壓縮方法編碼的數(shù)據(jù),再現(xiàn)原始文本或二進(jìn)制數(shù)據(jù)。RunLengthDecode無(wú)解壓使用面向字節(jié)的行程長(zhǎng)度壓縮算法編碼的數(shù)據(jù),再現(xiàn)原始文本或二進(jìn)制數(shù)據(jù)(通常為單色圖像數(shù)據(jù),或任何包含頻繁長(zhǎng)時(shí)間運(yùn)行單字節(jié)值的數(shù)據(jù))。CCITTFaxDecode有解壓使用CCITT傳真標(biāo)準(zhǔn)編碼的數(shù)據(jù),再現(xiàn)原始數(shù)據(jù)(通常為每像素1位的單色圖像數(shù)據(jù))。JBIG2Decode有(PDF1.4)解壓使用JBIG2標(biāo)準(zhǔn)編碼的數(shù)據(jù),再現(xiàn)原始單色(每像素1位)圖像數(shù)據(jù)(或該數(shù)據(jù)的近似值)。DCTDecode有解壓使用基于JPEG標(biāo)準(zhǔn)的DCT(離散余弦變換)技術(shù)壓縮的數(shù)據(jù),再現(xiàn)近似原始數(shù)據(jù)的圖像采樣數(shù)據(jù)。JPXDecode無(wú)(PDF1.5)解壓使用基于小波變換的JPEG2000標(biāo)準(zhǔn)壓縮數(shù)據(jù),再現(xiàn)原始圖像數(shù)據(jù)。Crypt有(PDF1.5)解密由安全處理程序加密的數(shù)據(jù),再現(xiàn)加密前的原始數(shù)據(jù)。示例3.210obj<</Length534/Filter[/ASCII85Decode/LZWDecode]>>streamJ..)6T`?p&<!J9%_[umg"B7/Z7KNXbN'S+,*Q/&"OLT'FLIDK#!n`$"<Atdi`\Vn%b%)&'cA*VnK\CJY(sF>c!Jnl@RM]WM;jjH6Gnc75idkL5]+cPZKEBPWdR>FF(kj1_R%W_d&/jS!;iuad7h?[L?F$+]]0A3Ck*$I0KZ?;<)CJtqi65XbVc3\n5ua:Q/=0$W<#N3U;H,MQKqfg1?:lUpR;6oN[C2E4ZNr8Udn.'p+?#X+1>0Kuk$bCDF/(3fL5]Oq)^kJZ!C2H1'TO]Rl?Q:&'<5&iP!$Rq;BXRecDN[IJB`,)o8XJOSJ9sDS]hQ;Rj@!ND)bD_q&C\g:inYC%)&u#:u,M6Bm%IY!Kb1+":aAa'S`ViJglLb8<W9k6Yl\\0McJQkDeLWdPN?9A'jX*al>iG1p&i;eVoK&juJHs9%;Xomop"5KatWRT"JQ#qYuL,JD?M$0QP)lKn06l1apKDC@\qJ4B!!(5m+j.7F790m(Vj88l8Q:_CZ(Gm1%X\N
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 遠(yuǎn)洋貨物運(yùn)輸?shù)目癸L(fēng)險(xiǎn)能力考核試卷
- 電容器在環(huán)境監(jiān)測(cè)設(shè)備中的關(guān)鍵作用考核試卷
- 纖維生產(chǎn)過(guò)程中的自動(dòng)化控制技術(shù)考核試卷
- 2024年聚酰胺樹脂資金需求報(bào)告代可行性研究報(bào)告
- 2024年滴眼劑項(xiàng)目投資申請(qǐng)報(bào)告代可行性研究報(bào)告
- 2024年袋裝腹膜透析液投資申請(qǐng)報(bào)告代可行性研究報(bào)告
- 2024年電子計(jì)步器實(shí)驗(yàn)分析儀器項(xiàng)目資金申請(qǐng)報(bào)告代可行性研究報(bào)告
- 初三畢業(yè)班工作第三次教師會(huì)議上副校長(zhǎng)講話從今天開始讓我們聚焦中考服務(wù)好學(xué)生創(chuàng)造2024年新輝煌
- 2025年中國(guó)保安服務(wù)行業(yè)市場(chǎng)前景預(yù)測(cè)及投資價(jià)值評(píng)估分析報(bào)告
- 木材及林產(chǎn)品市場(chǎng)價(jià)格波動(dòng)風(fēng)險(xiǎn)規(guī)避協(xié)議
- 2021譯林版高中英語(yǔ)選擇性必修四課文翻譯
- 測(cè)量?jī)x器自檢記錄表(全站儀)
- 投標(biāo)咨詢服務(wù)協(xié)議(新修訂)
- 2022年虹口區(qū)事業(yè)單位公開招聘面試考官練習(xí)試題附答案
- Java程序設(shè)計(jì)項(xiàng)目教程(第二版)教學(xué)課件匯總完整版電子教案
- 訪談提綱格式4篇
- 能源經(jīng)濟(jì)學(xué)第10章-能源投融資
- 鋼結(jié)構(gòu)監(jiān)理實(shí)施細(xì)則(全)
- 世界各個(gè)國(guó)家二字代碼表
- 附件_景觀工作面移交表
- TZ 324-2010 鐵路預(yù)應(yīng)力混凝土連續(xù)梁(剛構(gòu))懸臂澆筑施工技術(shù)指南
評(píng)論
0/150
提交評(píng)論