時間:2019-08-20 17:22:35 作者:johnnyl 瀏覽量:71
PDF 是我們打交道最多的文件格式之一。提到這個格式,即使是對技術并不熟悉的用戶,也能說出「通用性好」、「格式不會亂變」這些優點。但同時,PDF 也是讓我們感到困惑最多的格式之一,因為與 Word 文檔等其他常見辦公軟件格式相比,PDF 似乎有著太多的「怪癖」,例如復制文字困難、幾乎沒法編輯等等。PDF 軟件數量繁多、質量良莠不齊的現狀,也進一步讓很多用戶無法正確理解和使用 PDF。
然而,事實并非如此。這些問題大多不是 PDF 格式的「缺陷」,而是因為我們在觀念上把 PDF 當成了和其他辦公文檔格式相近的東西,并因此期待 PDF 也具有和后者相似的功能和特征。
盡管 PDF 格式和 Word 格式在實際用途上有諸多重疊之處,但那只是表面現象。從技術角度看,兩種格式之間的差異要遠遠大于 Word 文檔和網頁之間的差異,甚至還要大于 Word 文檔和 Excel 表格之間的差異。
但這并不意味著 PDF 就是一種難以理解的格式。恰恰相反,對大多數用戶來說,PDF 可能是他們接觸到的格式中最「接地氣」、與現實生活最接近的。因為,PDF 與其說是一種數字文檔,不如說是實體文檔在數字世界中的影像。對 PDF 的操作,很大程度上可以看成對真實紙張的操作,只是操作環境從物理世界換到了數字世界而已。PDF 的創建就是一種虛擬的打印,復制 PDF 文字的過程更像是一種抄寫,而 PDF 的編輯實質上是一種涂改。
一旦接受了這個觀念,PDF 的很多「怪癖」就顯得順理成章了:打印出來的東西當然不會因為位置的變化而改變外觀;抄寫的結果很可能與原文存在誤差,并且受制于抄寫者對文字的理解;涂改的可行性則取決于原有布局留下了多少改動空間,并且再輕微的涂改也會對紙張造成損傷。
當然,只給出這樣的結論并不足以令人信服。因此,下文的主要任務就是通過回答幾個關于 PDF 格式普遍關心的問題,結合 PDF 的結構和語法,解釋為什么「PDF 的本質就是數字化的紙張」,從而深化對 PDF 格式的理解。
為什么 PDF 的外觀非常穩定?
在我們日常使用的文檔格式中,PDF 文件的外觀是最穩定的。一經生成,無論在什么操作系統上、用什么軟件打開,得到的顯示效果幾乎總是一致的。相比之下,Word 所使用 docx 格式的保真性就差得多了:哪怕只是換臺電腦,顯示效果都可能發生了變化,更不要說用不同版本的 Word 或者第三方軟件打開了。
PDF 的這種保真性讓它廣受青睞,但它究竟是如何做到這一點的?PDF 的穩定是絕對的嗎?
「打印」出來的 PDF
如果平時注意觀察,容易發現各種軟件中涉及 PDF 的操作,用詞都比較特別。其他格式都是被「新建」(new / create)出來或者「保存」(save)下來的,只有 PDF 是被「導出」(export)甚至「打印」(print)出來的。這些詞語并不是隨意選用的,它們本身就說明了 PDF 的重要特征:「導出」暗示著文件編輯已經告一段落,而「打印」則更是形象地表明 PDF 的創建是一個「固化」的過程。
為了進一步理解這種區別,讓我們來對比一組外觀上完全相同的 Word 文檔和 PDF 文檔。下圖中,右側的 PDF 格式文件是由左側的 Word 文件導出得到的,兩者的內容都只有「Hello world!」一行居中文字。(注:為了避免不必要的復雜性,我們暫時只以英文文檔為例。)

PDF數字界的紙張:科普向圖一
先來看 Word 是如何實現這一版式效果的。用任意解壓工具將該文檔解開(docx 文件 實質上 就是一個壓縮包),找到其中的 /word/_rels/document.xml 并打開。其中的關鍵部分如下(代碼經過整理):

PDF數字界的紙張:科普向圖二
不必恐懼這些陌生的代碼,它們的意義很容易從文檔內容本身反推出來。先看倒數第二行,這里記錄了整個文檔最重要的信息——「Hello world!」這串文字。在它的上面一行,w:rFonts 屬性將字體設置為 Times。那么前四行是做什么的呢?從第二行的 center 字樣不難猜出,它們控制的是文字所在段落的樣式,包括居中對齊等等。
這就是 docx 格式這類 標記語言 (Markup Language)文檔的特征:在純文本上包裹各種「標簽」(tag)來描述文本的樣式(顏色、位置、字體等等),從而獲得格式豐富多變的文檔。常見的網頁(HTML)、Evernote 筆記( ENML )所用的語法本質上都是標記語言,區別只在于支持的標簽各不相同、因此能實現的格式有多有少罷了。