Как генерировать тексты в файлы postscript из объекта Canvas библиотеки Tcl/Tk?

Я застрял на этой проблеме в течение нескольких дней: я пытаюсь сгенерировать тексты из объекта холста, используя его опцию «постскриптум», чтобы получить файл .ps. Я обнаружил, что он отлично работал, если я рисовал линии, овалы и т. д. на холсте, и они отображались в файле .ps, однако мне не везло с текстовыми объектами — даже если они отображались на холсте (на дисплее). ), не были захвачены в выходной файл .ps.

У кого-нибудь есть мысли по этому поводу? Можно предположить, что все переменные хорошо определены.

wm geometry . +0+0
wm resizable . false false
set wtitle "Drawing Chinese Character"
frame .frm -width $pad_width -height $pad_height -relief raised -bd 2
canvas .p0 -width $pad_width -height $pad_height -relief raised -bd 0 
.p0 create rectangle 0 0 $pad_width $pad_height -outline gray -fill white -width 0 
.p0 create text $akx $aky -text "\u9177" -font -Adobe-Times-Bold-R-Normal-*-$fontsize-*  
.p0 create line 0 0 $pad_width $pad_height -fill red -width 2 -arrow last
pack .p0 -in .frm -fill both
pack .frm -side bottom 

update;
.p0 postscript -fontmap fontMap -file "char.ps"

person galactica    schedule 25.09.2010    source источник
comment
Какую версию ТК вы используете?   -  person Donal Fellows    schedule 28.09.2010


Ответы (1)


Проблема в том, что обработка многих символов UNICODE в сгенерированной кодировке неполная (ошибка!). В частности, символ \u9177 не определен (в mkpsenc.tcl в каталоге вашей библиотеки установки Tk) и код для вывода текста все равно не обрабатывает эти вещи правильно.

Более того, сделать что-то с этим очень сложно, потому что за пределами основного латинского алфавита возникает необходимость позаботиться о сопоставлении между глифами и символами. Мы приветствуем вклад кода, чтобы исправить это, но это сложно. (Было бы очень хорошо, если бы мы могли отказаться от всей этой сложности и просто отправить UTF-8 на принтер; это бы решило проблемы с нашей точки зрения за один раз. Но я не знаю, возможно ли это в общем случае. )

Боюсь, это не тот ответ, который вы хотели.

person Donal Fellows    schedule 03.10.2010
comment
Спасибо, что ответили мне с подробными объяснениями! Я был вынужден переключиться на Java для решения. Казалось, что Java лучше обрабатывает Unicode. - person galactica; 04.10.2010
comment
Ну, они потратили больше денег на эту (по общему признанию, очень сложную) проблему. - person Donal Fellows; 05.10.2010
comment
Моя проблема заключалась в том, что (1) Tk сгенерировал имя шрифта в плохом регистре как DejavuSans вместо DejaVuSans, (2) имя глифа в DejaVuSans не соответствовало сопоставлению в mkpsenc («uni2081» в шрифте по сравнению с «oneinferior» в отображении). Используйте ttx для отладки. - person alexei; 19.05.2013