ghostscript 顽固地拒绝嵌入字体
ghostscript stubbornly refuses to embed fonts
我有一个从 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
为了其他有同样问题的人的利益;这里的问题是影响字体嵌入的三个参数,它们以某种令人困惑的方式相互作用(抱歉,这些参数是由 Adobe 定义的,而不是我们...)
有/NeverEmbed,一组从不嵌入的字体,/AlwaysEmbed,一组总是[=31=的字体] 嵌入(如果使用,显然)和 /EmbedAllFonts.
您不能将字体同时放入 NeverEmbed 和 AlwaysEmbed,这是一个错误。
如果您在 AlwaysEmbed 中设置字体,则无论 EmbedAllFonts 的设置如何,它们都会被嵌入。
如果您在 NeverEmbed 中设置字体,则无论 EmbedAllFonts 的设置如何,它们都不会被嵌入。
如果一种字体既不在 AlwaysEmbed 也不在 NeverEmbed 列表中,那么如果 EmbedAllFonts 为真,它将被嵌入,否则不被嵌入。
现在,Ghostscript 以 EmbedAllFonts true 开头,因此您不需要 fiddle 除非您出于某种原因想将其设置为 false。那么....为什么它不嵌入标准字体?那是因为 NeverEmbed 列表默认设置为包括所有 base 13 字体。 (这个 是 documented 在 Distiller Parameters 下。
因此,如果您想嵌入这些字体,您需要使用 PDFSETTINGS=/prepress 或 /printer,或者您需要将 NeverEmbed 设置为空。我推荐后者:
-c "<</NeverEmbed []>> setdistillerparams" -f
难道Courier/Helvetica实际上是默认嵌入的?当谈到 MiKTeX 的 ghostscript (mgs) 时,似乎 64 位的默认嵌入它们,而 32 位的则没有。参见:https://github.com/MiKTeX/miktex/issues/296。亲切的问候,伊万
我有一个从 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
为了其他有同样问题的人的利益;这里的问题是影响字体嵌入的三个参数,它们以某种令人困惑的方式相互作用(抱歉,这些参数是由 Adobe 定义的,而不是我们...)
有/NeverEmbed,一组从不嵌入的字体,/AlwaysEmbed,一组总是[=31=的字体] 嵌入(如果使用,显然)和 /EmbedAllFonts.
您不能将字体同时放入 NeverEmbed 和 AlwaysEmbed,这是一个错误。
如果您在 AlwaysEmbed 中设置字体,则无论 EmbedAllFonts 的设置如何,它们都会被嵌入。
如果您在 NeverEmbed 中设置字体,则无论 EmbedAllFonts 的设置如何,它们都不会被嵌入。
如果一种字体既不在 AlwaysEmbed 也不在 NeverEmbed 列表中,那么如果 EmbedAllFonts 为真,它将被嵌入,否则不被嵌入。
现在,Ghostscript 以 EmbedAllFonts true 开头,因此您不需要 fiddle 除非您出于某种原因想将其设置为 false。那么....为什么它不嵌入标准字体?那是因为 NeverEmbed 列表默认设置为包括所有 base 13 字体。 (这个 是 documented 在 Distiller Parameters 下。
因此,如果您想嵌入这些字体,您需要使用 PDFSETTINGS=/prepress 或 /printer,或者您需要将 NeverEmbed 设置为空。我推荐后者:
-c "<</NeverEmbed []>> setdistillerparams" -f
难道Courier/Helvetica实际上是默认嵌入的?当谈到 MiKTeX 的 ghostscript (mgs) 时,似乎 64 位的默认嵌入它们,而 32 位的则没有。参见:https://github.com/MiKTeX/miktex/issues/296。亲切的问候,伊万