7.3. PostScript

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