6.9. 以 gs 觀看不內嵌的 pdf 檔

gs/gv 有個 dirty hack,就是看到

name                                 type         emb sub uni object ID
------------------------------------ ------------ --- --- --- ---------
國字標準宋體                         CID TrueType no  no  no      22  0

這種類型的不內嵌字,就自己到 /usr/local/share/ghostscript/7.05/lib/CIDFnmap 中加上 alias,以筆者而言會加上文鼎上海宋的 alias:

/國字標準宋體           /ShanHeiSun-Light       ;

李果正 Edward G.J. Lee 也提出比較正式的解法如下:

昨天玩了一下 gs。發現可能不必這麼麻煩,因為 CJK-latex + dvipdfmix 製作出來的不內嵌中文 PDF 檔,頗合 PDF-spec。雖然,pdffonts 看到的是:

name                                 type         emb sub uni object ID
------------------------------------ ------------ --- --- --- ---------
國字標準宋體                         CID TrueType no  no  no      22  0

但其實 PDF 檔裡頭會標記成 Adobe-CNS1,也就是說會去使用 PDF browser Adobe-CNS1 的預設字型,例如:

34 0 obj
<<
/Type/Font
/Subtype/CIDFontType2
/BaseFont/#b0#ea#a6r#bc#d0#b7#c7#a7#ba#c5#e9,Italic
/FontDescriptor 35 0 R
/CIDSystemInfo<<
/Registry(Adobe)
/Ordering(CNS1)
/Supplement 0
>>
>>
endobj

以此 object 為例。其中 # 是代表 hex notation, 那一堆就是『國字標準宋體』, 後面會有 /Registry(Adobe) /Ordering(CNS1),因此,只要 gs 的 CIDFnmap 設成:

/Adobe-CNS1             /ShanHeiSun-Light       ;

就可以了,也就是說,不管 PDF 使用什麼字型,如果找不到此字型, 就會使用預設的 (Adobe-CNS1)ShanHeiSun-Light。 這樣就不必遇到沒有的字型就得去加入 alias。 而 acroread 也會去找他的預設字型 MHei-Medium 或 MSung-Light (視 acroread 如何設定,設成 sans 則取用黑體,設成 serif 則取用宋體)。為防意外,建議以下兩行也加入:

/Adobe-CNS1-Big5        /ShanHeiSun-Light       ;
/Adobe-CNS1-Unicode     /ShanHeiSun-Light       ;

這樣一來,列印的問題也解決了。pdf2ps(pswrite device) 時 gs 會去取用 ShanHeiSun-Light。當然,前提是 /usr/share/ghostscript/Resource 要把 ShanHeiSun-Light 預先設定好。