Ghostscript字体替换谜语

时间:2017-11-30 12:48:38

标签: ghostscript

如何在阅读时让Ghostscript替换Arial + Arial-Bold为Arial + 000040 / Arial,Bold + 000041 jhtest.pdf

Ghostscript坚持用Helvetica-Bold代替这两种字体。 在二进制模式下使用vim更改pdf中的字体名称有助于 - jhtest-patched.pdf

登录jhtest.pdf

GS_FONTPATH=C:\Windows\Fonts
gs -dNOPAUSE -dBATCH -dCCFONTDEBUG -sDEVICE=nullpage jhtest.pdf
GPL Ghostscript 9.18 (2015-10-05)
Copyright (C) 2015 Artifex Software, Inc.  All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Processing pages 1 through 1.
Page 1
Scanning C:\windows\Fonts for fonts... 666 files, 473 scanned, 447 new fonts.
Querying operating system for font files...
Substituting font Helvetica-Bold for Arial+000040.
Loading NimbusSanL-Bol font from %rom%Resource/Font/NimbusSanL-Bol... 8611036 7144230 2673392 1348904 3 done.
Substituting font Helvetica-Bold for Arial,Bold+000041.
Substituting font Times-Bold for TimesNewRoman,Bold+000013.
Loading NimbusRomNo9L-Med font from %rom%Resource/Font/NimbusRomNo9L-Med... 8870100 7399404 3366000 1964135 3 done.

登录jhtest-patched.pdf - Arial和Arial-Bold按预期替换。

GS_FONTPATH=C:\Windows\Fonts
gs -dNOPAUSE -dBATCH -dCCFONTDEBUG -sDEVICE=nullpage jhtest-patched.pdf
GPL Ghostscript 9.18 (2015-10-05)
Copyright (C) 2015 Artifex Software, Inc.  All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Processing pages 1 through 1.
Page 1
Can't find (or can't open) font file %rom%Resource/Font/ArialMT.
Can't find (or can't open) font file ArialMT.
Can't find (or can't open) font file %rom%Resource/Font/ArialMT.
Can't find (or can't open) font file ArialMT.
Scanning C:\windows\Fonts for fonts... 666 files, 473 scanned, 447 new fonts.
Can't find (or can't open) font file %rom%Resource/Font/ArialMT.
Can't find (or can't open) font file ArialMT.
Loading ArialMT font from C:\windows\Fonts/arial.ttf... 8312100 3435413 4127492 2703302 3 done.
Can't find (or can't open) font file %rom%Resource/Font/Arial-BoldMT.
Can't find (or can't open) font file Arial-BoldMT.
Loading Arial-BoldMT font from C:\windows\Fonts/arialbd.ttf... 8369364 3483445 6172560 4696464 3 done.
Querying operating system for font files...
Substituting font Times-Bold for TimesNewRoman,Bold+000013.
Loading NimbusRomNo9L-Med font from %rom%Resource/Font/NimbusRomNo9L-Med... 8413932 3678215 7135440 5602384 3 done.

1 个答案:

答案 0 :(得分:1)

这看起来像创建软件尝试包含子集字体(子集字体通常以6个字母'标记'加号,然后是原始字体名称)命名。但是,这显然不是与该方案对应的字体。

字体没有嵌入,坦白说这是个坏主意,而且名称是非标准的。这意味着PDF消费者必须使用替代字体。 Ghostscript的默认替代字体是Helvetica,这就是你得到它的原因。

如果您更改字体名称以匹配'真实'字体名称,然后 Ghostscript(以及其他PDF消费者)能够找到Arial作为替代品。

为了让Ghostscript找到被破坏的'在您的文件中,您必须专门定义这些确切字体名称的替代。

由于您使用的是Windows,因此您的构建版本正在使用ROM文件系统。但是,为了使问题复杂化,您似乎正在使用Linux版本的Ghostscript(gs而不是gswin32或gswin64)。

这让我不确定你到底在做什么。但是,如果我获得Ghostscript源代码,请修改文件/ghostpdl/Resource/Init/fontmap.GS:

/ Arial + 000040 / ArialMT;

然后运行Ghostscript:

gswin32c -I / ghostpdl / Resource / Init jhtest.pdf

结果是Arial用于Arial + 000040。您需要修改它以适合您的环境,并且您需要找到适合您正在使用的Ghostscript版本的资源文件(因为它们已经过版本化)。

然后,您可以根据需要添加任意数量的替代品。

或者你可以获得' Visual Software'生成更加合理的PDF文件,其中嵌入了字体。或者至少不要破坏字体名称。