字体未在 ghostscript 中正确映射

Posted

技术标签:

【中文标题】字体未在 ghostscript 中正确映射【英文标题】:Font not being mapped correctly in ghostscript 【发布时间】:2013-10-18 09:13:09 【问题描述】:

我正在尝试使用 Ghostscript 9.10 将 pdf 文档转换为 tiff。 pdf 中嵌入了 TrueType (CID) Arial 和 Calibri 字体。

我使用的命令行如下:

gswin32.exe -dSAFER -dBATCH -r200 -sDEVICE= tifflzw -sOutputFile=d:\temp\tmp.tiff D:\Temp\test.pdf

转换成功,但 Calibri 部分出现错误

我尝试将以下不同组合添加到 cidfmap:

/Calibri << /Path (c:/windows/Fonts/Calibri.ttf) /SubfontID 0 /FileType /TrueType /CSI [(Identity-H) 0] >> ;
/Calibri << /Path (c:/windows/Fonts/Calibri.ttf) /SubfontID 0 /FileType /TrueType /CSI [(Unicode) 0] >> ;
/Calibri << /Path (c:/windows/Fonts/Calibri.ttf) /SubfontID 0 /FileType /TrueType /CSI [(Identity) 0] >> ;

但是当我运行带有对 cidfmap 更改的命令时,我得到以下内容

**** Warning: can't process font stream, loading font by the name.
**** Error reading a content stream. The page may be incomplete.
**** File did not complete the page properly and may be damaged.

嵌入的 arial 字体似乎可以毫无问题地处理 - 并且在 tiff 中正确显示。

Can't find CID font "Arial".
Attempting to substitute CID font /Adobe-Identity for /Arial, see doc/Use.htm#CI
DFontSubstitution.
The substitute CID font "Adobe-Identity" is not provided either. attempting to u
se fallback CIDFont.See doc/Use.htm#CIDFontSubstitution.
Loading a TT font from %rom%Resource/CIDFSubst/DroidSansFallback.ttf to emulate
a CID font Adobe-Identity ... Done.

有人知道如何处理嵌入的 calibri 字体吗?

【问题讨论】:

cidfmap文件放在windows的什么位置? FWIW 我在 GS 9.15 中收到了很多这样的错误消息,但它们似乎在 9.20 中消失了……而且在 9.20 中使用某些 pdf 时效果更好 【参考方案1】:

如果字体嵌入在 PDF 文件中,那么您不需要提供字体映射...正在显示的消息告诉您 Arial NOT 找到,并且 DroidSansFallback 正在改为使用。

将条目添加到 cidfmap 不会有任何用处除非您使用 -I 开关运行 Ghostscript,以便它实际处理 cidfmap 文件。默认情况下,Ghostscript 使用 ROM 文件系统,所有支持文件都编译成可执行文件。

大概你必须这样做才能得到错误。无论如何,我建议的第一件事是从命令行中删除 -dSAFER,因为这将阻止 Ghostscript 打开磁盘上的大多数文件,尤其是您要使用的字体文件。

【讨论】:

以上是关于字体未在 ghostscript 中正确映射的主要内容,如果未能解决你的问题,请参考以下文章

如何为 docsplit (ghostscript) 配置 CID 字体?

自定义安装字体未在 UILabel 中正确显示

自定义安装的字体未在 UILabel 中正确显示

@font-face 未在 Chrome 中呈现正确的字体系列

UIWebView 未在 iPhone 中显示具有正确字体大小的 .doc 文件

布尔值未在 Hibernate 中与 MySQL 正确映射