PDF 的存在只為了解決一個問題:一份不管誰打開都長得一樣的文件。所以當你寄出一個 PDF,對方回報說標題變成了別的字體、版面跑掉了、有一行被擠到第二頁去——感覺上,這個格式在它唯一的工作上失敗了。
它沒有失敗。是匯出的時候有某件具體的事出了錯,而嫌疑犯有四個。
PDF 不是用名字去引用字型、然後祈禱對方有。它會內嵌字型——實際的字形輪廓被複製進檔案裡。閱讀器是用文件自己帶著的那些形狀來畫文字,不是用顯示它的那台電腦上裝了什麼。
這就是為什麼一個在設計師電腦上、用了四套授權字體做出來的 PDF,在一台一套都沒有的機器上能正確打開。字型跟著檔案一起走了。
底下每一種失敗,都是「那個內嵌沒有發生,或者發生得不完整」。
最常見的原因。很多匯出器提供「跳過內嵌」的選項——有時候是為了縮小檔案,有時候是授權限制,有時候只是一個沒人去改的預設值。
沒有內嵌字型,閱讀器就只能自己想辦法。它看檔案裡記著的字型名稱,在本機系統裡找,找不到,然後替代一個它判斷相近的。結果就是你的文件用了一套你從來沒選過的字體,而且每一行的寬度都略有不同。
解法在匯出的那一刻:找到那個通常叫「內嵌字型」的設定,把它打開。一個 PDF 一旦在沒有內嵌字型的情況下被做出來,原本的字形就是不在檔案裡,也沒辦法從它身上救回來。
把整套字型嵌進去很浪費——一套完整的中日韓字體可能好幾 MB,而一封兩頁的信可能只用到八十個不同的字。所以匯出器會做子集化:只嵌入文件實際用到的字形。
這幾乎總是正確的行為,而且在有人去編輯那個 PDF 之前都不會惹事。打一個子集裡沒有的字——一個帶重音的字母、一個貨幣符號、一個原文裡沒出現過的中文字——就沒有字形可以畫。編輯器要嘛替那一個字換一套字型,要嘛顯示一個方框。
這就是為什麼被編輯過的 PDF 常常有一個詞的字體不對。解法是去編輯原始文件然後重新匯出,而不是編輯 PDF。
PDF 定義了十四種字體,預期閱讀器自己提供——Helvetica、Times、Courier 的各種變體,加上 Symbol 和 ZapfDingbats。PDF 可以引用這些而不嵌入任何東西,而且在歷史上那是常規做法。
麻煩在於「提供 Helvetica」這句話在不同系統上意思不一樣。一個閱讀器給你真的 Helvetica,另一個拿 Arial 頂替,第三個又是別的。度量值略有差異,於是文字重排、斷行位置移動。
如果一份文件的外觀是重要的,連這些也嵌進去。體積代價很小,而那份模糊就消失了。
「一個程式直接匯出成 PDF」和「一份文件被丟進某個轉換步驟」之間有真實的差別——網頁服務、郵件閘道、用一套辦公軟體去打開另一套做的檔案。
每一次轉換都是字型走失的機會。一套辦公軟體打開一個 Word 檔,而那個檔用的字型它沒裝,它會在螢幕上替代掉,然後忠實地把替代品嵌進去。那個 PDF 內部是一致的,而且是錯的。
這也是「你看起來正確、收件人看起來不對,而你們用的是『同一個』轉換工具」的常見解釋:你的機器有那些字型,他的沒有。
修之前,先弄清楚檔案裡到底裝了什麼。PDF 會記錄它用了哪些字型、每一個是不是內嵌的,檢視那份清單就能馬上回答問題:
ABCDEF+)→ 原因二。改原始文件,不要改 PDF。最後這一點就算你不做典藏也值得知道。PDF/A 存在的理由,正是因為「字型沒有被內嵌」是 PDF 不再忠實呈現它本來該呈現的東西的頭號原因。