-dSubsetFonts = false选项停止显示TrueType字体/ glyphshow

时间:2015-05-29 16:43:37

标签: pdf ghostscript true-type-fonts postscript

我有一个使用TrueType字体的PostScript。但是,我想要包括一些使用过的字符,如注册标记(®)和右/左单/双引号(',“等)。

所以我使用了glyphshow并调用了字形的名称

%! 

<< /PageSize [419.528 595.276] >> setpagedevice 
/DeviceRGB setcolorspace 
% Page 1 

%
% Set the Original to be the top left
%
0 595.276 translate 
1 -1 scale 
gsave 
%
% Save this state before moving x y specifically for images
%

1 -1 scale 
/BauerBodoniBT-Roman findfont 30 scalefont setfont % set the pt size %-3.792 - 16 

1 0 0 setrgbcolor
10 -40 moveto /quoteright glyphshow
10 -80 moveto /registered glyphshow

/Museo-700 findfont 30 scalefont setfont % set the pt size %-3.792 - 16 

1 0 1 setrgbcolor
10 -120 moveto /quoteright glyphshow
10 -180 moveto /registered glyphshow


showpage 

当我使用以下命令执行此PostScript时(由于我要求在Illustrator中可以编辑pdf,即可以在所有字体完整的情况下打开),PDF只显示包含字形的内容,如果您从中复制和粘贴将pdf写入文本文件。

gs -o gly_subsetfalse.pdf -sDEVICE=pdfwrite -dCompatibilityLevel=1.3 -dSubsetFonts=false -dPDFSETTINGS=/prepress textglyph.ps

但是,上面的命令会导致将其拉入Illustrator时出现问题。罕见的字形变得不可识别(',Æ)。普通字符和常规字形似乎很好,即/字形显示,只显示文本出现在pdf和插图画家中。

因此,似乎将SubsetFonts选项设置为True会显示罕见的字形,但这会阻止我将PDF拉入Illustrator。

附件是用于参考的TrueType字体和两个PDF(一个使用subsetfont选项是truw而另一个不是 - 默认)。

我也尝试了以下命令,结果相同(PDF上没有显示可见的字形,而Illustrator错误地显示字形)。

gs -o gly_subsetfalse_embedallfonts.pdf -sDEVICE=pdfwrite -dCompatibilityLevel=1.3 -dPDFSETTINGS=/prepress -dSubsetFonts=false -dEmbedAllFonts=true textglyph.ps

但是使用此命令,如果有帮助,我也会从PDF中获得PreFlight错误:

“PDF中的字形宽度信息与嵌入字体中的宽度信息不匹配”

附上上面提到的所有文件 - click here

编码字体也不会产生良好的效果。

我在PostScript中编码了一个TrueType(和Type42)字体,并在glyphshow中列出了一些新字符。

结果是:

命令1:

gs -o encode_ttf_subset_false.pdf -sDEVICE=pdfwrite -dSubsetFonts=false encode.ps

结果1: 在Acrobat中打开PDF不会显示任何字形显示字符。

命令2:

gs -o encode_ttf_subset_true.pdf -sDEVICE=pdfwrite encode.ps

结果2: 在Acrobat中打开PDF,它显示字形显示字符,但不显示在Illustrator中。

命令3:

gs -o encode_ttf_subset_false_embedtrue.pdf -sDEVICE=pdfwrite -dSubsetFonts=false -dEmbedAllFonts=true encode.ps

结果3: 与结果1相同(不显示字形显示字符)。

下面是我使用编码的TTF和Type42的新PostScript(我还将它们包含在下面的文件中)。

这至少是Ghostscript的错误吗?

/museobold findfont dup  %%%%% This is the Type42 Font
length dict
copy begin

/Encoding Encoding 256 array copy def 
Encoding 1 /oacute put
Encoding 2 /aacute put
Encoding 3 /eacute put
Encoding 4 /questiondown put
Encoding 5 /quotedblleft put
Encoding 6 /quoteright put
Encoding 7 /quotedblbase put

/museobold-Esp currentdict definefont pop

end

/museobold-Esp 18 selectfont

72 600 moveto
(\005D\001lnde est\002 el camino a San Jos\003? More characters \006 and \007) show

%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%

/BauerBodoniBT-Roman findfont dup
length dict
copy begin

/Encoding Encoding 256 array copy def 
Encoding 1 /oacute put
Encoding 2 /aacute put
Encoding 3 /eacute put
Encoding 4 /questiondown put
Encoding 5 /quotedblleft put
Encoding 6 /quoteright put
Encoding 7 /quotedblbase put

/BauerBodoniBT-Roman-Esp currentdict definefont pop

end

/BauerBodoniBT-Roman-Esp 18 selectfont

72 630 moveto
(\005D\001lnde est\002 el camino a San Jos\003? More characters \006 and \007) show

showpage

点击here下载以下内容:BBBTRom.ttf(TrueType字体); 3 pdfs(结果1,2和3); museobold(TrueType字体使用ttftotype42转换为Type42)和encode.ps。

1 个答案:

答案 0 :(得分:2)

这回到了使用Illustrator作为常规PDF应用程序的问题。它无法做到这一点。现在你注意到你已经找到了过去的方法,这次我相信你运气不好。

PostScript glypshow运算符没有PDF等价物。此外,由于glyphshow的工作方式,我们不能简单地使用任何现有的字体实例来存储字形(因为字形可能不是,并且可能不存在于编码中)。因此,pdfwrite可以做到唯一的事情。它创建了一个新字体,它只包含来自特定原始字体的CharStrings的glyphshow使用的字形。

因为我们没有工作的编码,我们必须使用自定义(suymbolic)编码(因为PDF文件中的字体具有来进行编码),这是您之前的经验疑似意味着Illustrator无法读取我们嵌入的字体。

使用glyphshow和pdfwrite是我不鼓励的。

现在已经说过,当SubsetFonts为true时,PDF文件应该没有问题,尽管我确实有一个听起来类似的开放式错误报告。你还没有真正说过你正在使用哪个版本的Ghostscript,所以我无法确定它是否存在同样的问题。 (我也没有相同的字体等)。请注意,这不是(我相信)与您使用Illustrator的问题有关,这是由于您使用字形和一些Illustrator限制造成的。

作为一般规则,我不会在尝试调试问题时使用-dPDFSETTINGS,也不会将输出限制为PDF 1.3。