跳到內容
getnextpdf.com

PDF 的簡短歷史

Spec: ISO 32000-1

PDF 始於一份關於某種苦惱的備忘錄:你可以在任何地方列印一份文件,但你無法可靠地寄送一份。本頁是那個問題如何變成世界上最被廣泛使用的文件格式之一的簡短故事——從 1993 年一個 PostScript 的衍生品,到一套其最新版本不再冠以 Adobe 之名的 ISO 標準。

歷史在這裡並非懷舊。你今天做出的這份 PDF,充滿了數十年前所做的決定,而其中大多數至今仍承載著重量。物件編號零是一個世代為 65535 的自由清單表頭,因為一份 1993 年的設計這麼說。頁面以源自 PostScript 的繪圖運算子來描述自己,因為這個格式是從一套列印語言中成長出來的。知道一條規則從何而來,往往是理解它為何不能直接被忽略最快的途徑。

另一個理由是觀點。「PDF 2.0」聽起來像是一次乾淨的重新發明。它不是。它是疊在三十年沉積之上的最新一層,而把它讀成一種延續、而非一次重啟,正是讓你能預測它行為方式的關鍵。

  • PDF 衍生自 PostScript,Adobe 的頁面描述語言。它保留了繪圖模型,捨棄了完整的程式語言。
  • John Warnock 在 1991 年的內部 「Camelot」 備忘錄定下了目標:一個任何人都能打開、且在任何地方看起來都一樣的檔案。
  • PDF 1.0 在 1993 年隨 Acrobat 推出。在成為一種預設之前,它是一個付費的、小眾的產品。
  • 1.1 到 1.7 的各個版本,一次一份規格地,加上了那些讓它變得不可或缺的東西——連結、加密、壓縮、表單、透明度、標記、數位簽章。
  • 2008 年,PDF 1.7 成為 ISO 32000-1:這個格式不再屬於 Adobe,而成為一套開放的國際標準。
  • PDF 2.0ISO 32000-2,第一個完全在 ISO 內部撰寫並擁有的版本。它整併、收緊、移除的東西,多過它重新發明的。

NextPDF 把這條血脈當成一項真實的約束,而非一段背景故事。它預設是一套 PDF 2.0 引擎,但這個格式較舊的形貌是被刻意保留可達的,因為建立在 PDF 之上的那些標準仍然需要它們。

時間軸上決定性的斷點是 2008 年。在它之前,「PDF」意味著「Adobe 最新規格說什麼就是什麼」。在它之後,PDF 是一套 ISO 標準(Spec: ISO 32000-1),這正是為何一套像這樣的獨立引擎得以存在,並能對著一份公開文件、而非對著一家廠商的產品宣稱符合性。目前的基準是 PDF 2.0(Spec: ISO 32000-2, Introduction),第一個完全在 ISO 內部撰寫的版本。

那段歷史解釋了引擎中一項安靜卻重要的設計選擇:PDF 版本是一個刻意的決定,從來不是一場意外。NextPDF 預設寫入 2.0 結構,但它仍可序列化較舊的 1.7 與 1.4 檔案形貌——不是出於念舊,而是因為像 PDF/A 這樣的符合性設定檔,當初是對著那些較早的結構所定義的,且持續要求它們。過去並未被棄用。它是一個受支援的輸出目標。

  1. PostScript (1984)Adobe ships a page-description language for laser printers — the drawing model the PDF inherits.
  2. Camelot memo (1991)John Warnock proposes a portable file anyone can open and that aims to render the same way everywhere.
  3. PDF 1.0 with Acrobat (1993)The format ships as a paid product. Adoption is slow; the readers and tools cost money.
  4. PDF 1.1 to 1.7 (1996 to 2006)Links, encryption, compression, forms, transparency, tagging, and signatures arrive one version at a time.
  5. ISO 32000-1 (2008)PDF 1.7 is adopted by ISO. The format becomes an open standard, no longer Adobe-owned.
  6. ISO 32000-2 / PDF 2.0 (2017, rev. 2020)The first ISO-authored edition: consolidation, tightening, and the baseline NextPDF writes by default.
PDF 的版本血脈,作為一條時間軸:一個 PostScript 的衍生品成為一個付費產品,沿著 1.x 系列累積功能,於 2008 年交給 ISO,並抵達 NextPDF 所瞄準、由 ISO 擁有的 2.0 基準。

那條時間軸裡有幾個細節值得停下來想想,因為它們解釋了這個格式的性格。

它來自一套列印語言。 PostScript 能畫出印表機所能畫的任何東西,但它是一套完整的程式語言——一個 PostScript 檔案可以永遠迴圈下去。PDF 保留了 PostScript 的座標系統與圖形運算子,把可程式性丟掉了。留下來的是一份已完成頁面的靜態描述:可預測、有界、且能安全算繪。那項取捨正是為何一個 PDF 頁面在每一個閱讀器上看起來都一樣,也是為何它不像一個 PostScript 檔案實質上所是的那樣,是一個微型應用程式。

免費的電子化採用是一個轉捩點。 PDF 1.0 是一個商業產品,而這個格式有好幾年只是一件付費的稀奇玩意兒。突破在於把閱讀器變免費,而創作工具維持付費。一個只需要一方買單的格式,是一個人人都能接收的格式。等到規格走到 1.7 時,PDF 早已是寄送一份在傳輸途中不容改變之文件的預設方式。

2008 年改變了規則由誰擁有。 把 PDF 1.7 交給 ISO,把一份廠商規格變成了一套國際標準。那正是一套獨立、符合規範的引擎根本得以成真的時刻——有了一份公開文件可以據以建構,而每一項行為都有一條公開的條款。

你可以在一個檔案的第一行裡讀到整段歷程。那個檔頭是一個版本標記,而且它是這個格式中最古老、最簡單的契約——1993 年就在,至今形貌未變。

%PDF-1.0 ← 1993, Acrobat 1.0
%PDF-1.4 ← 2001, transparency and the basis for PDF/A-1
%PDF-1.7 ← 2006, the version ISO adopted as 32000-1 in 2008
%PDF-2.0 ← ISO 32000-2, the first ISO-authored edition

同樣的八個位元組,相隔一個世代。一個現代閱讀器可以打開這四者全部,因為這個格式被設計成讓較舊的閱讀器可以忽略它看不懂的東西,而較新的閱讀器則維持與在它之前出現的東西相容。實務上,較舊的閱讀器反而可能會把一項未知功能算繪錯誤,所以那項保證是一種設計意圖,而非一個絕對。NextPDF 預設寫入這幾者中的最後一個,並能在某個符合性設定檔要求時寫入其餘的。

陷阱在於把那些版本號讀成一個關於戲劇性重新發明的故事——彷彿 PDF 2.0 之於 PDF 1.7,就像一部續集之於一部電影。它更接近一本長篇參考書的審慎新版。一個 1993 年的檔案所用的物件模型、交叉參照表與尾段,跟一個 2.0 檔案所用的,是顯然可辨地同一套機制。三十年來改變的大多數東西,是在原始設計旁增添,而非被撕掉換新。這個格式異乎尋常地保守,而那份保守正是全部的重點:一個今天寫下的檔案,十年後仍應能打開;一個十年前寫下的檔案,今天仍應能打開。

第二個誤解是「ISO 32000-2 是 Adobe 的規格換了個新封面」。這兩個 ISO 版本在著作上確實不同。PDF 2.0 是第一個在 ISO 流程內部產出、而非由 Adobe 發布並於事後批准的版本,這也是它之所以讀起來像是數十年累積規則的一次整併、而非一家廠商功能發表的部分原因。

本頁是一份敘事性的方向引導,而非一份精確的變更紀錄。日期僅給到年份,而「1.1 到 1.7」是刻意把超過十年的逐步規格壓縮成一行。如果你需要各版本之間精確到條款層級的差異,那是另一份文件。

Historical PDF versions as an output target — edition availability
EditionAvailability
Core

核心預設寫入 PDF 2.0,並能在某個設定檔要求時序列化較舊的 1.7 與 1.4 檔案結構。它是這些版本的寫入器,不是一間博物館:它不承諾去讀取、修復,或忠實重建一個由另一種工具在數十年前產出的任意舊檔。

ProAvailable
EnterpriseAvailable

NextPDF 是一套尊重自身血脈的 PDF 2.0 引擎;它不是一個記述每一份曾被做出之 PDF 的萬用史官。此處的行為描述的是它所寫入的檔案,錨定在它所瞄準的那些版本上。那些檔案在內部如何結構化、以及 2.0 具體改變了什麼,都涵蓋在下方的頁面裡。

PDF 一直都能免費閱讀嗎? 不。閱讀器變免費的時間相對較早,但 PDF 1.0 是作為一個付費產品推出的。免費閱讀、付費創作,正是讓這個格式變得無所不在的模式。

PDF 2.0 破壞了與舊檔的相容性嗎? 大致沒有。共用的結構未變,而新功能的設計,是讓一個較舊的閱讀器可以忽略它認不出的東西。一個僅限 2.0 的功能通常不會被一個 1.7 閱讀器尊重,後者可能會跳過它,或者——視該功能與該閱讀器而定——做出不完美的退讓。

NextPDF 為何至今仍會寫入舊結構? 因為建立在 PDF 之上的符合性設定檔——尤其是某些 PDF/A 層級——當初是對著較舊的檔案形貌所定義的,且要求它們。過去是一個受支援的輸出目標,不是一個被棄用的。

  • PDF 究竟是什麼——這段歷史所產出的物件模型、交叉參照表與尾段。
  • PDF 2.0:改變了什麼——1.7 與 2.0 基準之間條款層級的差異。
  • 標準全景——ISO 32000 在 NextPDF 所追蹤之更廣大標準聯邦中的位置。
  • 封存與 PDF/A——為何這段歷史中的那些較舊檔案結構至今仍是必要的輸出目標。
  • PostScript——Adobe 在 1984 年為印表機推出的頁面描述語言;一套完整的程式語言。PDF 繼承了它的繪圖模型,但捨棄了可程式性。
  • Camelot——出自 John Warnock 1991 年備忘錄的內部專案代號,指最終成為 PDF 的那項工作。
  • PDF 1.0——第一份發布的 PDF 規格,於 1993 年隨 Acrobat 推出。
  • ISO 32000-1——2008 年 ISO 對 PDF 1.7 的採納;這個格式首度成為一套開放的國際標準。
  • ISO 32000-2 (PDF 2.0)——第一個完全在 ISO 內部撰寫並擁有、而非由 Adobe 發布的 PDF 版本。
  • 符合性設定檔(Conformance profile)——一套疊在基礎 PDF 之上的更嚴格標準(例如用於封存的 PDF/A),通常是對著一個特定、有時較舊的檔案結構所定義的。