无论如何在PostScript中使用unicode字符串(最有可能是UTF-8,但可能是任何编码)?
到目前为止,我一直在使用此功能将字体转换为Latin1编码:
/latinize {
findfont
dup length dict begin
{ 1 index /FID ne {def}{pop pop} ifelse }forall
/Encoding ISOLatin1Encoding def
currentdict
end
definefont pop
}bind def
/HelveLat /Helvetica latinize
/HelveLatbold /Helvetica-Bold latinize
但我真的不喜欢它。
答案 0 :(得分:6)
不是真的或任何简单的“开箱即用”的方式。请参阅this FAQ entry for details。
答案 1 :(得分:2)
这可能适合您的账单,也可能不适合您,但我写的解释器(xpost)使用Cairo的所有图形和字体功能,包括show
。因此,无论开罗提供什么支持,xpost都不会妨碍。但是在你太兴奋之前,这是一个单人项目,并没有完全提供完整的Level-1 Postscript。
编辑:最新版本不支持此功能。 Here是最后一个版本(listing)。
这是show operator本身的C代码。
OPFN_ void show(state *st, object s) {
char str[s.u.c.n+1];
memcpy(str, STR(s), s.u.c.n); str[s.u.c.n] = '\0';
//printf("showing (%s)\n", str);
if (st->cr) {
cairo_show_text(st->cr, str);
cairo_surface_flush(st->surface);
XFlush(st->dis);
}
}
来自Cairo docs:
cairo_show_text()
void cairo_show_text(cairo_t * cr,
const char * utf8);一个绘图操作符,它根据当前的font_face,font_size(font_matrix)和font_options呈现的UTF-8字符串生成形状。
此函数首先计算文本字符串的一组字形。放置第一个字形,使其原点位于当前点。每个后续字形的原点与前一个字形的原点相差前一个字形的前进值。
在此调用之后,当前点将移动到下一个字形将放置在同一进程中的原点。也就是说,当前点将在最终字形的原点处偏移其前进值。这允许通过多次调用cairo_show_text()来轻松显示单个逻辑字符串。
注意:cairo_show_text()函数调用是cairo设计者称之为“玩具”文本API的一部分。它对于简短的演示和简单的程序很方便,但对于严肃的文本使用应用程序来说,预计它不足够。有关cairo中“真实”文本显示API的信息,请参阅cairo_show_glyphs()。
http://www.cairographics.org/manual/cairo-text.html#cairo-show-text
所以这是Postscript中的UTF-8,就像我想的那样! :)