ghostscript 顽固地拒绝嵌入字体

问题描述 投票:0回答:2

我有一个由 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 程序进行类似的操作,但我遇到了同样的问题。

r ghostscript pdflatex
2个回答
13
投票

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

有 /NeverEmbed,一组never要嵌入的字体数组,/AlwaysEmbed,一组always要嵌入的字体数组(显然,如果使用的话)和 /EmbedAllFonts。

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

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

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

如果字体既不在 AlwaysEmbed 也不在 NeverEmbed 列表中,则如果 EmbedAllFonts 为 true,则将嵌入该字体,否则不嵌入。

现在,Ghostscript 以 EmbedAllFonts true 开始,因此您不需要摆弄它,除非您出于某种原因想将其设置为 false。那么......为什么它不嵌入标准字体?那是因为 NeverEmbed 列表默认设置为包含所有 13 种基本字体。 (这记录在蒸馏器参数下)。

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

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

0
投票
难道 Courier/Helvetica 实际上是默认嵌入的吗?当谈到MiKTeX的ghostscript(mgs)时,似乎64位的ghostscript默认嵌入它们,而32位的则没有。请参阅:

https://github.com/MiKTeX/miktex/issues/296。亲切的问候,伊万

© www.soinside.com 2019 - 2024. All rights reserved.