什么参数允许Ghostscript从PDF中正确读取中文字体名称?

时间:2010-08-11 03:41:21

标签: pdf fonts ghostscript cmd cjk

我试过

gswin32c -sDEVICE=jpeg -sOutputFile=foo.jpg foo.pdf

但是我得到了ff。在使用中文字体的页面上从Ghostscript输出。

Substituting CID font resource/Adobe-CNS1 for /·s²Ó©úÅé.
Error: /undefinedresource in --findresource--
Operand stack:
   --dict:4/4(L)--   F3   12.96   --dict:6/6(L)--   --dict:6/6(L)--   ·s²Ó©úÅé --dict:9/12(ro)(G)--   --nostringval--   --dict:8/8(L)--   --dict:8/8(L)--   Adobe-CNS1   CIDFont   Adobe-CNS1
Execution stack:
   %interp_exit   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--   --nostringval--   --nostringval--   false   1   %stopped_push   1   3   %oparray_pop   1   3   %oparray_pop   1   3   %oparray_pop   --nostringval--   --nostringval--   3   1   33   --nostringval--  %for_pos_int_continue   --nostringval--   --nostringval--   --nostringval--   --nostringval--   %array_continue   --nostringval--   false   1   %stopped_push  --nostringval--   %loop_continue   --nostringval--   --nostringval--   --nostringval--   --nostringval--   --nostringval--   --nostringval--   %array_continue   --nostringval--   --nostringval--   --nostringval--   --nostringval--   --nostringval--   %loop_continue   --nostringval--   12   9   %oparray_pop   --nostringval--   --nostringval--   --nostringval--
Dictionary stack:
   --dict:1122/1686(ro)(G)--   --dict:2/20(G)--   --dict:75/200(L)--   --dict:75/200(L)--   --dict:105/127(ro)(G)--   --dict:253/347(ro)(G)--   --dict:21/24(L)--   --dict:4/6(L)--   --dict:26/31(L)--   --dict:20/26(ro)(G)--
Current allocation mode is local
Last OS error: No such file or directory
GPL Ghostscript 8.54: Unrecoverable error, exit code 1

很明显,Ghostscript的编码是非Unicode的,因为它在读取中文字体名称时会有垃圾(/·s²Ó©Å)。 Here是Adobe Reader 9列出的中文字体的屏幕截图。

2 个答案:

答案 0 :(得分:1)

有趣的问题。

然而,这里不一定是Ghostscript的错,你只能看到/·s²Ó©úÅé。

从命令中,我看到你在cmd.exe shell窗口内的 Windows 上使用了Ghostscript。它是cmd.exe,可能无法正确显示Ghostscript要求它显示的内容。这可能有两个不同的原因(或两者兼而有之)

  1. 您的cmd.exe窗口使用的'codepage'无法处理CID或Unicode字符/字形。
  2. cmd.exe使用的字体不包含,因此无法处理CID / Unicode字形。
  3. 您应首先查询cmd.exe窗口,它会使用哪个'codepage'。类型:

    chcp
    

    并查看是否有任何 NOT 显示多字节字符和字形(如“codepage 850”)。

    如果是这样,请尝试使用以下命令更改当前cmd.exe窗口中的代码页:

    chcp 65001
    

    chcp 65000
    

    这会将您切换为Unicode( 65001 == UTF-8-Unicode ; 65000 == UTF-7-Unicode )。如果您这样做,则还必须确保 cmd.exe窗口中使用的字体 可以显示所有(大多数)相关字形:因此您应该进入cmd.exe窗口的设置(单击窗口标题栏的左上角图标)并将字体更改为'Lucida Console'

    以下是一些可能对您有帮助的代码页编号:

    932 :  Japanese Shift-JIS
    936 :  Simplified Chinese GBK
    949 :  Korean
    950 :  Traditional Chinese Big5
    

    但请注意 ,您可能无法切换到这些代码页,除非您的计算机安装了日语/中文/韩语支持。

    另见:


    说完这一切之后,这可能仍然无法解决您的问题。 Ghostscript可能仍然显示相同的错误,因为它没有找到它想要使用的字体( CID字体资源/ Adob​​e-CNS1 )来代替 ·s²Ó©UAE 即可。但至少你会更好地理解,它想要替换哪种字体。您的控制台将显示与您的Adobe Reader屏幕截图显示相同的亚洲字形......; - )

答案 1 :(得分:0)

Chry Cheng:我仍在尝试使用Ghostscript找到解决问题的方法,但我没有时间进行必要的研究......

我不知道你是否必须出于某种原因使用Ghostscript。但如果没有,这是另一种选择:MuPDF。 artofcode LLC& Artifex Inc. - 开发Ghostscript的人。

MuPDF对我来说渲染你的示例文件没有任何问题! (有趣的是,第2页的Ghostscript窒息; Acrobat Reader也被窒息,但提供给下载并安装一个额外的亚洲字体,而不是命名它,但说它是“支持繁体中文”安装后,Acrobat Reader不会显示第2页的单个中文字形!

MuPDF:

  • Open Source;
  • 多平台(Windows,Mac OS X,Unix,......很快就可能是Android,iPhone也是?);
  • 非常轻量级(请参阅下面的屏幕截图);
  • 非常快;
  • 安全(无JavaScript支持);
  • 非常肯定没有功能臃肿;
  • 确实显示示例PDF的所有页面
  • 界面非常简单(仅限键盘导航,没有菜单或图标):

MuPDF: very simple GUI -- this is all the GUI it has. MuPDF: keyboard navigation only, no menues or icons.


(Chry Cheng:我想知道你是否也注意到我的截图中的一件小事对我来说有点令人惊讶和神秘......)