【问题标题】:What parameters will allow Ghostscript to read font names in Chinese correctly from a PDF?哪些参数可以让 Ghostscript 从 PDF 中正确读取中文字体名称?
【发布时间】:2011-03-28 04:12:00
【问题描述】:

我试过了

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

但我明白了。在使用中文字体的页面上从 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 是 Adob​​e Reader 9 列出的中文字体的屏幕截图。

【问题讨论】:

  • 如果您可以发布指向这些 PDF 之一的链接会很有帮助...我没有使用 CID 字体的 PDF。
  • 您的 Ghostscript 版本相当旧,我可能会说。 8.51 于 2005 年 4 月发布,距今已有 5 年多了!在这 5 年中,Ghostscript 代码取得了很多的进步和改进。您应该考虑从ghostscript.com/releases 安装 8.71(当前是最新版本)。
  • 试试csb.gov.hk/english/publication/files/e-hrmguide.pdf。我认为这是我的测试人员获得 PDF 的地方。

标签: pdf fonts ghostscript cmd cjk


【解决方案1】:

有趣的问题。

但是,这里不一定是 Ghostscript 的错,您只看到 /·s²Ó©úÅé。

根据您的命令,我看到您在 Windows 上的 cmd.exe shell 窗口内使用 Ghostscript。 cmd.exe 可能无法正确显示 Ghostscript 要求它显示的内容。这可能有两个不同的原因(或同时有两个原因)

  1. 您的 cmd.exe 窗口使用的“代码页”无法处理 CID 或 Unicode 字符/字形。
  2. 您的 cmd.exe 使用的字体不包含因此无法处理 CID/Unicode 字形。

您应该首先查询您的cmd.exe 窗口,它使用哪个'codepage'。类型:

chcp

看看它是否可以显示多字节字符和字形(例如“codepage 850”)。

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

chcp 65001

chcp 65000

这应该会将您切换到 Unicode(65001 == UTF-8-Unicode65000 == 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 字体资源/Adobe-CNS1) 代替 ·s²Ó©úÅé。但至少你会更好地理解它想要替换哪种字体。您的控制台将显示与您的 Adob​​e Reader 屏幕截图相同的亚洲字形... ;-)

【讨论】:

  • 您似乎是对的,这是一个代码页问题。我使用了 65001,字体名称变成了未显示的字形。但是,我仍然遇到同样的错误。另一方面,我一直在考虑这个错误,看来你又是对的,它是 Adob​​e-CNS1 没有找到。不过这很奇怪,因为 AFAIK 这是随 GS 一起提供的。
  • @Chry Cheng:您的 Ghostscript 是否与您使用中文字体名称制作 Acrobat 屏幕截图 (imgur.com/4mdmx.png) 的系统在同一系统上运行?
  • 如果 Ghostscript 正在打印 Unicode,那么 Windows 控制台将自动处理代码页转换。那么,在这种情况下,您会看到问号。使用 UTF-8 时,结果更有可能只是 U+FFFD,未知代码点被转换成什么。 (事实上​​,当将代码页 850 或 437 中出现的上述字符解释为 UTF-8 时,我得到的只是胡言乱语。这绝对不是这里的问题。)
【解决方案2】:

Chry Cheng:我仍在尝试为您的 Ghostscript 问题找到解决方案,但我还没有时间进行所需的研究......

我不知道您是否出于某种原因必须使用 Ghostscript。但如果没有,这里还有另一种选择:MuPDF。由 artofcode LLC 和 Artifex Inc. 提供给您——开发 Ghostscript 的人。

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

MuPDF:

  • Open Source;
  • 多平台(Windows、Mac OS X、Unix,...很快也可能是 Android、iPhone?);
  • 非常轻量级(见下面的截图);
  • 非常快;
  • 安全(不支持 JavaScript);
  • 非常肯定不会因为功能而臃肿;
  • 是否显示示例 PDF 的所有页面
  • 界面非常简单(只有键盘导航,没有菜单或图标):


(Chry Cheng:不知道你是否也注意到我截图中的一件小事,让我有点惊讶和神秘......)

【讨论】:

  • 我还不知道 MuPDF。阅读您的答案后,我在一个实例中下载并安装了,而且确实:它真的很快(并且其 GUI 中 非常 spartanic)。
  • 我需要一个 DLL 接口,而 MuPDF 似乎没有。
  • @Chry Cheng:“MuPDF 是一个轻量级的 PDF 查看器和工具包,用便携式 C 语言编写。[...] 占用空间小。一个二进制 [...] 完全支持 CJK(包括一种亚洲字体)大约 5 兆字节。[...] 支持所有非交互式 PDF 1.7 功能 [...] 为访问 PDF 文档的内部结构提供了一个简单的 API。用于导航交互式链接和书签的示例代码、加密 PDF 文件、提取字体、图像和可搜索文本,以及将页面呈现为图像文件。”(引自 README)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-09
  • 2018-04-28
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 2012-06-26
  • 2010-10-11
相关资源
最近更新 更多