ghostscript固执地拒绝嵌入字体

时间:2016-12-18 03:09:21

标签: r ghostscript pdflatex

我有一个从pdflatex创建的文档,嵌入了R pdf图。我现在正试图将它发送到要求嵌入所有字体的打印机(lulu)。我认为,没问题,

# gs -dNOPAUSE -dBATCH -dNOPLATFONTS -sDEVICE=pdfwrite \
  -dEmbedAllFonts=true -sOutputFile=book-gs.pdf -f book.pdf

但令我失望的是,有些字体仍未嵌入:

# pdffonts book-gs.pdf | egrep 'no  [yn]'
name                                 type              encoding         emb sub uni object ID
ZapfDingbats                         Type 1            ZapfDingbats     no  no  yes   1170  0
Symbol                               Type 1            Symbol           no  no  no    1933  0
奇怪的是,pdf文档打印并且看起来很好,所以字体必须以某种方式存活。我尝试过与adobe acrobat程序类似的东西,但我遇到了同样的问题。

建议表示赞赏。

真诚地,/ iaw

2 个答案:

答案 0 :(得分:3)

为了同样有问题的其他人的利益;这里的问题是有三个参数影响字体嵌入,它们以一些令人困惑的方式交互(抱歉,但这些参数是由Adobe定义的,而不是我们......)

有/ NeverEmbed,一个从不要嵌入的字体数组,/ AlwaysEmbed,一个总是要嵌入的字体数组(如果使用的话,显然)和/ EmbedAllFonts。

你不能将字体放入NeverEmbed和AlwaysEmbed,这是一个错误。

如果在AlwaysEmbed中设置字体,则无论EmbedAllFonts的设置如何,它们都将被嵌入。

如果您在NeverEmbed中设置字体,则无论EmbedAllFonts的设置如何,它们都不会被嵌入。

如果一个字体既不在AlwaysEmbed列表中也不在NeverEmbed列表中,那么如果EmbedAllFonts为真,它将被嵌入,否则不会嵌入。

现在,Ghostscript从EmbedAllFonts开始为true,因此除非您因某种原因将其设置为false,否则不需要操作它。所以....为什么它没有嵌入标准字体?那是因为NeverEmbed列表默认设置为包括所有base 13字体。 (这个在Distiller参数下是 documented

因此,如果要嵌入这些字体,则需要使用PDFSETTINGS = / prepress或/ printer,或者需要将NeverEmbed设置为空。我推荐后者:

-c "<</NeverEmbed []>> setdistillerparams" -f

答案 1 :(得分:0)

是默认情况下实际上嵌入了Courier / Helvetica吗?当谈到MiKTeX的ghostscript(mgs)时,默认情况下,一个64位的脚本会默认嵌入它们,而32位的脚本则不会。请参阅:https://github.com/MiKTeX/miktex/issues/296。此致,伊万