Pdf 如何阻止GhostScript将Times Roman替换为NimbusRomNo9L Regu(在Windows上)

Pdf 如何阻止GhostScript将Times Roman替换为NimbusRomNo9L Regu(在Windows上),pdf,fonts,ghostscript,postscript,Pdf,Fonts,Ghostscript,Postscript,我正在Windows 7(x64)上使用Ghostscript v9.07将PostScript文件转换为PDF。在PostScript文件中,使用了字体Times Roman和Times Bold——这可以在PostScript纯文本中看到: /Times-Roman findfont 24.00 scalefont setfont . . . /Times-Bold findfont 24.00 scalefont setfont . . . (这在TeX的PostScript输出中非常常

我正在Windows 7(x64)上使用Ghostscript v9.07将PostScript文件转换为PDF。在PostScript文件中,使用了字体
Times Roman
Times 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.
此输出表明它正在从嵌入在可执行文件中的资源加载字体系列。在任何情况下,它都不是从PostScript文件加载它,因此它要么是从应用程序的发行版加载,要么是从操作系统加载

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

我不明白。生成的PDF文本没有光栅化-您可以选择它并剪切和粘贴它,仅文件大小就表明它仍然是真实文本-因此我只能得出结论,这是Nimbus Roman字体的一个怪癖

绝对没有理由使用这种字体,但无论我做什么,我似乎都无法让Ghostscript从Windows字体集中使用
Times Roman
(或同等)字体

我尝试了
-sFONTPATH
开关(或者在某些站点上称为
sFONTDIR
,我尝试了两种方法),但都没有成功。我开始寻找fontmap文件,尝试对其进行黑客攻击,但在安装目录中没有找到适用于Windows的fontmaps文件-仅适用于其他操作系统的fontmaps


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

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

这:

/Times Roman findfont 24.00 scalefont setfont

仅请求字体(和大小),不包括字体数据。如果没有字体,Ghostscript将被迫使用替代字体

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

但是,我看不到使用明显的位图字体的效果。也许您应该尝试更新版本的Ghostscript。或者发布原始PostScript程序和转换后的PDF文件,以便能够对其进行检查

[编辑从这里开始]

好的,所以基本上你上面所说的有一些问题。这里的屏幕截图来自第1页,但“字体替换”,即NimbusRoman Regular和NimbusRoman Bold(在当前版本的Ghostscript上)的加载发生在第5页。显然,第5页上的“替换”不会影响第1页上的内容。如果你没有设置的话,你会看到的——dBATCH,道德;调试问题时,请保持命令行简单

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

简而言之,文本是一个蹩脚的位图字体,因为PostScript就是这样创建的,它包含一个蹩脚的位图字体,并且坚持使用它(FWIW,它似乎以300 dpi的速度渲染)

事实上,文档中唯一可伸缩的文本就是使用Times Roman的文本(不是替代,它使用解释器的字体而不是位图字体)

这是页面顶部图形的文本;'点、p、X、线、Y、u、W。这已经作为EPS(最初称为ray_space.EPS)包含在文档中,这就是为什么它使用真正的可伸缩字体。如果放大第5页的顶部,您将看到可缩放字体继续看起来平滑(图体),而位图字体(例如图标题)看起来是位图

基本上,除了从原始DVI文档中重新创建PostScript之外,您对此无能为力。这不是一个bug(或者至少不是一个鬼脚本bug)

[和另一个编辑…]

恐怕这并不简单

有26种字体名为/Fa到/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的后记很难理解,人们可能会认为它是被设计成模糊的

识别哪些以“F”开头的2字节对需要删除或替换,哪些不需要删除或替换(例如ASCII编码的图像数据)将是一件棘手的事情。此外,字形在y轴上翻转渲染(以匹配使用中的变换矩阵),因此您必须类似地调整FontMatrix以替换字体

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


我并不是说这是不可能的,但这将是一个很好的研究工作,以找出什么是可能的,然后是大量的编码来实现它。

复制错误的PostScript文件之一来自这里:请注意,该网站也提供PDF版本,并且他们的PDF显示相同的像素化外观,因此我试图自己隐藏
.ps