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 預先設定好。