軟體PDF 演變:為什麼PostScript
PostScript 在列印領域取得了巨大成功,但 Adobe 很快發現它的侷限:PostScript 是為「一次列印一頁」設計的,檔案必須從頭到尾依序解譯,無法隨機存取;而且它是一支程式,執行時可能有副作用,不適合用來做長期保存的電子文件。1991 年,John Warnock 提出了內部代號「Camelot」的專案,目標是打造一種「在任何裝置上看起來都一樣」的電子文件格式,這就是 PDF 的起點。
2.1 Camelot 計畫與 PDF 1.0 的設計理念
Camelot 計畫的願景,用 Warnock 自己的話來說,是讓人們「從任何應用程式交換文件,並在任何機器上檢視與列印」。1993 年,Adobe 推出 Acrobat 1.0 與 PDF 1.0,正式將這個願景產品化。當時的 PDF 並不是免費開放的格式,Reader 雖然免費,但產生 PDF 的 Acrobat 軟體要價不斐,加上早期網路頻寬有限,PDF 並未立刻爆紅。
PDF 的設計哲學,可以說是「把 PostScript 的繪圖模型抽出來,拿掉程式執行的能力,再加上物件化與隨機存取」。PDF 檔案本質上是一個由物件(object)組成的資料庫,包含頁面樹(page tree)、資源字典、字型、影像、內容串流等。每個物件都有編號,檔案末尾有交叉參照表(xref table),讓閱讀器可以快速跳到指定頁面,而不必從頭解譯。這正是 PDF 與 PostScript 最根本的差別。
另一個關鍵設計是「字型嵌入」。PostScript 檔案通常只引用字型名稱,實際字型由印表機或 RIP 提供;PDF 則可以把字型(或字型子集)直接嵌進檔案裡,確保在任何裝置上都能正確顯示。這對中文、日文、韓文等東亞文字尤其重要,也讓 PDF 成為學術論文與政府公文的首選格式。
2.2 PostScript 與 PDF 的根本差異
雖然 PDF 的內容串流使用了大量與 PostScript 相同的運算子(例如 q、Q、cm、Tj、TJ、re、f),但兩者在架構上有明顯差異。我們可以用一張表來對照:
比較項目
PostScript
本質
程式語言(圖靈完備)
物件化的文件格式
執行方式
由 RIP 依序解譯執行
由閱讀器解析物件後繪製
隨機存取
不支援,必須循序處理
支援,透過 xref 表快速定位
字型處理
通常引用外部字型
可嵌入字型或子集
檔案結構
單一指令流
物件、字典、串流組成的結構
安全性
可執行任意運算,風險較高
限制執行能力,較易沙箱化
典型用途
印表機、RIP、輸出中心
電子交換、檢視、歸檔
從這張表可以看出,PDF 並不是「PostScript 的下一代」,而更像是「PostScript 繪圖模型的一種靜態封裝」。Adobe 當年也提供了 Acrobat Distiller 這個工具,專門把 PostScript 檔轉成 PDF,這條「PS → PDF」的轉換鏈,至今仍是許多印刷與出版工作流程的核心。
值得注意的是,PDF 的內容串流雖然長得很像 PostScript,但它並不是完整的程式語言。PDF 規範限制了可使用的運算子,並移除了流程控制與變數定義等能力(嚴格來說,PDF 1.7 之後仍保留部分 PostScript 運算子,但用途僅限於繪圖)。這樣的設計讓 PDF 更容易被驗證、消毒與長期保存,也降低了惡意檔案執行怪異指令的風險。
三、PDF 的演進:從列印格式到萬用容器
PDF 從 1993 年問世至今,已經歷經多次版本演進,功能從最初的「靜態頁面描述」,一路擴展到表單、多媒體、3D、加密、數位簽章,甚至成為 ISO 國際標準。這段演進史,其實就是一部數位文件應用的擴張史。
3.1 從 PDF 1.0 到 PDF 2.0 的版本演進
PDF 1.0 於 1993 年隨 Acrobat 1.0 推出,僅支援基本的文字與向量圖形。此後每個版本都針對特定需求補強:
對一般使用者而言,這些版本差異可能只反映在「這個 PDF 能不能開啟」;但對軟體開發者與印刷從業人員來說,每個版本都代表不同的功能支援度與相容性風險。例如,一份使用 PDF 1.4 透明度效果的檔案,拿到只支援 PDF 1.3 的舊版 RIP 上輸出,就可能出現「透明變白」或「疊印錯誤」的問題。
3.2 ISO 標準化與 PDF/A、PDF/X、PDF/UA 等子標準
2008 年,Adobe 將 PDF 1.7 提交給 ISO,成為 ISO 32000-1,正式將 PDF 從「Adobe 的私有格式」轉變為「國際公開標準」。此後 PDF 2.0 於 2017 年發布(ISO 32000-2),並在 2020 年推出更新版。標準化不僅讓 PDF 擺脫單一廠商控制,也催生了一系列「子標準」,針對不同應用場景定義更嚴格的限制:
這些子標準的存在,說明 PDF 早已不是單純的「文件格式」,而是一個可依據用途裁剪的「容器家族」。同一個 PDF 檔案,可能同時符合 PDF/A 與 PDF/X 的要求,也可能因為多了透明度或加密而無法歸檔。理解這些標準的差異,是專業出版與文件管理工作中不可或缺的一環。
四、為什麼 PostScript 至今仍然重要
看到這裡,讀者可能會問:既然 PDF 已經是主流,為什麼還要回頭談 PostScript?答案很簡單:PostScript 從未真正消失,它只是退居幕後,成為支撐現代列印與輸出流程的「隱形基礎設施」。
4.1 列印工作流程中的 PostScript
時至今日,全球仍有大量商業印刷機、大圖輸出機與辦公室雷射印表機,是透過 PostScript 或相容的 RIP(Raster Image Processor)來運作。印刷廠收到的檔案,除了 PDF 之外,也常要求提供 PostScript 檔,尤其是需要進行「落版」(imposition)、「拼版」或特殊色彩處理的工作。PostScript 的 RIP 通常具備更成熟的色彩管理與網點處理能力,能精確控制印刷品質。
另一方面,許多企業的列印伺服器(如 CUPS、Windows Print Server)仍以 PostScript 作為印表機的共通語言。當你從電腦列印一份文件時,驅動程式可能先將內容轉成 PostScript,再送到印表機或 RIP 解譯。這也是為什麼「PostScript 驅動程式」至今仍是許多印表機的標準配備。
4.2 PostScript 作為 PDF 生成的底層模型
更關鍵的是,PostScript 的繪圖模型仍然是 PDF 的骨幹。PDF 內容串流中的運算子,幾乎都能在 PostScript 中找到對應:m(moveto)、l(lineto)、c(curveto)、re(rectangle)、f(fill)、S(stroke)、q/Q(save/restore graphics state)、cm(concat matrix)、Tj/TJ(show text)等。換句話說,只要你懂 PostScript 的繪圖模型,就能讀懂 PDF 的內容串流。
這也解釋了為什麼開源工具 Ghostscript 如此重要。Ghostscript 是一套 PostScript 與 PDF 的解譯器,能夠將 PostScript 轉成 PDF、將 PDF 轉成點陣圖,或模擬印表機的 RIP 行為。許多 PDF 產生器、印表機驅動程式與文件轉換工具,底層都依賴 Ghostscript 或類似的解譯器。沒有這些工具,PostScript 與 PDF 之間的轉換鏈就會斷裂。
此外,PostScript 的「與裝置無關」哲學,也深深影響了 PDF 的設計。PDF 之所以能在手機、電腦、印表機上呈現一致的外觀,正是因為它繼承了 PostScript 的座標轉換與繪圖模型。從這個角度來看,PostScript 不只是 PDF 的「前身」,更是 PDF 的「DNA」。
五、實務評測:現代工具如何處理 PostScript 與 PDF
理解了歷史與架構之後,我們把焦點拉回實務。對多數使用者而言,真正重要的是「工具能不能正確處理檔案」。以下從開源工具鏈與商業軟體兩個面向,分享實際評測觀察。
5.1 開源工具鏈:Ghostscript、MuPDF 與 pdf.js
在開源社群中,Ghostscript 是最具代表性的 PostScript/PDF 解譯器。它支援 PostScript Level 1 至 3,以及 PDF 1.0 至 2.0 的大部分功能,能進行格式轉換、點陣化、壓縮與字型處理。實測以 Ghostscript 將一份包含中文與透明度的 PostScript 檔轉成 PDF,整體表現穩定,字型嵌入正確,透明度也能正確平面化(flattening)。不過,若檔案包含較冷門的 PostScript 運算子或特殊字型,仍可能出現警告或掉字,需要手動調整參數。
MuPDF 則是另一套輕量級的 PDF 解譯器,以速度快、程式碼精簡著稱,常被用在行動裝置與嵌入式系統。它對 PDF 2.0 的支援相當完整,但在 PostScript 的支援上不如 Ghostscript 全面。pdf.js 則是 Mozilla 開發的 JavaScript PDF 閱讀器,主要用於瀏覽器端顯示,不涉及 PostScript 解譯。這三套工具各有定位,選擇時應依照「是否需要處理 PostScript」與「是否需要在瀏覽器端執行」來判斷。
值得一提的是,Ghostscript 的授權模式(AGPL)對商業軟體開發者可能造成限制,因此市面上也有不少商業授權的 PostScript/PDF 解譯器,例如 Adobe 自家的 CPSI(Configurable PostScript Interpreter)與 Global Graphics 的 Harlequin RIP。這些商業解譯器在字型處理、色彩管理與效能上通常有更細緻的調校,但價格也相對高昂。
5.2 商業軟體的相容性觀察
在商業軟體方面,Adobe Acrobat Pro 依然是最完整的 PDF 編輯與轉換工具。它能將 PostScript 檔透過 Distiller 轉成 PDF,並提供預檢(preflight)、色彩轉換、字型嵌入檢查等功能。實測將一份含有 Type 1 字型的 PostScript 檔轉成 PDF/A,Acrobat 能正確辨識並嵌入字型,但若字型本身授權不允許嵌入,則會出現替代字型,這點需要特別注意。
另一個常見情境是「PDF 轉 PostScript」。雖然多數人不需要這樣做,但在某些印刷流程中,仍會要求將 PDF 轉回 PostScript 以便落版。這時就得依賴 Ghostscript 或商業 RIP,轉換品質取決於透明度平面化、字型處理與色彩空間轉換的設定。實務上,若 PDF 含有大量透明度或漸層,轉成 PostScript 後可能出現色帶或疊印錯誤,建議在轉換前先進行預檢與色彩校正。
整體而言,現代工具對 PostScript 與 PDF 的支援已相當成熟,但「相容性」永遠是相對的。一份檔案能否正確輸出,往往取決於「產生端」與「輸出端」是否使用相同的繪圖模型與色彩設定。這也是為什麼印刷廠總是不厭其煩地要求客戶提供 PDF/X 檔,並附上字型與色彩設定。
六、結論:從 PostScript 到 PDF,再到未來
回顧這段演進史,我們可以看到一條清晰的技術脈絡:PostScript 解決了「裝置無關列印」的問題,PDF 則在此基礎上解決了「文件交換與保存」的問題。兩者並非取代關係,而是相輔相成。PostScript 是 PDF 的繪圖模型來源,PDF 則是 PostScript 思維的靜態化與容器化。即使在 PDF 2.0 已經標準化的今天,PostScript 仍默默支撐着全球的列印與輸出產業。
對於一般使用者而言,理解這段歷史的實際意義,在於「知道自己的檔案從哪裡來、會到哪裡去」。當你輸出一份 PDF 時,不妨想想:這份檔案的字型嵌入了嗎?透明度處理了嗎?色彩空間正確嗎?這些問題的答案,往往就藏在 PostScript 與 PDF 的技術細節裡。
而對於軟體開發者與 IT 人員來說,掌握 PostScript 與 PDF 的底層模型,能幫助你更有效地除錯、選擇工具,並設計出更穩健的文件工作流程。畢竟,在這個數位文件爆炸的時代,能讀懂 PDF 的「前世今生」,就是一種難得的技術素養。
下次當你打開一份 PDF,不妨用文字編輯器偷看一下它的內容串流。那些看似天書的 q、cm、Tj,其實都是 PostScript 留給我們的技術遺產。理解了這段演變,你對「軟體 PDF」的認識,就不再只是「一種檔案格式」,而是一段橫跨四十年的科技進化史。