2019年2月1日 星期五

嵌入pdf檔案中的字型

我常常遇到下面這件事。投稿IEEE的國際研討會,論文被接受後,要上傳終稿(pdf格式)前,得先通過IEEE eXpress的pdf格式相容性查核,但查核結果為不通過。
查核不通過的最常見的原因之一,就是pdf檔案中沒有內嵌(embed)文件中所有用到的字型(font)資料。一般而言,文件中皆會儲存文字的字元編碼(code)及字型代碼。文件閱讀程式只要支援該文件的字元編碼,並擁有對應的字型資料,就可以正確無誤地重現原文件的內容與格式。如果文件閱讀程式套用了錯誤的字元編碼,顯示出來的就會是俗稱亂碼一樣的文字。如果文件讀取端沒有對應的字型資料,顯示的內容也會與原先文件製作者看到的不一樣(通常會用相似的字型替代原先的字型顯示出來)。

一般電腦預設都會事先安裝好數種常見的字形資料,如中文的細明體和英文的Times New Roman, Arial 等。為了節省檔案的儲存空間,這些常見字型的資料不必再重複存放一份在pdf文件中。對於一些不常見的特殊字型,因不確定讀取文件端是否已安裝該字型的資料,所以儲存成pdf檔案時,有必要將字型資料同時存放在pdf檔案中,讓讀取文件端可以順利顯示相同的字型。這些字型資料稱為內嵌在pdf檔案中。

一份pdf文件中,部分字型內嵌,部分字型沒有內嵌,是很正常的現象,通常讀取或列印文件也不會有甚麼問題。不過出版商考量的是最極端的情形,所以要求所有論文檔皆要內嵌所有用到的字型(即使是最普遍的)。結果是,每一個論文檔都內嵌這些常見的字型,檔案大小都增胖不少。

我是用PC上的MiKTex寫論文,通常論文中所有用到的字型都會內嵌,會遇到問題的都是論文中外嵌的圖檔(figure)。


許多人不清楚圖檔中也會出現字型未內嵌的問題。事實上只要使用任何pdf reader,就可以查核出來。上圖顯示某個圖檔中用到了兩個字形,都沒有內嵌(沒有embedded字眼)。其實此例中的Times New Roman (PostScript),幾乎是每一台電腦中都已經安裝好的的,即使我們的pdf檔不嵌入此字型的資料,正常狀況下對方顯示圖檔時也不會有問題。

我通常會用到的圖檔有兩類。一類是顯示實驗結果的統計圖表,由Matlab輸出成eps格式,再轉換成pdf格式。這部分通常沒問題,最後的圖表檔都會有內嵌字型。另一類圖檔是用於呈現系統架構或其他非統計結果的插圖(illustration),由Visio 繪製,輸出成整頁(A4大小)的pdf格式後,再另用工具(PDFill PDF Tools)切割成所需要的大小。通常會出問題的就是這部分的圖檔。

至少有兩種方式,可以將Visio的圖形輸出成整頁(A4大小)的pdf格式。一種是在Visio程式中使用匯出或另存新檔的選項,另一種是在Visio中透過Bullzip pdf印表機驅動程式將圖形列印成pdf檔案。由Visio直接輸出pdf格式常常會出現離譜的結果,而且如果發生圖檔沒有內嵌字型時,也無法解決。我習慣用Bullzip pdf印表機驅動程式列印的方式輸出pdf格式。除了輸出結果較為正確外,也可以解決圖檔沒有內嵌字型的問題。

解決方式並不難。在Bullzip pdf印表機的進階選項中,將EmbedAllFonts這個選項設成True ,通常就可以解決此問題。如下圖。