限制 Ghostscript 中有问题的字体映射
Limiting problematic font mapping in Ghostscript
我正在使用 Ghostscript 处理一些 PDF 以缩小尺寸。有时处理时嵌入的字体不如查看原件时使用的本地字体。
几个问题:
我想输入 PDF 中已经嵌入的字体会在输出 PDF 中重复使用,而不是从本地机器获取。这个对吗?即使启用子集化也是如此吗?
是否有可能(并且合理地)让 Ghostscript 在严格匹配时仅嵌入缺失的字体?
Ghostscript 是否可以保留已嵌入到输入 PDF 中的字体,而不是嵌入源中缺少的字体?
背景
目前我在 Ghostscript 9.23 中使用以下命令:
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 在字体替换和嵌入后对于典型查看器来说会出现一些渲染降级:
之前:
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
之后:
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
这里有很多要回答的……
I imagine that fonts which are already embedded in an input PDF are reused in the output PDF rather than sourced from the local
machine. Is this correct? Is this true even when subsetting is
enabled?
当您创建一个新的 PDF 文件时,Ghostscript 的 pdfwrite 设备将在默认情况下尽可能保留输入中的所有内容。这对于字体来说实际上是非常重要的。
Is it possible (and reasonably) to have Ghostscript only embed a missing font when it has a strict match?
您如何定义 'strict match'?
Is it possible for Ghostscript to retain fonts already embedded in the input PDF but not bother embedding fonts that are missing in the
source?
你当然可以调整Ghostscript的pdfwrite设备嵌入字体的方式,有几个控件,都记录在案。 AlwaysEmbed、NeverEmbed 数组允许您防止嵌入某些命名字体,还有 EmbedAlllFonts 和 SubsetFonts。
尝试在您的测试文档中将 EmbedAllFonts 设置为 false(重要 也将 SubsetFonts 设置为 false)。我还建议您共享一个显示问题的 PDF 文件,因为很难看出为什么会出现问题。 'some degradation' 并没有告诉我太多。嵌入的字体(FrizQuadrata、Helvetica-Black、Helvetica-BlackOblique 和 Helvetica-LightOblique 除外)是 base 13 的一部分,因此应该没问题。
不在 PDF 文件中嵌入字体(除了 base 13)是个坏主意,它应该是可移植的,如果你依赖字体替换,你总是运行 渲染结果不正确的风险。
假设您实际上在本地拥有这些字体,那么为什么不让 Ghostscript 可以使用它们,以便 pdfwrite 设备可以在新的 PDF 文件中嵌入字体的子集?那就便携了。
我正在使用 Ghostscript 处理一些 PDF 以缩小尺寸。有时处理时嵌入的字体不如查看原件时使用的本地字体。
几个问题:
我想输入 PDF 中已经嵌入的字体会在输出 PDF 中重复使用,而不是从本地机器获取。这个对吗?即使启用子集化也是如此吗?
是否有可能(并且合理地)让 Ghostscript 在严格匹配时仅嵌入缺失的字体?
Ghostscript 是否可以保留已嵌入到输入 PDF 中的字体,而不是嵌入源中缺少的字体?
背景
目前我在 Ghostscript 9.23 中使用以下命令:
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 在字体替换和嵌入后对于典型查看器来说会出现一些渲染降级:
之前:
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
之后:
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
这里有很多要回答的……
I imagine that fonts which are already embedded in an input PDF are reused in the output PDF rather than sourced from the local
machine. Is this correct? Is this true even when subsetting is enabled?
当您创建一个新的 PDF 文件时,Ghostscript 的 pdfwrite 设备将在默认情况下尽可能保留输入中的所有内容。这对于字体来说实际上是非常重要的。
Is it possible (and reasonably) to have Ghostscript only embed a missing font when it has a strict match?
您如何定义 'strict match'?
Is it possible for Ghostscript to retain fonts already embedded in the input PDF but not bother embedding fonts that are missing in the
source?
你当然可以调整Ghostscript的pdfwrite设备嵌入字体的方式,有几个控件,都记录在案。 AlwaysEmbed、NeverEmbed 数组允许您防止嵌入某些命名字体,还有 EmbedAlllFonts 和 SubsetFonts。
尝试在您的测试文档中将 EmbedAllFonts 设置为 false(重要 也将 SubsetFonts 设置为 false)。我还建议您共享一个显示问题的 PDF 文件,因为很难看出为什么会出现问题。 'some degradation' 并没有告诉我太多。嵌入的字体(FrizQuadrata、Helvetica-Black、Helvetica-BlackOblique 和 Helvetica-LightOblique 除外)是 base 13 的一部分,因此应该没问题。
不在 PDF 文件中嵌入字体(除了 base 13)是个坏主意,它应该是可移植的,如果你依赖字体替换,你总是运行 渲染结果不正确的风险。
假设您实际上在本地拥有这些字体,那么为什么不让 Ghostscript 可以使用它们,以便 pdfwrite 设备可以在新的 PDF 文件中嵌入字体的子集?那就便携了。