Unicode在PostScript中的应用

11
有没有办法在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

但我真的不喜欢它。

2个回答

6
并不是以任何简单的“开箱即用”的方式实现。详见此FAQ条目

谢谢,这确实很尴尬,而且还与平台相关(除了字体相关);但到目前为止,这是我看到的唯一朝着正确方向迈出的一步。 - Javier

2
这可能符合您的要求,但我编写的解释器(xpost)使用Cairo进行所有图形和字体功能,包括show。因此,无论Cairo提供什么支持,xpost都不会妨碍它。但在您过于兴奋之前,需要注意的是,这是一个单人项目,还没有完全实现Level-1 Postscript。

编辑:最新版本不支持此功能。 这里 是最后一个支持此功能的版本(列表)。


这是我的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_show_text()是一个绘图操作符,用于根据当前的字体、字号(字体矩阵)和字体选项生成一组UTF-8字符的形状。该函数首先计算出字符串文本的一组字形。第一个字形被放置在当前点的原点处。每个后续字形的原点都与前一个字形的原点偏移其先前字形的推进值。在调用此函数后,当前点将移动到在同一进度中放置下一个字形的原点处。也就是说,当前点将位于最终字形的原点,其偏移值为其推进值。这使得可以通过对cairo_show_text()进行多次调用来轻松地显示单个逻辑字符串。请注意:cairo_show_text()函数调用是cairo设计师所称的“玩具”文本API的一部分。它对于短演示和简单程序很方便,但不适合严肃的文本使用应用程序。有关cairo中“真正”的文本显示API,请参见cairo_show_glyphs()。

所以根据我所理解的,这是Postscript中的UTF-8编码! :)


很好,但这只意味着xpost假定文本是UTF-8编码(一个不错的选择!)。它并不能帮助我在PS文档中使用Unicode文本,这些文档将被发送到打印机(或被转换为PDF)。 - Javier

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接