如何阻止GhostScript用NimbusRomNo9L-Regu替换Times-Roman(在Windows上)

时间:2016-11-30 10:29:03

标签: pdf fonts ghostscript postscript

我在Windows 7(x64)上使用 Ghostscript v9.07 将PostScript文件转换为PDF。在PostScript文件中,使用了字体Times-RomanTimes-Bold - 这可以在PostScript纯文本中看到:

/Times-Roman findfont 24.00 scalefont setfont
.
.
.
/Times-Bold findfont 24.00 scalefont setfont
.
.
.

(这在TeX的PostScript输出中非常常见。)

当我使用Ghostscript将PostScript转换为PDF时,Ghostscript使用Nimbus-Roman字体系列。

GPL Ghostscript 9.07 (2013-02-14)
Copyright (C) 2012 Artifex Software, Inc.  All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Loading NimbusRomNo9L-Regu font from %rom%Resource/Font/NimbusRomNo9L-Regu... 39
38016 2393624 2695216 1387174 4 done.
Loading NimbusRomNo9L-Medi font from %rom%Resource/Font/NimbusRomNo9L-Medi... 39
38016 2453738 2695216 1390537 4 done.

此输出表明它正在从可执行文件中嵌入的资源加载font-family。在任何情况下,它都不会从PostScript文件中加载它,因此它来自应用程序的发行版或操作系统。

无论字体平滑设置如何,我尝试过的每个PDF查看器的结果都很糟糕。

Adobe Acrobate Reader DC Adobe Acrobate Reader DC (zoomed)

我无法理解。生成的PDF文本光栅化 - 您可以选择它并剪切并粘贴它,文件大小单独显示它仍然是真正的文本 - 所以我只能得出结论这是一个怪癖的Nimbus-Roman字体。

绝对没有理由使用该字体,但无论我做什么,我似乎都无法让Ghostscript使用Windows字体集中的Times-Roman(或等效)字体。

我尝试了-sFONTPATH开关(在某些网站上也称为sFONTDIR - 我试过两次)无济于事,我去寻找字体图文件来尝试黑客攻击,但没有找到一个Windows - 仅安装目录中其他操作系统的字体映射。

如何更改此行为并阻止Ghostscript使用可怕的字体?

1 个答案:

答案 0 :(得分:4)

让Ghostscript使用特定字体而不是替代字体的方法是将字体嵌入输入中。

此:

/ Times-Roman findfont 24.00 scalefont setfont

仅请求字体(和大小),它不包括字体数据。在没有字体的情况下,Ghostscript被迫使用替代字体。

在Windows上,Ghostscript使用ROM文件系统,但不附带支持文件。如果你想使用它们,你可以从Git中提取它们,然后使用-I开关。这将允许您更改控制Ghostscript已知的CIDFonts的cidfmap,以及控制已知常规字体的fontmap.GS。

但是,我没有看到您使用明显位图字体的结果。也许你应该尝试更新版本的Ghostscript。或者发布一个原始的PostScript程序和转换的PDF文件,以便可以检查它们。

[编辑从这里开始]

好的,基本上你在上面提到了一些问题。你在那里的截图来自第1页,但是字体替换',即NimbusRoman-Regular和NimbusRoman-Bold(在当前版本的Ghostscript上)的加载发生在第5页。显然,&# 39;替代'第5页上的内容不会影响第1页上的内容。如果您没有设置-dBATCH,那么您会看到道德;在调试问题时,请保持命令行简单。

实际问题'是PostScript程序对所有文本使用类型3位图字体,该字体在程序正文中定义。

简而言之,文本是一个糟糕的位图字体,因为它是PostScript创建的方式,它包含一个糟糕的位图字体并坚持使用它(FWIW它似乎已经以300 dpi渲染)

事实上,文档中 可扩展的唯一文本是使用Times-Roman的文本(不是替换,它使用解释器中的字体而不是位图字体)。 / p>

这是页面顶部图形的文字; '指向','' X',''''''' u& #39;,' W'。这已作为EPS(最初称为ray_space.eps)包含在文档中,这就是它使用真实可缩放字体的原因。如果放大第5页的顶部,您将看到可缩放字体看起来平滑(图中的主体),而位图字体(例如图形标题)看起来是位图。

除了从原始DVI文档重新创建PostScript之外,基本上没有什么可以做的。这不是错误(或者至少不是Ghostscript错误)。

[和另一个编辑...]

我担心它不是很简单。

有26种字体名为/ Fa to / Fx,我不确定为什么会出现这种情况,因为每种字体都能包含255个字形但大多数字体不能(同时它们不包含)两个字形或者)。似乎没有充分的理由将字体编码为原样。

程序根据需要使用每种字体,在需要不同字形时切换字体。例如:

1 0 bop
392 319 a Fx (An)21 b(In)n(tro)r(duction)g(to)h(Pro)t(jectiv)n
(e)h(Geometry)670 410 y(\(for)f(computer)f(vision\))

815
561 y Fw(Stan)c(Birc)o(h\014eld)74 754 y Fv(1)67 b(In)n(tro)r(duction)
74 856 y Fu(W)l(e)

' Fx'和' Fw'调用加载字体字典,然后由以下代码使用。坦率地说,Tex PostScript很难弄清楚,人们可能会认为它的设计是混淆的。

确定以' F'开头的2字节对需要删除或替换,而不是(例如ASCII编码的图像数据)将是棘手的。此外,字形在y轴上翻转(以匹配使用中的变换矩阵),因此您必须为替换字体类似地调整FontMatrix。

如果这些TeX字体词典中的字体始终包含相同的字形,则可以定义一组可替代使用的替代字体(/ Fa to / Fx)。这些将需要加载到TeXDict字典中,以替换当然标题中定义的那些。

我并不是说它是不可能的,但要想出可行的方法,然后进行大量的编码来实现它将是一项大量的研究工作。