我有一个使用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。
答案 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。