便攜式文檔格式(英語:Portable Document Format,縮寫:PDF)是一種用獨立於應用程序、硬件、操作系統的方式呈現文檔的文件格式。[2]每個PDF文件包含固定布局的平面文檔的完整描述,包括文本、字形、圖形及其他需要顯示的信息。PDF文件除平面的文本和圖形外,還可能包括邏輯結構元素,注釋、表單、圖層、富媒體(包括視頻內容)之類的交互元素,使用U3D或PRC的三維對象,以及多種其他數據內容。PDF規範還提供了啟用這些功能時所需的加密功能、數字簽名、文檔附件和元數據等。
PDF源自1991年Adobe Systems共同創始人約翰·沃諾克發起的「Camelot專案」。[3]2008年成為ISO標準的一部分,編號ISO 32000,最新的版本ISO 32000-2:2020在2020年十二月發布。
歷史
Adobe Systems在1993年免費提供了PDF規範[4],當時與PDF一起競逐跨平台文檔格式的,還包括 DjVu(當時仍在開發中)、Envoy、Common Ground Digital Paper、Farallon Replica 及 Adobe 自己本身的 PostScript(.ps)格式。在萬維網及HTML文本尚未興起時,PDF在桌面出版工作流技術當中很受歡迎。PDF起初為Adobe所控制的專有格式,直到2008年7月1日才被官方以開放標準發行,並由國際標準化組織以 ISO 32000-1:2008 發布。[5][6] 此後,標準的控制權便移轉到了產業專家志願者所組的ISO委員會底下。2008年,Adobe在 ISO 32000-1 發佈了公共專利許可,對於製作、使用、銷售及發佈PDF相容的應用所需的專利,皆賦予買斷式授權。[7]
PDF 1.7 含有一些Adobe所定義的專有技術,如Adobe XML表單結構(XFA)和JavaScript中對Acrobat的擴展。這些技術被 ISO 32000-1 引用為對於該規範之完整實現不可或缺且規範性的,但是它們並沒有被標準化,其規格也只有發佈在Adobe的網站上。[8][9][10][11][12]這些技術大部份也沒有被熱門的PDF第三方實現所支持。
2017年7月28日,發佈了 ISO 32000-2:2017(PDF 2.0)。ISO 32000-2 不將任何專有技術當作是規範性引用文件。[13]
2020年12月14日,發布了 ISO 32000-2:2020(PDF 2.0)。在2017版本的基礎上包括了對規範性引用的澄清、更正以及其他的一些重要更新。 [14]
技術基礎
PDF主要由三項技術組成:
- 衍生自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文檔結構規範已被周密地遵守外)。
PDF 1.6 及更高版本支持嵌入 PDF 文件的交互式3D文檔,可以使用U3D、PRC或其他各種3D格式嵌入3D圖像。[15][16]
技術概括
PDF文件是COS("Carousel" Object Structure,Carousel對象結構)格式的子集。COS也伴隨着FDF文件。[17]COS樹文件主要由對象組成,其中有八種類型:[18]
對象可以是直接(嵌入其他對象)或非直接的。直接對象以對象號及代號編號。稱為xref表的索引表賦予每個對象從文件開頭起的字節偏移量。[19]這一設計允許有效的隨機存取到文件中的對象,還允許無需重寫整個文件(增量更新)即可做出小的改動。從PDF 1.5版開始,非直接對象也可位於稱為「對象流」的字串流中。這一增加文件大小的技術有大量小的非直接對象,並且對置標PDF特別有用。
PDF文件有兩種輸出方式:非線性(非「優化」)和線性(「優化」)。非線性PDF文件比線性的占用更小的硬盤空間,即使因為一部分的數據要求文檔中的集合頁面通過PDF文件分散開而訪問更慢。線性PDF文件(也稱「優化」或「web優化」PDF文件)以使得網頁瀏覽器插件無需等待下載整個文件來閱讀的方式構建,自從它們以線性方式寫入硬盤(如同頁面順序)開始。[20]PDF文件可用Adobe Acrobat軟件或QPDF優化。
圖形在PDF中呈現的基本設計是以非常類似於PostScript中的方式,除了PDF 1.4增添的透明度的使用。
PDF圖形使用設備獨立性笛卡兒坐標系來描述頁面的外觀。一個PDF頁面描述可使用矩陣來縮放、旋轉或錯切圖形元素。PDF中的一個主要概念是圖形狀態,即是可能會通過頁面描述修改、保存或還原的圖形參數的集合。PDF有(如在1.6版)24種圖形狀態屬性,其中最重要的有:
- 當前變換矩陣(CTM),決定坐標系
- 剪切路徑
- 色彩空間
- 阿爾法複合,透明度的關鍵部分
PDF中的矢量圖如同在PostScript當中一樣,是由路徑組成的。路徑通常由直線和多項的貝茲曲線組成,但也可以從文本的外廓構建。不同於PostScript,PDF不允許帶直線和曲線的單一路徑去組合文本外廓。路徑可被描繪、填充或用於剪取。描繪和填充可用任意圖形狀態中的色彩集,包括式樣。
PDF支持多種調色板類型。最簡單的是瓷磚式樣,其中藝術作品的一部分被指定以被重複地繪製。這可能是彩色瓷磚式樣,帶有在式樣對象中的指定的顏色,或是延遲色別編碼到式樣已繪製時候的沒有顏色的瓷磚式樣。從PDF 1.3開始還有了底紋式樣, 連續繪製不同的顏色。七種底紋式樣中最簡單的是軸向底紋(Type 2)和徑向底紋(Type 3)。
PDF中的位圖(稱作Image XObjects)由帶相關字串流的字典呈現。字典描述了圖像的屬性和包含圖像數據的流。(少見的是,位圖或許會作為一個內嵌圖像被直接嵌入於頁面描述。)圖像通常出於壓縮的目的過濾。PDF中支持的圖像過濾器包含了常用的過濾器
- ASCII85Decode 用於把字串流放入7位ASCII的過濾器
- ASCIIHexDecode 類似於ASCII85Decode,但兼容性低
- FlateDecode 基於RFC 1950及RFC 1951所定義的zlib/deflate算法(亦即gzip,但不是zip)的常用過濾器;引入於PDF 1.2;可用兩組預測功能中的一組以進一步兼容zlib/deflate算法:出自TIFF 6.0規格中的Predictor 2和來自PNG規格(RFC 2083)的預測器(過濾器)
- LZWDecode 基於LZW算法的過濾器可用兩組預測功能中的一組進一步兼容LZW壓縮:出自TIFF 6.0規格中的Predictor 2和來自PNG規格的預測器(過濾器)
- RunLengthDecode 使用遊程編碼算法和圖像指定的過濾器的用於帶重複數據的字串流的簡單的壓縮算法
- DCTDecode 基於JPEG標準的有損過濾器
- CCITTFaxDecode 基於ITU-T T.4和T.6中定義的Group 3或Group 4 CCITT(ITU-T)傳真壓縮標準的無損二值(黑白)過濾器
- JBIG2Decode 基於JBIG2標準的有損或無損二值(黑白)過濾器,引入PDF 1.4
- JPXDecode 基於JPEG 2000標準的有損或無損過濾器,引入PDF 1.5
通常PDF中包含的所有圖像嵌入於圖像,但PDF允許圖像數據通過使用外部字串流或替代圖像存儲於外部文件。PDF的標準子集,包括PDF/A和PDF/X,禁止這些特性。
文本在PDF中以頁面內容字串流中的「文本元素」呈現出來。一個文本元素指定字符應在指定位置描繪。字符用所選字體源的編碼指定。
PDF中的字體對象是對數碼字體的描述。可能是字體中的字符的描述,或者是包含嵌入的字體文件。後者叫嵌入字體,前者叫非嵌入字體。所嵌入的字體文件基於廣泛使用的標準數碼字體文件:Type 1(及其壓縮版變種CFF)、TrueType和(自PDF 1.6版起)OpenType。另外PDF支持由PDF圖形處理器描述的字體組件中的Type 3變種。
以Standard 14字體著稱的四種字體在文檔中PDF有特別的意義:
這些字體有時稱作Base 14字體。[21]這些字體或有相同度量的合適的替代字體,必須能用在所有PDF閱讀器上,而且不必嵌入PDF。[22]PDF查看器必須掌握這些字體度量。否則字體如果沒有嵌入PDF就可能會被替換。
文本字符串中,字符用以編碼映射字形於當前字體的字符代碼(整數)顯示。預定義的編碼有多種,包括WinAnsi、MacRoman,以及大量東亞語言編碼,而且字體可以有自己的編碼。(即使WinAnsi和MacRoman編碼取自Windows和Macintosh操作系統中歷史上的專有編碼,用這類編碼的內容在任何平台上都運行的好。)PDF可以指定可以使用的預定義的編碼、字體內置編碼,或者提供預定義或內置編碼的查詢表(不對TrueType字體推薦)。[23]PDF中的編碼機制是為Type 1字體設計的,而且應用到TrueType字體的規則是複合的。
對於大型字體或者帶非標準字形的字體,特殊編碼Identity-H(用於橫寫)或Identity-V(用於豎寫)被使用。如果關於字符的語義信息被預定義,這類字體有必要提供ToUnicode表。
PDF的原始圖像模型像PostScript的opaque:頁面上描繪的每個對象完全替換先前在同一位置標記的任何東西。在PDF 1.4中圖像模型被擴展以允許透明度。使用透明度的時候,新對象與先前標記的對象相互作用產生混合的特效。透明度添加到PDF由寫到PDF 1.3及早期的規格的產品中被忽略設計的新的擴展方法完成。結果,使用少量透明度的文件在舊的查看器中可能會以被接受地視圖查看,但大量用透明度的文件在舊的查看器中會顯示不正確而沒警告。
透明度擴展基於透明度組、混合模式、形狀和alpha的關鍵概念。這一模式緊密對應Adobe Illustrator 9的特性。混合模式基於當時Adobe Photoshop所用的。PDF 1.4規格出版的時候,用於計算混合模式的公式被Adobe保密。此後它們被公布。[24]
PDF規格中透明度組的概念獨立於Adobe Illustrator之類的應用中已有的「組」或「層」的概念。那些反映對象之上的邏輯關係的分組在編輯那些對象的時候有意義,但不是圖像模型的一部分。
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規格:[25][26][27][28]
- AcroForms(又叫Acrobat forms)引入PDF 1.2格式規格並包含於所有後來的PDF規格。
- Adobe XML表單架構(XFA)的表單,引入PDF 1.5格式規格。XFA規格沒有包含於PDF規格,僅僅作為可選特性參考。Adobe XFA表單不與AcroForms兼容。[29]
AcroForms於PDF 1.2格式被引入。AcroForms准許使用對象(如文本框、選擇鈕等)及一些代碼(如JavaScript)。
在標準PDF動作類型之外,交互式形式(AcroForms)支持提交、重置和導入數據。「提交」動作傳送所選表單字段和值的名稱給指定的統一資源定為符(URL)。交互式表單字段名稱和值或許會被以任意格式提交(取決於輸出格式、提交的PDF和XFDF旗標的設置):[25]
- 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文件。[30][31][32]使用權(UR)簽名定義導入表單數據文件以FDF、XFDF及文本(CSV/TSV)格式,及以FDF及XFDF格式從數據文件導出文件的權利。[25]
副檔名 |
.fdf |
---|---|
網路媒體型式 |
application/vnd.fdf[33] |
類型代碼 | 'FDF' |
開發者 | Adobe Systems |
首次發布 | 1996年 | (PDF 1.2)
延伸自 | |
延伸為 | XFDF |
標準 | ISO 32000-1:2008 |
免費格式? | 是 |
表單數據格式(Forms Data Format,FDF)基於PDF,使用同樣的句法和基本上一樣的文件結構,但比PDF簡單,自從FDF文檔的主體由只有一個要求的對象組成開始。表單數據格式定義於PDF規格(自PDF 1.2起)。表單數據格式可在表單數據到服務器、接收響應和組合到交互式表單的時候被使用。還可以被用來導出表單數據到能被導回到相應的PDF交互式表單的單獨的文件。從PDF 1.3開始,FDF可被用來定義用於從所應用的PDF文檔分開的注釋的容器。FDF通常封裝X.509證書之類的信息、要求證書、設置目錄、設置時間戳服務器和為網絡傳輸嵌入PDF文件。[32]FDF使用MIME內容類型application/vnd.fdf、文件擴展名.fdf,並在Mac OS使用文件類型'FDF'。[25]導入和導出獨立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支持。
XML表單數據格式(XFDF,XML Forms Data Format)是表單數據格式的XML版,但XFDF只執行FDF內含表單及注釋的子集。FDF字典中的一些詞條沒有等價於XFDF的,像是狀態、編碼、JavaScript、頁面關鍵字、嵌入式FDF、差異和目標。此外,XFDF不允許在基於已給定的數據的新頁面大量生成或者添加;就像使用FDF文件的時候能被完成的一樣。XFDF規格被引用於(但不包含於)PDF 1.5規格(及其以後的版本)。它被單獨描述為「XML表單數據結構規格」(XML Forms Data Format Specification)。[31]PDF 1.4規格允許以XML格式提交表單,但在PDF 1.5規格中以XFDF格式提交取代。XFDF符合XML標準。
到2016年12月,XFDF 3.0在ISO 19444-1:2016 – Document management – XML Forms Data Format – Part 1: Use of ISO 32000-2 (XFDF 3.0)的名義下成為ISO/IEC標準。[35]這個標準是ISO 32000-2的規範性參考資料。
XFDF可用以和FDF相等的方式,如提交表單數據給服務器,做出修訂,然後返回,並且新表單數據被導入到交互式表單。它還可以用來導出表單數據到能被導回到相應的PDF交互式表單的單獨的文件。
PDF 1.5格式中,Adobe Systems引入了新的、專有的表單格式,名為Adobe XML表單架構(XFA)。XFA 2.02引用在PDF 1.5規格(及以後的版本),但單獨描述為《Adobe XML Forms Architecture (XFA) Specification》,有多個版本。[36]XFA規格沒有包括在ISO 32000-1 PDF 1.7並僅僅作為由Adobe創建的外部專有規格引用。在ISO 32000-2(PDF 2.0)當中被棄用。
Adobe XFA表單不與AcroForms兼容。Adobe Reader包含使用XFA表單的「禁用特性」,僅在打開只來自Adobe的可行的技術創建的PDF文檔時激活。[37][38]XFA Forms不兼容於Adobe Reader 6以前的版本。
XFA表單可創建或用作PDF文件或作為XDP(XML數據包)文件。PDF中XFA源的格式由XML數據包規格描述。[25]XDP可能作為單獨的文檔,也可能在PDF文檔的內部攜帶。XDP提供打包周邊XML容器內部的表單組件的機制。XDP也可以打包一個PDF文件,伴隨XML表單和模板數據。[36]PDF可能包含XFA(在XDP格式中),XFA也可能包含PDF。[36]在用於XFA表單XFA(XML表單架構)語法從一個應用移到另一個應用的時候,它們必須以XML數據包封裝。[39]
當PDF和XFA結合在一起,結果是任意頁面中的XFA表單覆蓋了PDF背景。這一架構有時被提作XFAF(XFA Foreground,XFA前景)。替代方法是直接在XFA(不用PDF,或者只用帶有PDF標記的最小構造XFA的容器的「外掛PDF」,或用靜態XFA表單的預渲染描述作為PDF)展開所有表單,包括樣板文件。這有時被稱為全XFA。[39]
PDF 1.5開始,可變文本字段的文本內容,以及標記註解可能包含格式信息(樣式信息)。這些富文本字符串是符合XML表單架構規格2.02(本身是XHTML 1.0規格的子集)定義的富文本慣例的XML文檔,擴展了CSS2樣式屬性中受限的設置。[25]PDF 1.6中,PDF支持XML表單架構(XFA)規格2.2定義的富文本元素和屬性。PDF 1.7中,PDF支持XML表單架構(XFA)規格2.4定義的富文本元素和屬性。[25]
多數PDF處理器不處理XFA內容。生成外掛PDF的時候會被建議包含於PDF標記的一個簡單的單頁PDF圖像顯示警告(如:「為了查看本文檔的全部內容,你需要新版PDF查看器」等。)能渲染XFA內容的PDF處理器應該不現實警示頁面圖像或者以動態表單內容迅速替換。[40]帶有一些XFA渲染功能支持的PDF軟件的例子包括Adobe Reader for Windows、Linux、Mac OS X(但不是Adobe Reader Mobile for Android / iOS)或Nuance PDF Reader。
「標籤」PDF(ISO 32000-1:2008 14.8)含有文檔架構和語義信息,以允許可靠的文字抽取及使用。技術上來說,標籤PDF是建立在PDF 1.3 所引入的邏輯結構框架上,對於其格式的程式化使用 。標籤PDF定義了一組標準結構型別及屬性,允許頁面內容(文本、圖形和圖片)之後被提取並再利用於其他用途。[41]
當PDF文件僅供列印時,並不要求支援標籤PDF。因為此一特色是非必須的,且 ISO 32000-1 對於標籤PDF的規則相對模糊,所以在消費性裝置當中,包括輔助技術(AT),標籤PDF的支援參差不齊。[42]
一個專門針對可讀性、為ISO標準之子集的PDF規格:PDF/UA 於2012年首次發佈。
一份PDF文件可能以用於驗證的擔保或者數字簽名加密。
由Acrobat PDF提供的標準擔保以兩種不同的方法及兩種不同的密碼組成,用戶密碼,加密文件並阻止開啟;所有者密碼,指定即使文檔被解密的時候應該被限制的操作,可以包括:打印、從文檔複製文本和圖像、修飾文檔,或者添加或刪除文本注釋和AcroForm字段。用戶密碼(控制開啟)加密文件並要求密碼破解以去除,難度取決於密碼長度及加密算法——它可能非常安全(假設好的密碼及加密算法沒有已知的攻擊手法)。所有者密碼(控制操作)不加密文件,相反取決於客戶端軟件以遵循這些限制,並且不安全。所有者密碼可以被許多通常可用的PDF破解軟件移除,包括一些自由的在線服務。[43]由此,文檔作者放在PDF文檔中的使用限制不安全,而且不能在一旦文件被散布時保證;這一危險在使用Adobe Acrobat軟件以創建或編輯PDF文件應用這類限制的時候顯現出來。
即使沒有移除密碼,許多免費或開源PDF閱讀器忽略權限「保護」並允許用戶打印或者做文本摘要的複製,就像文檔沒被密碼保護限制一樣。
一些解決方案像Adobe的LiveCycle Rights Management更強化信息權利管理的方式,不僅能限制誰能打開文檔,而且以標準的安全處理程序做不到的方式可靠的執行權限。
從PDF 1.5起,使用權(UR)簽名用來啟用在一些PDF查看器應用中不是默認的附加的交互式特性。這一簽名用來驗證由真實的授權機構賦予的許可。例如,它可以允許用戶:[25]
- 保存伴有修訂表單和/或注釋數據的PDF文檔
- 從FDF、XFDF和文本(CSV/TSV)格式中的數據文件導入
- 從FDF和XFDF格式中的數據文件導出
- 從數據提交
- 從命名的頁面模板具體呈現新頁面
- 應用一個數碼簽名到已有的數碼簽名表單字段
- 創建、刪除、修正、複製、導入、導出注釋
例如,Adobe Systems在Adobe Reader中授權啟用附加特性,使用公鑰密碼學。Adobe Reader使用從一個Adobe授權的權威認證的驗證那個簽名。PDF 1.5規格宣稱其他PDF閱讀器應用可以為他們自己的目的自由使用這一相同機制。[25]
PDF文件可以有文檔級和頁面級的文件附件,讀者可訪問並打開或存儲於本地的文件系統。PDF附件可作為示例用pdftk加到已有的PDF文件。Adobe Reader提供對附件的支持,而且基於Poppler的閱讀器如Evince或Okular也有對文檔級附件的支持。
PDF文件可包含兩種類型的元數據。[44]第一種是文檔信息字典,一套像作者、標題、主題、創建及更新日期的關鍵字/值字段。這存儲於可選的文件尾部。有一小組字段是有定義的,而且如果有需要,可以用附加的文本字段擴充。
後來在PDF 1.4中,對元數據流的支持被加入,用可擴展元數據平台(XMP)來添加像在其他文件格式那樣的基於XML標準的可擴展的元數據。這允許元數據附加到文檔中的任何字串流,諸如關於嵌入式插圖的說明,以及整個文檔(附加到文檔目錄),使用可擴展的綱要。
相關技術
Adobe曾探索基於XML的下一代PDF,代號Mars。[45]
Mars的圖形元素的格式有時簡單地描述為SVG,[46]但根據2007年11月的0.8版草案規格(§3 Mars SVG Support)這一格式實際上僅僅是接近於SVG:它同時包含SVG新增和移除的部分,因此一般不可被標準SVG工具查看或創建:一些東西在SVG查看器和Mars查看器之間看起來明顯不同。
Adobe Systems於2008年停止開發Mars。[47]
技術問題
由掃描儀硬拷貝文檔創建的PDF文件包含原始文本沒有由相同的文檔直接創建的PDF文件那樣相同的架構。掃描的文檔原本地包含了文檔的圖片,沒有關於文本的信息。只要用戶可以看到它只是另一個PDF文件,帶有從其他任意地方來的不能區分的名稱和擴展名;好的掃描儀或許會精確地視作與原生的PDF文件相同,即使是視覺上質量很差的文件,常常帶有扭曲的頁面,給出了其本性。然而,文件大小會明顯不同,而且不能搜索文本。對於精確質量的掃描可以用帶光學字符識別(OCR)的合適的軟件識別文檔中的文本,並嵌入文檔中而使其可以檢索,取決於OCR的準確性。
PDF文件可專門為讓殘疾人閱讀而創建。[48][49][50][51][52]截至2014年[update]PDF文件格式在使用中可以包含標籤(XML)、替換文本、標題、音頻描述等。置標PDF在PDF/A-1a規格中被要求。[53][54]一些軟件可以自動生成置標PDF,但這個特性不被默認啟用。[55][56]常見的螢幕閱讀器,包括JAWS、Window-Eyes、Hal和Kurzweil 1000及3000可以朗讀置標PDF,就像Acrobat和Acrobat Reader後來的版本一樣。[57][58][59]此外,置標PDF可為有視覺障礙的讀者重排和放大。問題仍存在於給舊版PDF和從掃描的文檔生成的PDF加標記。這些情況下,可讀性標記和重排就不可用,而且必須手動或用OCR技術處理。這些過程對於一些殘疾人是達不到的。
對PDF可讀性的一個重大挑戰是PDF文檔有三種不同的視圖,取決於文檔的創建,會和其他視圖相矛盾。這些視圖有:物理視圖、標記視圖和內容視圖。物理視圖可以顯示和打印(多數人認為的PDF文檔)。標記視圖是屏幕閱讀器和其他訪問技術用來給有障礙的用戶帶來高質量導航和閱讀體驗的。內容視圖基於PDF內容字串流中的對象的物理排列,並可能由不完全支持標記視圖的軟件顯示,如Adobe Reader的Reflow特性。
基於ISO 32000-1的可閱讀PDF國際標準PDF/UA在2012年以ISO 14289-1發布,並為可閱讀PDF技術建立規範的語言。
PDF附件帶病毒最先發現於2001年。這種名為OUTLOOK.PDFWorm或Peachy的病毒,會通過Microsoft Outlook以附件的形式將自己發送至Adobe PDF文件。然後會用Adobe Acrobat將自身激活,但不會被Acrobat Reader激活。[60]
隨着時間推移,新的漏洞在Adobe Reader的多個版本被發現,[61]促使企業發出安全性修復。其他PDF閱讀器也容易受到影響。一個惡化的因素是PDF閱讀器會被配置在網頁嵌入PDF時候自動啟動,為攻擊帶來了載體。如果惡意的網頁包含一份利用PDF的漏洞感染的PDF文件,系統會無法抵抗,即使瀏覽器是安全的。其中一些漏洞是由於PDF標準允許PDF文檔用JavaScript腳本指令的結果。在PDF閱讀器中禁止執行JavaScript有助於緩解那些未來的漏洞,即使這不阻止PDF查看器其他部分的漏洞。安全專家稱JavaScript對於PDF閱讀器來說不是基本的,而且出於禁止JavaScript的安全保障勝過任何造成的兼容性問題。[62]阻止PDF文件漏洞的一種方式是有本地或網絡服務能在閱讀前把文件轉換成其他格式。[63]
2010年3月30日安全專家Didier Stevens報告Adobe Reader和福昕閱讀器有如果用戶經詢問允許啟動時運行惡意可執行文件的漏洞。[64]
PDF可能會被加密,以致查看或編輯內容時會要求輸入密碼。PDF參考書同時定義40位和128位加密,都運用RC4和MD5的複雜系統。PDF參考書還定義第三方可以制定他們自己的PDF加密系統的方式。
PDF文件或許還包含嵌入的DRM限制,提供限制複製、編輯或打印的進一步控制。複製、編輯或打印的限制取決於閱讀軟件遵循他們,因此他們提供的安全機制是有限的。
PDF參考書有面向最終用戶概覽的技術細節。[65]就像HTML文件一樣,PDF文件可以向網絡服務器提交信息。這可以被用來追蹤客戶端PC的IP地址,這一過程被稱作背景連線通訊。Acrobat Reader升級到7.0.5以後,用戶會被提示「...via a dialogue box that the author of the file is auditing usage of the file, and be offered the option of continuing」。[66]
Adobe通過LiveCycle安全服務器提供針對特定文檔設置安全策略的方法。這可以包括要求用戶認證並限制文檔可被離線打開的時候可以被訪問或者載入的時期。PDF文檔一旦被綁定到策略服務器和指定策略,這一策略可以被所有者更改或撤銷。這一策略控制文檔,否則就是「在自然狀態下」。每個文檔打開或關閉事件也可以被策略服務器追蹤。策略服務器可以由個人設置,或Adobe通過Adobe在線服務提供公共服務。和其他DRM形式一樣,依附這些策略和限制有可能會,也有可能不會被閱讀器軟件執行。
PDF文檔可以包含顯示設置,包括頁面顯示輸出和縮放級別。打開文檔的時候Adobe Reader用這些設置去替換用戶的默認設置。[67]免費的Adobe Reader不能移除這類限制。
內容
PDF文件通常混合了矢量圖形、文本和位圖。PDF的基本內容包括:
- 文本存儲為內容字符串(就是不是文本本身)
- 由圖形和線條組成的用於說明和設計的矢量圖形
- 由相片和其他類型的圖片組成的位圖
在近期PDF標準修訂中,PDF文檔還支持鏈接(文檔內部或網頁)、表單、JavaScript(可通過Acrobat 3.0的插件啟用),或者其他任意類型的能用插件控制的可嵌入內容。
PDF 1.6支持互動式3D文檔嵌入PDF——3D繪圖可用U3D或PRC及其他多種格式嵌入。[68][69]
在電腦屏幕上看起來相似的兩個PDF文件有可能大小不同。例如,一個高分辨率位圖比低分辨率的占更多的存儲空間。通常更高的分辨率更適宜打印文檔而不是顯示於屏幕。其他可能影響文件大小的可能有嵌入全部字體,尤其是東亞字體,以及將文字存為圖片。
軟件
有許多軟件選項用來創建PDF,包括內建於Mac OS X及多數Linux發行版、LibreOffice、Microsoft Office 2016、[70]WordPerfect 9、Scribus許多適用於Microsoft Windows的PDF打印驅動、pdfTeX排版系統、DocBook PDF工具、圍繞Ghostscript及Adobe Acrobat本身開發的應用以及Adobe FrameMaker的PDF排印功能。Google的在線辦公套件Google Docs也允許上傳、保存為PDF。
光柵圖像處理器(RIPs)用於轉換PDF文件為位圖格式以適應於成像在紙上及其他媒體的打印機、數字生產用印刷機以及一種被稱為柵格化的進程中的印前。有直接處理PDF能力的RIP包括在出自Adobe Systems和Jaws[71]的Adobe PDF排印引擎[72]與出自Global Graphics的Harlequin RIP當中。
有一些軟件可以直接創建空白的 PDF 文檔,例如 Adobe 官方的 Adobe Acrobat DC ,但是通常意義不大;因為 Adobe Acrobat 並不擅長於對文檔進行排版。
因為 PDF 具有完美展現文件原貌的功能,因此市面上也有一部分軟件並非為 PDF 而生,但是通過一些開發庫或者圖形繪製框架也具有 PDF 的導出功能。
此章節需要擴充。 (2010年7月) |
一些用於編輯PDF文件的特殊軟件,通過受很多限制並且比創建和編輯標準可編輯文檔格式更昂貴的選擇。Inkscape 0.46及以後版本允許通過Poppler加入中間的轉譯步驟編輯PDF。
Adobe Acrobat DC 允許用戶對一個未加密的 PDF 文件或者具有相關權限用戶對 PDF 文件進行編輯,同時還自帶了 OCR 識別、注釋、表單預備、合併,數字簽名等十分完善的功能[73]
Serif PagePlus可打開、編輯和保存已有的PDF文檔,以及軟件包中創建的文檔的發布。
Microsoft Office Word也支援打開、編輯和保存已有的PDF文檔的編輯功能。
Enfocus PitStop Pro,Acrobat的插件,允許PDF文件的手動和自動編輯,[74]同時免費的Enfocus Browser可以使編輯PDF的低級別架構成為可能。[75]
大多數的 TeX 文件經過編譯系統後默認輸出格式為 PDF 文件
Adobe Acrobat是允許用戶給已創建的PDF文件注釋、高亮和添加筆記的專有軟件的一個案例。作為自由軟件可用的(GNU通用公共許可協議許可下)一個UNIX應用是PDFedit。另一個GPL授權的原生UNIX應用是Xournal。Xournal允許以不同的字體和顏色注釋,以及用於為文本或段落的快速下劃及高亮線條的規則。Xournal還有一個用於方形、矩形和圓形的形狀識別工具。Xournal中的注釋可以被移動、複製或粘貼。免費軟件福昕閱讀器,適用於Microsoft Windows,允許注釋文檔。Tracker Software的PDF-XChange Viewer的免費版允許不受限制的注釋和標記。蘋果Mac OS X內置PDF閱讀器Preview也可以像免費軟件Skim那樣注釋,後者支持與LaTeX、SyncTeX和PDFSync集成,以及與BibDesk參考文獻管理軟件集成。免費軟件Qiqqa可以創建總結所有注釋的報告,而且筆記通過他們的PDF庫做出來。
對於移動版的注釋,iAnnotate PDF(來自Branchfire)和GoodReader(來自Aji)允許對PDF注釋以及導出注釋的摘要。
還有一些支持注釋PDF及其他文檔格式web注釋系統,如A.nnotate、crocodoc、WebNotes。
在PDF被期望擁有紙質文檔的全部功能的地方,墨水注釋會被要求。一些接受來自鼠標的墨水輸入的程序可能不足以對應平板上的手寫輸入。PC上已有的解決方案包括PDF Annotator和Qiqqa。
PDF軟件作為在線服務的例子包括用於查看和存儲的Scribd、用於在線編輯的Pdfvue和用於PDF轉換的Zamzar。
1993年出自Global Graphics的Jaws位圖處理器成為第一個不用轉換到其他格式原生產生PDF的銷售用的印前RIP。公司在1997年給他們的Harlequin RIP發布了一個有同樣兼容性的更新。[76]
愛克發-吉華1997年推介並出售Apogee,第一個基於PDF的印前工作流系統。
許多商業的膠印機接受遞交發布就緒的PDF文件作為印刷來源,特別是PDF/X-1a子集和相同的變種。[77]發布就緒的PDF文件的提交是對接收已收集本地文件工作的不確定性需求的替代。
PDF被選為Mac OS X的「本地」元文件格式,取代早期Mac OS的PICT格式。Quartz圖形層的圖像模式基於Display PostScript和PDF共有的模式,產生了暱稱Display PDF。Preview應用與Safari網頁瀏覽器2.0及以後版本都可以顯示PDF文件。對PDF的系統級支持使得Mac OS X應用可以自動創建PDF文檔,給它們提供OS標準的打印架構支持。文件可以按文件標頭輸出為PDF 1.3格式。在Mac OS X 10.0到10.3版截圖時,圖像也可以截取為PDF;後來的版本保存截圖為PNG文件,雖然這一行為若有需要可以重新設置為PDF。
一些桌面打印機也支持直接打印PDF,可以不用額外的輔助生成PDF數據。目前,所有PDF兼容打印機也支持PostScript,但多數PostScript打印機不直接支持PDF打印[來源請求]。
自由軟件基金會曾認為他們的一個高優先級計劃「提供自由、高質量和全功能的一組軟件庫及程序實現PDF文件格式及ISO 32000標準的相關技術」。[78][79]而在2011年,GNU PDF計劃從「高優先級」列表中被移除,因為Poppler庫的完善,[80]激勵了像Evince之類的應用與GNOME桌面環境的廣泛應用。Poppler基於Xpdf[81][82]代碼。PDF軟體列表亦列出可用的商業開發用軟件庫。
Apache軟件基金會的Apache PDFBox計劃是一款用於處理PDF文檔的開放源代碼Java庫。PDFBox以Apache許可證授權發布。[83]
一個名為 Devon Govett (頁面存檔備份,存於網際網路檔案館) 的 Adobe 員工在 GitHub 上開源了一款用於 JavaScript 的 PDF 操作庫 PDFKit (頁面存檔備份,存於網際網路檔案館)
Apple 開發者早期使用 Quartz 的 CGPDFDocument (頁面存檔備份,存於網際網路檔案館) 來繪製一個 PDF 文檔,但是因為使用較為底層的圖形庫繪製 PDF 文檔和查看十分麻煩,因此在 2017 年的 WWDC 大會上 Apple 引進了 PDFKit (頁面存檔備份,存於網際網路檔案館) 來讓開發者在 Apple 產品的操作系統上讓自己的 App 支持繪製,查看,標註 PDF 等等功能[84]
參考文獻
參見
外部連結
Wikiwand in your browser!
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.