首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >限制Ghostscript中有问题的字体映射

限制Ghostscript中有问题的字体映射
EN

Stack Overflow用户
提问于 2018-03-29 21:17:34
回答 1查看 288关注 0票数 0

我正在使用Ghostscript来处理一些PDF以减少大小。有时,处理时嵌入的字体不如查看原始字体时使用的本地字体。

几个问题:

  1. 我设想,已经嵌入在输入PDF中的字体将在输出PDF中重用,而不是从本地机器中获取。这是正确的吗?即使启用了子设置,也是这样吗?
  2. Ghostscript是否有可能(也是合理的)在严格匹配的情况下只嵌入缺少的字体?
  3. Ghostscript是否可能保留已经嵌入在输入PDF中的字体,但不麻烦地嵌入源中缺少的字体?

背景

目前,我正在Ghostscript 9.23中使用以下命令:

代码语言:javascript
运行
复制
gs -sDEVICE=pdfwrite \
   -dCompatibilityLevel=1.4 \
   -dDownsampleColorImages=true \
   -dDownsampleGrayImages=true \
   -dDownsampleMonoImages=true \
   -dColorImageResolution=72 \
   -dGrayImageResolution=72 \
   -dMonoImageResolution=72 \
   -dColorImageDownsampleThreshold=1.0 \
   -dGrayImageDownsampleThreshold=1.0 \
   -dMonoImageDownsampleThreshold=1.0 \
   -dNOPAUSE -dQUIET -dPARANOIDSAFER -dBATCH \
   -dDetectDuplicateImages=true \
   -sOutputFile=output.pdf input.pdf

但是,在某些情况下,字体重映射似乎会损害呈现的结果。在这种情况下,没有任何嵌入式字体的源PDF在字体替换和嵌入之后对典型的查看器进行了一些呈现降级:

在此之前:

代码语言:javascript
运行
复制
name                                 type              encoding         emb sub uni object ID
------------------------------------ ----------------- ---------------- --- --- --- ---------
FrizQuadrata-Bold                    Type 1            MacRoman         no  no  no       7  0
Helvetica-Black                      Type 1            MacRoman         no  no  no       9  0
Helvetica-Light                      Type 1            MacRoman         no  no  no      59  0
Helvetica-Bold                       TrueType          MacRoman         no  no  no      65  0
Helvetica-Bold                       Type 1            MacRoman         no  no  no      68  0
ZapfDingbats                         Type 1            Custom           no  no  no      70  0
Helvetica-Black                      Type 1            MacRoman         no  no  no     108  0
Helvetica-BlackOblique               Type 1            MacRoman         no  no  no     136  0
ZapfDingbats                         Type 1            Custom           no  no  no     137  0
Helvetica-Bold                       Type 1            MacRoman         no  no  no     780  0
Helvetica-LightOblique               Type 1            MacRoman         no  no  no     926  0

之后:

代码语言:javascript
运行
复制
name                                 type              encoding         emb sub uni object ID
------------------------------------ ----------------- ---------------- --- --- --- ---------
VRGBBC+Times-Bold                    Type 1C           MacRoman         yes yes no       8  0
JTHLZY+Helvetica-Bold                Type 1C           MacRoman         yes yes no      10  0
ETQHWQ+Helvetica                     Type 1C           MacRoman         yes yes no      20  0
ZapfDingbats                         Type 1            ZapfDingbats     no  no  yes     29  0
LSUJJC+Helvetica-BoldOblique         Type 1C           MacRoman         yes yes no      46  0
RBDUAX+Helvetica-Oblique             Type 1C           MacRoman         yes yes no     202  0
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-30 07:36:41

这里有很多事要回答.

我设想,已经嵌入在输入PDF中的字体将在输出PDF中重用,而不是从本地来源。 机器。这是正确的吗?即使启用了子设置,也是这样吗?

当您创建一个新的PDF文件时,Ghostscript的pdfwrite设备在默认情况下将保留它可能从输入中获得的一切。这对字体来说实际上是至关重要的。

Ghostscript是否有可能(也是合理的)在严格匹配的情况下只嵌入缺少的字体?

你是如何定义“严格匹配”的?

Ghostscript是否可能保留已嵌入在输入PDF中的字体,但不麻烦嵌入在 消息来源?

您当然可以调整Ghostscript的pdfwrite设备嵌入字体的方式,有几个控件,所有这些都有文档。AlwaysEmbed,NeverEmbed数组允许您防止某些命名字体被嵌入,还有EmbedAlllFonts和SubsetFonts。

尝试在测试文档中将EmbedAllFonts设置为false (重要也将SubsetFonts设置为false)。我还建议您共享一个显示问题的PDF文件,因为很难看出为什么会出现问题。“有些退化”并不能告诉我太多。被嵌入的字体(除了FrizQuadrata、Helvetica-Black、Helvetica-BlackOblique和Helvetica-LightOblique之外)是基础13的一部分,所以应该很好。

而不是将字体嵌入到PDF文件中是个坏主意(除了基本的13),它应该是可移植的,而且如果您依赖于字体替换,则总是面临呈现结果不正确的风险。

假设您实际上在本地有这些字体,那么为什么不直接将它们提供给Ghostscript,以便pdfwrite设备可以将字体的子集嵌入到新的PDF文件中呢?那它就可以随身携带了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49565179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档