複製鏈接
請複製以下鏈接發送給好友

可移植文檔格式

鎖定
移植文檔格式英語:Portable Document Format,簡稱PDF)是一種用獨立於應用程序硬件操作系統的方式呈現文檔文件格式。每個PDF文件包含固定佈局的平面文檔的完整描述,包括文本字形、圖形及其他需要顯示的信息。1991年,Adobe Systems共同創始人約翰·沃諾克提出的名為“Camelot”的系統演變成PDF。
中文名
可移植文檔格式
外文名
Portable Document Format
簡    稱
PDF
領    域
計算機

可移植文檔格式歷史

PDF文件格式在1990年代早期開發,用於分享包括文本格式和內置視頻的文檔,能跨平台操作,即使電腦平台完全不同,收件者亦無需適配相關或合用的應用軟件接口。當時與PDF一起競逐跨平台文件格式的,還包括DjVu(仍在開發中)、Envoy、Common Ground Digital Paper、Farallon Replica及Adobe自己本身的PostScript(.ps)格式。在萬維網及HTML文本尚未興起的當時,PDF在桌面出版工作流技術當中很受歡迎。PDF以往是由Adobe控制的專有格式,直到2008年7月1日官方作為開放標準發行,並由國際標準化組織以ISO 32000-1:2008標準發佈,在這段時間規範通過ISO志願者產業專家委員會控制。2008年,Adobe發佈對ISO 32000-1的公共專利許可賦予對所有Adobe擁有的製作、使用、銷售及分發兼容PDF的實現所需的專利的買斷式授權的權益。
PDF 1.7包含了一些由Adobe定義的專有技術,如Adobe XML表單結構(XFA)和JavaScript中對Acrobat的擴展。這些被ISO 32000-1引用作為實現ISO 32000-1規格的應用所規範化和必須的。這些專有技術沒有被規範化,而且這類技術的規格只在Adobe網站上發佈。其中的大多數沒有得到流行的第三方PDF實現的支持。
2017年7月28日,ISO發佈ISO 32000-2。ISO 32000-2沒有包含任何專有技術作為規範化的參考資料。 [1] 

可移植文檔格式技術基礎

PDF主要由三項技術組成:
  • 派生自PostScript頁面描述語言的子集,用以生成和輸出圖形。
  • 字體嵌入/替換系統,可使字體隨文件一起傳輸。
  • 結構化的存儲系統,用以綁定這些元素和任何相關內容到單個文件,帶有適當的數據壓縮系統。 [1] 

可移植文檔格式PostScript

PostScript是一種運行於解釋器以生成圖像的頁面描述語言,一個需要大量資源的進程。不僅能處理圖形,也具有if及loop之類命令的標準編程語言特性。PDF很大程度上基於PostScript,但做了簡化,以移除像這樣的流控制特性,還保持着lineto之類的圖形命令。
通常,類PostScript的PDF代碼產生於PostScript源文件。以PostScript代碼輸出的圖形命令被收集並標記;其中文檔所引用的任何文件圖像或字體也被收集,然後每一件都被壓縮成單個文件。由此,整個的PostScript領域(字體、輸出、計量)得以保持完整。
作為一個文檔格式,PDF相比較於PostScript有一些優勢:
  • PDF包含已標記和解析的PostScript源代碼,以在修改PDF頁面描述中的項與修改所產生的頁面造型之間直接保持一致。
  • PDF(自1.4版)支持真圖形透明度;PostScript不支持。
  • PostScript是一種帶有隱形全局狀態的直譯編程語言,因此伴隨着一頁的指令能任何後續頁面的表現。因此,PostScript文檔中所有先前的頁面必須經過處理以決定所給出的頁面的正確的表現,而PDF文檔中的每一頁不受其他因素的影響。結果PDF查看器允許用户迅速跳轉到長文檔的最後一頁,而一個PostScript查看器需要在能夠顯示目標頁面之前繼續地處理所有的頁面(除可選PostScript文檔結構規範已被周密地遵守外)。 [1] 

可移植文檔格式技術概括

可移植文檔格式文件結構

PDF文件是COS("Carousel" Object Structure,Carousel對象結構)格式的子集。COS也伴隨着FDF文件。COS樹文件主要由對象組成,其中有八種類型:
  • 布爾值,表示true或false
  • 數字
  • 名稱
  • 數組,對象的指令性集合
  • 字典,按名稱索引對象的集合
  • 字符串流,通常包含大量數據
  • 對象
對象可以是直接(嵌入其他對象)或非直接的。直接對象以對象號及代號編號。稱為xref表的索引表賦予每個對象從文件開頭起的字節偏移量。這一設計允許有效的隨機存取到文件中的對象,還允許無需重寫整個文件(增量更新)即可做出小的改動。從PDF 1.5版開始,非直接對象也可位於稱為“對象流”的字符串流中。這一增加文件大小的技術有大量小的非直接對象,並且對置標PDF特別有用。
PDF文件有兩種輸出方式:非線性(非“優化”)和線性(“優化”)。非線性PDF文件比線性的佔用更小的硬盤空間,即使因為一部分的數據要求文檔中的集合頁面通過PDF文件分散開而訪問更慢。線性PDF文件(也稱“優化”或“web優化”PDF文件)以使得網頁瀏覽器插件無需等待下載整個文件來閲讀的方式構建,自從它們以線性方式寫入硬盤(如同頁面順序)開始。PDF文件可用Adobe Acrobat軟件或QPDF優化。 [2] 

可移植文檔格式圖像模式

圖形在PDF中呈現的基本設計是以非常類似於PostScript中的方式,除了PDF 1.4增添的透明度的使用。
PDF圖形使用設備獨立性笛卡兒座標系來描述頁面的外觀。一個PDF頁面描述可使用矩陣縮放旋轉錯切圖形元素。PDF中的一個主要概念是圖形狀態,即是可能會通過頁面描述修改、保存或還原的圖形參數的集合。PDF有(如在1.6版)24種圖形狀態屬性,其中最重要的有:
  • 當前變換矩陣(CTM),決定座標系
  • 剪切路徑
  • 阿爾法複合,透明度的關鍵部分 [2] 

可移植文檔格式矢量圖

PDF中的矢量圖如同在PostScript當中一樣,是由路徑組成的。路徑通常由直線和多項的貝茲曲線組成,但也可以從文本的外廓構建。不同於PostScript,PDF不允許帶直線和曲線的單一路徑去組合文本外廓。路徑可被描繪、填充或用於剪取。描繪和填充可用任意圖形狀態中的色彩集,包括式樣。
PDF支持多種調色板類型。最簡單的是瓷磚式樣,其中藝術作品的一部分被指定以被重複地繪製。這可能是彩色瓷磚式樣,帶有在式樣對象中的指定的顏色,或是延遲色別編碼到式樣已繪製時候的沒有顏色的瓷磚式樣。從PDF 1.3開始還有了底紋式樣, 連續繪製不同的顏色。七種底紋式樣中最簡單的是軸向底紋(Type 2)和徑向底紋(Type 3)。 [2] 

可移植文檔格式位圖

PDF中的位圖(稱作Image XObjects)由帶相關字符串流的字典呈現。字典描述了圖像的屬性和包含圖像數據的流。(少見的是,位圖或許會作為一個內嵌圖像被直接嵌入於頁面描述。)圖像通常出於壓縮的目的過濾。PDF中支持的圖像過濾器包含了常用的過濾器
  • ASCII85Decode用於把字符串流放入7位ASCII的過濾器
  • ASCIIHexDecode類似於ASCII85Decode,但兼容性低
  • FlateDecode基於RFC 1950及RFC 1951所定義的zlib/deflate算法(亦即gzip,但不是zip)的常用過濾器;引入於PDF 1.2;可用兩組預測功能中的一組以進一步兼容zlib/deflate算法:出自TIFF6.0規格中的Predictor 2和來自PNG規格(RFC 2083)的預測器(過濾器)
  • LZWDecode基於LZW算法的過濾器可用兩組預測功能中的一組進一步兼容LZW壓縮:出自TIFF6.0規格中的Predictor 2和來自PNG規格的預測器(過濾器)
  • RunLengthDecode使用遊程編碼算法和圖像指定的過濾器的用於帶重複數據的字符串流的簡單的壓縮算法
  • DCTDecode基於JPEG標準的有損過濾器
  • CCITTFaxDecode基於ITU-TT.4和T.6中定義的Group 3或Group 4CCITT(ITU-T)傳真壓縮標準的無損二值(黑白)過濾器
  • JBIG2Decode基於JBIG2標準的有損或無損二值(黑白)過濾器,引入PDF 1.4
  • JPXDecode基於JPEG 2000標準的有損或無損過濾器,引入PDF 1.5
通常PDF中包含的所有圖像嵌入於圖像,但PDF允許圖像數據通過使用外部字符串流或替代圖像存儲於外部文件。PDF的標準子集,包括PDF/A和PDF/X,禁止這些特性。 [2] 

可移植文檔格式文本

文本在PDF中以頁面內容字符串流中的“文本元素”呈現出來。一個文本元素指定字符應在指定位置描繪。字符用所選字體源的編碼指定。 [2] 

可移植文檔格式字體

PDF中的字體對象是對數碼字體的描述。可能是字體中的字符的描述,或者是包含嵌入的字體文件。後者叫嵌入字體,前者叫非嵌入字體。所嵌入的字體文件基於廣泛使用的標準數碼字體文件:Type 1(及其壓縮版變種CFF)、TrueType和(自PDF 1.6版起)OpenType。另外PDF支持由PDF圖形處理器描述的字體組件中的Type 3變種。 [2] 

可移植文檔格式編碼

文本字符串中,字符用以編碼映射字形於當前字體的字符代碼(整數)顯示。預定義的編碼有多種,包括WinAnsi、MacRoman,以及大量東亞語言編碼,而且字體可以有自己的編碼。(即使WinAnsi和MacRoman編碼取自WindowsMacintosh操作系統中歷史上的專有編碼,用這類編碼的內容在任何平台上都運行的好。)PDF可以指定可以使用的預定義的編碼、字體內置編碼,或者提供預定義或內置編碼的查詢表(不對TrueType字體推薦)。PDF中的編碼機制是為Type 1字體設計的,而且應用到TrueType字體的規則是複合的。
對於大型字體或者帶非標準字形的字體,特殊編碼Identity-H(用於橫寫)或Identity-V(用於豎寫)被使用。如果關於字符的語義信息被預定義,這類字體有必要提供ToUnicode表。 [2] 

可移植文檔格式透明度

PDF的原始圖像模型像PostScript的opaque:頁面上描繪的每個對象完全替換先前在同一位置標記的任何東西。在PDF 1.4中圖像模型被擴展以允許透明度。使用透明度的時候,新對象與先前標記的對象相互作用產生混合的特效。透明度添加到PDF由寫到PDF 1.3及早期的規格的產品中被忽略設計的新的擴展方法完成。結果,使用少量透明度的文件在舊的查看器中可能會以被接受地視圖查看,但大量用透明度的文件在舊的查看器中會顯示不正確而沒警告。
透明度擴展基於透明度組、混合模式、形狀和alpha的關鍵概念。這一模式緊密對應Adobe Illustrator9的特性。混合模式基於當時Adobe Photoshop所用的。PDF 1.4規格出版的時候,用於計算混合模式的公式被Adobe保密。此後它們被公佈。
PDF規格中透明度組的概念獨立於Adobe Illustrator之類的應用中已有的“組”或“層”的概念。那些反映對象之上的邏輯關係的分組在編輯那些對象的時候有意義,但不是圖像模型的一部分。 [2] 

可移植文檔格式交互式元素

PDF文件或許包含註釋、表單、視頻和Flash動畫之類的交互式元素。
富媒體PDF是一個用來描述可以嵌入或鏈入PDF的交互式內容的術語。這一內容必須用Flash文件格式提供。Adobe收購Macromedia的時候,公司的主業是Flash,而且Flash播放器被嵌入Adobe Acrobat,Adobe Reader,移除了用於Flash、QuickTime或Windows Media之類第三方插件的需。不幸的是,這造成QuickTime視頻從PDF被禁這樣與蘋果公司的裂痕。富媒體專家Robert Connolly相信這一事件引發了蘋果與Adobe之間Flash iPhone/iPad爭論之上的衝突。富媒體PDF將不在蘋果的iPad之類的iOS設備上操作,而且交互性受到限制。
交互式表單是一個添加表單到PDF文件格式的機制。
PDF當前支持用於集成數據和PDF表單的兩種不同的辦法。兩種格式今天並存於PDF規格:
  • AcroForms(又叫Acrobat forms)引入PDF 1.2格式規格幷包含於所有後來的PDF規格。
  • Adobe XML表單架構(XFA)的表單,引入PDF 1.5格式規格。XFA規格沒有包含於PDF規格,僅僅作為可選特性參考。Adobe XFA表單不與AcroForms兼容。 [2] 

可移植文檔格式AcroForms

AcroForms於PDF 1.2格式被引入。AcroForms准許使用對象(如文本框、選擇鈕等)及一些代碼(如JavaScript)。
在標準PDF動作類型之外,交互式形式(AcroForms)支持提交、重置和導入數據。“提交”動作傳送所選表單字段和值的名稱給指定的統一資源定為符(URL)。交互式表單字段名稱和值或許會被以任意格式提交(取決於輸出格式、提交的PDF和XFDF旗標的設置):
  • HTML表單格式(自PDF 1.5起用HTML 4.01規格;1.2起用HTML 2.0)
  • 表單數據格式(Forms Data Format,FDF)
  • XML表單數據格式(XML Forms Data Format,XFDF)(擴展XFDF規格,2.0版;自PDF 1.5起被支持;在PDF 1.4中替換XML表單提交格式定義)
  • PDF(整個文檔可以被提交,而不是單獨的字段和值)。(PDF 1.4中定義)
AcroForms可以保持表單字段於包含key:value組合的外部的單獨的文件。內部的文件可能使用FDF和XFDF文件。使用權(UR)簽名定義導入表單數據文件以FDF、XFDF及文本(CSV/TSV)格式,及以FDF及XFDF格式從數據文件導出文件的權利。 [2] 

可移植文檔格式表單數據格式(FDF)

表單數據格式(Forms Data Format,FDF)基於PDF,使用同樣的句法和基本上一樣的文件結構,但比PDF簡單,自從FDF文檔的主體由只有一個要求的對象組成開始。表單數據格式定義於PDF規格(自PDF 1.2起)。表單數據格式可在表單數據到服務器、接收響應和組合到交互式表單的時候被使用。還可以被用來導出表單數據到能被導回到相應的PDF交互式表單的單獨的文件。從PDF 1.3開始,FDF可被用來定義用於從所應用的PDF文檔分開的註釋的容器。FDF通常封裝X.509證書之類的信息、要求證書、設置目錄、設置時間戳服務器和為網絡傳輸嵌入PDF文件。FDF使用MIME內容類型application/vnd.fdf、文件擴展名.fdf,並在Mac OS使用文件類型'FDF'。導入和導出獨立FDF文件的支持沒有被自由或免費PDF軟件廣泛的實現。例如,Evince、Okular、Poppler、KPDF或Sumatra PDF沒有導入/導出的支持,然而,Evince、Okular和Popller填入PDF Acroforms並在PDF中保存已填寫數據。導入獨立FDF文件的支持在Adobe Reader中得到實現;導入和導出支持(包括在PDF中保存FDF數據)作為示例在Foxit Reader和PDF-XChange Viewer Free中得到實現;PDF文件中FDF數據的保存也被pdftk支持。 [2] 

可移植文檔格式Adobe XML表單架構(XFA)

PDF 1.5格式中,Adobe Systems引入了新的、專有的表單格式,名為Adobe XML表單架構(XFA)。XFA 2.02引用在PDF 1.5規格(及以後的版本),但單獨描述為《Adobe XML Forms Architecture (XFA) Specification》,有多個版本。XFA規格沒有包括在ISO 32000-1 PDF 1.7並僅僅作為由Adobe創建的外部專有規格引用。在ISO 32000-2(PDF 2.0)當中被棄用。
Adobe XFA表單不與AcroForms兼容。Adobe Reader包含使用XFA表單的“禁用特性”,僅在打開只來自Adobe的可行的技術創建的PDF文檔時激活。XFA Forms不兼容於Adobe Reader 6以前的版本。
XFA表單可創建或用作PDF文件或作為XDP(XML數據包)文件。PDF中XFA源的格式由XML數據包規格描述。XDP可能作為單獨的文檔,也可能在PDF文檔的內部攜帶。XDP提供打包周邊XML容器內部的表單組件的機制。XDP也可以打包一個PDF文件,伴隨XML表單和模板數據。PDF可能包含XFA(在XDP格式中),XFA也可能包含PDF。在用於XFA表單XFA(XML表單架構)語法從一個應用移到另一個應用的時候,它們必須以XML數據包封裝。
當PDF和XFA結合在一起,結果是任意頁面中的XFA表單覆蓋了PDF背景。這一架構有時被提作XFAF(XFA Foreground,XFA前景)。替代方法是直接在XFA(不用PDF,或者只用帶有PDF標記的最小構造XFA的容器的“外掛PDF”,或用靜態XFA表單的預渲染描述作為PDF)展開所有表單,包括樣板文件。這有時被稱為全XFA。
PDF 1.5開始,可變文本字段的文本內容,以及標記註解可能包含格式信息(樣式信息)。這些富文本字符串是匹配XML表單架構規格2.02(本身是XHTML 1.0規格的子集)定義的富文本慣例的XML文檔,擴展了CSS2樣式屬性中受限的設置。PDF 1.6中,PDF支持XML表單架構(XFA)規格2.2定義的富文本元素和屬性。PDF 1.7中,PDF支持XML表單架構(XFA)規格2.4定義的富文本元素和屬性。
多數PDF處理器不處理XFA內容。生成外掛PDF的時候會被建議包含於PDF標記的一個簡單的單頁PDF圖像顯示警告(如:“為了查看本文檔的全部內容,你需要新版PDF查看器”等。)能渲染XFA內容的PDF處理器應該不現實警示頁面圖像或者以動態表單內容迅速替換。帶有一些XFA渲染功能支持的PDF軟件的例子包括Adobe Reader for Windows、Linux、Mac OS X(但不是Adobe Reader Mobile for Android / iOS)或Nuance PDF Reader。 [2] 

可移植文檔格式邏輯架構與可讀性

“置標”PDF(ISO 32000-1:2008 14.8)包含文檔架構和語義信息以可用可靠的文本提取並能訪問。從技術上説,置標PDF是創建在邏輯架構的框架上的對格式的程式化的使用,引入到PDF 1.3。置標PDF定義一組標準的結構類型並賦予允許頁面內容(文本、圖形和圖片)被提取併為其他目的再利用的屬性。
置標PDF不需要PDF文件僅僅用來打印的情況。自從這一特性可選,而且ISO 32000-1指定的用於置標PDF的規則相對模糊,對置標PDF的支持在消費裝置當中,包括輔助技術(AT),是參差不齊的。
開發針對可讀性的PDF規格的ISO標準化子集的AIIM計劃起於2004年,最終成為PDF/UA。 [2] 

可移植文檔格式安全和簽名

一份PDF文件可能以用於驗證的擔保或者數字簽名加密。
由Acrobat PDF提供的標準擔保以兩種不同的方法及兩種不同的密碼組成,用户密碼,加密文件並阻止開啓;所有者密碼,指定即使文檔被解密的時候應該被限制的操作,可以包括:打印、從文檔複製文本和圖像、修飾文檔,或者添加或刪除文本註釋和AcroForm字段。用户密碼(控制開啓)加密文件並要求密碼破解以去除,難度取決於密碼長度及加密算法——它可能非常安全(假設好的密碼及加密算法沒有已知的攻擊手法)。所有者密碼(控制操作)不加密文件,相反取決於客户端軟件以遵循這些限制,並且不安全。所有者密碼可以被許多通常可用的PDF破解軟件移除,包括一些自由的在線服務。由此,文檔作者放在PDF文檔中的使用限制不安全,而且不能在一旦文件被散佈時保證;這一危險在使用Adobe Acrobat軟件以創建或編輯PDF文件應用這類限制的時候顯現出來。
即使沒有移除密碼,許多免費或開源PDF閲讀器忽略權限“保護”並允許用户打印或者做文本摘要的複製,就像文檔沒被密碼保護限制一樣。
一些解決方案像Adobe的LiveCycle Rights Management更強化信息權利管理的方式,不僅能限制誰能打開文檔,而且以標準的安全處理程序做不到的方式可靠的執行權限。 [2] 

可移植文檔格式使用權

從PDF 1.5起,使用權(UR)簽名用來啓用在一些PDF查看器應用中不是默認的附加的交互式特性。這一簽名用來驗證由真實的授權機構賦予的許可。例如,它可以允許用户:
  • 保存伴有修訂表單和/或註釋數據的PDF文檔
  • 從FDF、XFDF和文本(CSV/TSV)格式中的數據文件導入
  • 從FDF和XFDF格式中的數據文件導出
  • 從數據提交
  • 從命名的頁面模板具體呈現新頁面
  • 應用一個數碼簽名到已有的數碼簽名表單字段
  • 創建、刪除、修正、複製、導入、導出註釋
例如,Adobe Systems在Adobe Reader中授權啓用附加特性,使用公鑰密碼學。Adobe Reader使用從一個Adobe授權的權威認證的驗證那個簽名。PDF 1.5規格宣稱其他PDF閲讀器應用可以為他們自己的目的自由使用這一相同機制。 [2] 

可移植文檔格式文件附件

PDF文件可以有文檔級和頁面級的文件附件,讀者可訪問並打開或存儲於本地的文件系統。PDF附件可作為示例用pdftk加到已有的PDF文件。Adobe Reader提供對附件的支持,而且基於Poppler的閲讀器如Evince或Okular也有對文檔級附件的支持。 [2] 

可移植文檔格式元數據

PDF文件可包含兩種類型的元數據。第一種是文檔信息字典,一套像作者、標題、主題、創建及更新日期的關鍵字/值字段。這存儲於可選的文件尾部。有一小組字段是有定義的,而且如果有需要,可以用附加的文本字段擴充。
後來在PDF 1.4中,對元數據流的支持被加入,用可擴展元數據平台(XMP)來添加像在其他文件格式那樣的基於XML標準的可擴展的元數據。這允許元數據附加到文檔中的任何字符串流,諸如關於嵌入式插圖的説明,以及整個文檔(附加到文檔目錄),使用可擴展的綱要。 [2] 
參考資料
  • 1.    The application/pdf Media Type, RFC 3778, Category: Informational, 2004
  • 2.    The application/pdf Media Type, RFC 3778, Category: Informational, 2004 跳轉 ^ Adobe Systems Incorporated, PDF Reference, Sixth edition, version 1.23 (30 MB), Nov 2006, p. 33.