PDF 格式的文件為什麼可以做到非常出色的字體渲染效果?

我接觸的到的不管是用Acrobat Distiller還是用LaTeX做出的字體渲染效果都比其它格式的文檔出色的多


首先,PDF 作為一個「格式」並不能單獨做到出色的渲染效果,必須有出色的 render 實現配合才行。理論上,如果 Word 的 render 模塊足夠好,同樣可以有出色的渲染效果。PDF 的突出之處在於它詳盡的規定了渲染的所有細節,包括字體(PDF 可以做到內嵌字型而不受系統字體影響),各種矢量元素的數學定義,畫筆模式的 blending,ICC 色彩管理,標準的圖片壓縮(包括 JPEG),等等。而其它格式在這些方面多是 render-specific 的。

不過話說回來,PDF 格式祇是提供了這種描述,是否 respect 這些描述還是 render 的事情。歸根結底,還是 render 做得好。


@馮東 說得差不多了,我的角度稍有不同,補充一些:

  • 提問者有如此印象大概主要還是因為各種 PDF viewer 的字體渲染能力通常不差。其實 PDF 自己並沒有什麼絕對優勢。

  • 我覺得 PDF 內嵌字體這事兒對字體渲染質量沒什麼直接的影響。最多是用戶因為在 PDF 里看到了好字體於是覺得 PDF 的字體比系統自帶的強。
  • 這和 LaTeX 也沒什麼關係。
  • Adobe Reader 這樣的 viewer 在各平台都用 Adobe 自己的字體渲染引擎,這套引擎的素質不錯;另外也有些 viewer 用系統原生引擎。Windows 上的 PDF viewer 似乎主要還是 Adobe Reader,微軟不太重視 PDF。(Windows 8 里終於有改善,不過 DirectWrite 在小字型大小上的表現似乎不如 Adobe 的方案。)
  • 我在問題評論里問了一下,提問者說他主要用 Linux 和 Windows 7,viewer 用 Adobe Reader。Windows 自己的字體渲染質量很差,而 DOC(X) 之類的文件通常都是用 Office Word 打開然後由 Word 用系統原生引擎顯示的。於是在 Windows 上用 Adobe Reader 之類 viewer 查看的 PDF 就會顯得更好。所以這是 Adobe 引擎 vs Windows 引擎的問題:實際上不是 PDF 更好,是 Adobe Reader 的字體渲染引擎相比 Windows 的引擎更符合你的口味。(不少罹患斯德哥爾摩綜合症的 Windows 用戶其實更喜歡原生引擎的效果。)
  • Linux 上的情況不是很了解。但以我的一點點經歷,Adobe Reader 的引擎還是會比各發行版默認的配置更好,或者差不多。(偶爾看到 Ubuntu 時都覺得這幾年 Linux 社區的字體渲染沒有明顯長進,前兩天我在朋友的 Debian 里也怎麼都無法讓冬青黑體簡體中文顯示得像在 Mac OS X 里那樣勻稱。)
  • 所以提問者心目中「其它格式的文檔」恐怕主要是 Windows 下 Word 的效果。
  • 在其他平台上,PDF 及其 viewer 的字體渲染優勢可能不那麼明顯。比如我就覺得 Mac OS X 自帶的 預覽.app 的 PDF 渲染效果比 Adobe Reader 好,尤其字體渲染。這就是 Adobe 引擎 vs OS X 引擎的問題:在 OS X 上,系統原生的字體渲染引擎質量和 Adobe Reader 的引擎差不多,還稍好一些。所以在 OS X 上,用戶並不覺得 PDF 的字體渲染效果比 Pages、Office Word for Mac 的效果好。


重新回答一下這個問題:

我認為PDF格式對字體的渲染效果會好Word很多主要原因如下:

第一:PDF格式支持Type1字體,Type1使用三次貝塞爾曲線來描述字形,TrueType則使用二次貝塞爾曲線來描述字形。所以Type1的字體比TrueType字體更加 精確美觀。而Word用的字體基本都是TrueType字體。詳細參考:關於矢量字體type1/TrueType/OpenType

第二:PDF格式誕生的目的就是「忠實於原稿」,所以在顯示器上的顯示排版,它盡量的做到了細節上和列印效果的完全一致,而Word主要是用與流式編輯,它所見即所得的「細節和標準」是低於PDF的。

第三:ClearType的使用,在PDF閱讀器中,ClearType的效果默認是開啟的,大部分的PDF渲染引擎都支持反走樣,反鋸齒,沒有採用Windows的渲染引擎。而Windows xp中ClearType默認是關閉的,這也會降低用戶的美感。

第四:對於字體如果再細細的研究,你會發現Windows為了追求通用性,它是以犧牲字體細節為代價的,比如Windows常用的Unicode編碼,這是一種單一碼,舉例:比如一個字元「A」,在Unicode中就是一個唯一的編碼,而在PDF中字形還採用CID編碼,這種編碼中,一個字元「A」可能因為字形的不同而有不同的碼值,分別代表正體的A,斜體的A,半寬的A,矮扁的A,瘦高的A,PDF用了這麼多的碼值表達顯示效果不同的A為的是什麼?就是為了顯示效果的無可挑剔。而Windows中為了實現那麼多的字形效果,它只能通過圖形變換來實現,效果細節上當然無法與CID編碼相比了。


說句題外話,PDF格式的問題 @馮東 和 @梁海 已經解釋的很清楚了,我想說的是Adobe Viewer渲染矢量圖形的時候實際上並不出色,尤其是表現大量極細線是會顯示成一陀灰色,這一點OS X的預覽就好得多,甚至是Quick View都比Adobe的好。這具體是何原因呢?


上面的說到微軟不重視PDF那是當然了,它在"想"推廣自己的XPS格式,但力度也不夠大,而且顯示效果和PDF根本不在一個數量級上.


推薦閱讀:

怎樣優化 MacBook Air 字體顯示?
如何評價谷歌發布的新字體 Literata?
為什麼思源黑體應用在網頁或者word里很難看?
字元和字體是什麼樣的關係?怎樣去設計一個字體?
如何讓 Windows 下所有 DirectWrite 渲染的文字忽略 hinting?

TAG:Adobe | 字體 | PDF | 字體渲染 |