2008-11-06 15 views
9

反正在PostScript中使用unicode字符串(很可能是UTF-8,但可以是任何編碼)嗎?後記中的unicode

到目前爲止,我一直在使用此功能轉換字體到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 

,但我真的不喜歡它。

回答

6

並非真的或以任何簡單的「開箱即用」方式。請參閱this FAQ entry for details

+0

tks,這真的很尷尬,和一些依賴plaftorm(取決於字體);但到目前爲止,這是我看到的 – Javier 2009-05-28 14:29:09

2

這可能會也可能不適合您的賬單,但我寫的解釋器(xpost)使用Cairo的所有圖形和字體功能,包括show。因此,無論開羅提供什麼支持,xpost都不會妨礙。但在你太激動之前,這是一個單人項目,並且還不完全提供完整的Level-1 Postscript。

編輯:最新的版本不支持這個。 Here是最後一個版本(listing)。


這是我的演示操作符本身的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()

空隙cairo_show_text(cairo_t * CR,
常量字符* UTF8);

一個繪圖操作符,它根據當前font_face,font_size(font_matrix)和font_options呈現的字符串生成UTF-8字符的形狀。

該函數首先計算一串文字的字形。第一個字形被放置,以便它的原點位於當前點。每個後續字形的原點與先前字形的原點偏移了前一個字形的前進值。

在此調用之後,當前點將移動到下一個字形將放置在相同進程中的位置。也就是說,當前點將位於最終字形偏移量的前端值的原點處。這允許通過多次調用cairo_show_text()來輕鬆顯示單個邏輯字符串。

注意:cairo_show_text()函數調用是開羅設計人員稱之爲「玩具」文本API的一部分。對於簡短的演示和簡單的程序來說很方便,但對於認真使用文本的應用程序來說,它並不足夠。請參閱cairo_show_glyphs()以瞭解cairo中的「真實」文本顯示API。

http://www.cairographics.org/manual/cairo-text.html#cairo-show-text

所以這是UTF-8在後記,近,我可以計算! :)

+0

正確方向上唯一的一步,那很好;但僅意味着xpost假設文本是UTF-8(一個不錯的選擇!)。它不會幫助我在PS文檔中使用Unicode文本,這些文本將轉到打印機(或者被蒸餾成PDF) – Javier 2012-09-21 22:11:13