2008-11-06 26 views
9

Có anyway để sử dụng chuỗi unicode (có lẽ hầu hết trong UTF-8, nhưng có thể được bất kỳ mã hóa) trong PostScript?unicode trong postscript

Cho đến nay, tôi đã sử dụng chức năng này để biến đổi phông chữ để mã hóa 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 

nhưng tôi thực sự không thích nó.

Trả lời

6

Không thực sự hoặc trong bất kỳ cách đơn giản nào "ngoài hộp". Xem this FAQ entry for details.

+0

tks, nó thực sự khó xử, và một cái gì đó plaftorm phụ thuộc (trên đầu trang của font phụ thuộc); nhưng cho đến nay nó là bước duy nhất đúng hướng tôi đã nhìn thấy – Javier

2

Điều này có thể hoặc không phù hợp với hóa đơn của bạn, nhưng thông dịch viên tôi viết (xpost) sử dụng Cairo cho tất cả các chức năng đồ họa và phông chữ, bao gồm show. Vì vậy, bất cứ sự hỗ trợ nào mà Cairo cung cấp, xpost không cản trở. Nhưng trước khi bạn quá phấn khích, đó là một dự án một người, và chưa hoàn toàn cung cấp đầy đủ Postscript 1-Level.

Chỉnh sửa: Phiên bản mới nhất không hỗ trợ tính năng này. Here là phiên bản cuối cùng đã thực hiện (listing).


Đây là mã C của tôi cho chính nhà điều hành chương trình.

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); 
    } 
} 

Và từ Cairo docs:

cairo_show_text()

trống cairo_show_text (cairo_t * cr,
const char * utf8);

Toán tử vẽ tạo hình dạng từ chuỗi ký tự UTF-8, được hiển thị theo font_face hiện tại, font_size (font_matrix) và font_options.

Chức năng này trước tiên tính toán một bộ glyph cho chuỗi văn bản. Glyph đầu tiên được đặt để nguồn gốc của nó là tại điểm hiện tại. Nguồn gốc của mỗi glyph tiếp theo được bù đắp từ đó của glyph trước đó bởi các giá trị trước của glyph trước đó.

Sau cuộc gọi này, điểm hiện tại được di chuyển đến nguồn gốc của hình chữ nhật tiếp theo sẽ được đặt trong cùng tiến trình này. Nghĩa là, điểm hiện tại sẽ ở gốc của giá trị bù trừ glyph cuối cùng bởi các giá trị trước của nó. Điều này cho phép hiển thị dễ dàng một chuỗi lôgic đơn với nhiều cuộc gọi đến cairo_show_text().

Lưu ý: Cuộc gọi hàm cairo_show_text() là một phần của những gì nhà thiết kế cairo gọi API văn bản "đồ chơi". Nó rất thuận tiện cho các bản demo ngắn và các chương trình đơn giản, nhưng nó không được dự kiến ​​là đủ cho các ứng dụng sử dụng văn bản nghiêm trọng. Xem cairo_show_glyphs() cho API hiển thị văn bản "thực" trong cairo.

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

Vì vậy, nó là UTF-8 trong Postscript, gần như tôi có thể hình dung! :)

+0

tốt, đó là tốt đẹp; nhưng chỉ có nghĩa là xpost giả định văn bản là UTF-8 (một lựa chọn tốt!).Nó không giúp tôi sử dụng văn bản Unicode trong các tài liệu PS sẽ chuyển sang máy in (hoặc được chưng cất thành PDF) – Javier

+0

Tôi đã trông đợi một nửa là nhiều. :( –