Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.14;
Скачать: [xml.tar.bz2];




Вниз

Печать из дельфи документов в 866 кодировке с псевдографикой 


Alexxx   (2002-01-29 15:19) [0]

Проблема в следующем: при печати из Дельфи документов, созданных в 866 кодировке канва принтера, а точнее Printer.Canvas.Font не хочет дружить с OEM_CHARSET.
Перекодировка OEMTOANSI ничего не дает в силу того, что все символы псевдографики (рамки и т.п.) начинают отображаться плюсиками и тому подобными знаками, что не соответствует условиям задачи. Буду признателен за любую помощь, проблема появилась как всегда неожиданно и в самое неудачное время :(



panov   (2002-01-29 15:23) [1]

используй собственную таблицу перекодировки, в которой псевдографику заменяй на символы, которые тебе нужны...



Alexxx   (2002-01-29 15:30) [2]

А откуда взять эти символы ?
Для Courier New шрифта, например, эти символы содержатся только в OEM_CHARSET.



panov   (2002-01-29 15:32) [3]

Можно попробовать шрифт "terminal" использовать, только я не уверен, что любой принтер будет их поддерживать...



Alexxx   (2002-01-29 15:36) [4]

Терминал не подходит - у него вообще единственный charset - это OEM_CHARSET, к тому же он растровый, а не TT :(((



panov   (2002-01-29 15:42) [5]

Еще вариант - отрисовывать самому, но задача, конечно, не из тех, что вдохновляют...



Alexxx   (2002-01-29 15:43) [6]

Вот и я о том же... :(((
Просто есть надежда, что есть способ проще :-)



Alexxx   (2002-01-29 16:27) [7]

???



Alexxx   (2002-01-29 17:19) [8]

????



valery_f   (2002-01-29 17:58) [9]

Сейчас посмотрел - курьер сию псевдографику имеет (символы начиная с $2500), правда в списке кодовых страниц шрифта сие не значится (что характерно :) Чтобы их напечатать прийдется юзать TextOutW с указанием двухбайтового кода символов (unicode). Если что - пиши, кину пример.



Alexxx   (2002-01-29 18:06) [10]

К слову, опять же - он ее и 866 странице имеет, только это не спасает :(((



Alexxx   (2002-01-30 11:57) [11]

?



valery_f   (2002-01-30 12:42) [12]

Я так понял - пример не помог? На чем споткнулся?



Alexxx   (2002-01-30 13:09) [13]

Попробовать не успел, если честно, но в примере у тебя вывод не на принтер, а как на принтере это будет выглядеть ?
Просто на канве он в любой кодировке нормально печатает, а вот с принтером гемморой начинается :((



valery_f   (2002-01-30 14:17) [14]

Какая разница - принтер или нет? Canvas - и в Африке Canvas :) Только что отправил на печать бо-о-ольшущий иероглиф - работает:

procedure TForm1.Button1Click(Sender: TObject);
var s: widestring; c: widechar; p: ^word;
begin
Printer.PrinterIndex := 2; //это у меня сетевой принтер
Printer.BeginDoc;
s := " "; p := @c;
p^ := $512F; //код иероглифа
s[1] := c;
Printer.Canvas.Font.Name := "Arial Unicode MS";
Printer.Canvas.Font.Size := 48;
TextOutW(Printer.Canvas.Handle,100,100,PWideChar(s),1);
Printer.EndDoc;
end;



Alexxx   (2002-01-30 14:56) [15]

Разница есть.
Иначе бы и textOut срабатывал.
Но все равно попробую, спасибо.



valery_f   (2002-01-30 15:48) [16]

Только не textOut, а TextOutW. TextOut использует активную кодовую страницу и к спец. символам через нее не доберешься. А TextOutW работает с юникодом (двухбайтные символы) и страницы ей пополам - лишь бы указанный символ в шрифте присутствовал.



Alexxx   (2002-01-30 16:29) [17]

Но для канвы изображения ведь срабатывает.
То есть
Image1.Canvas.Font.Name:="Courier New";
Image1.Canvas.Font.Charset:=OEM_CHARSET;
Image1.Canvas.TextOut(1,1,"Всякая псевдографика");

печатается нормально, а как только Image1 меняем на Printer - все. никаких шрифтов мы не понимаем со всеми вытекающими.
Единственное - твой пример с Unicode получился, но это же тоже тот еще выход... :(((



AlexKniga   (2002-01-30 20:21) [18]

Принтер шрифт Тerminal понимает?
То есть:
1) Открываем в Word"e текст с псевдографикой как "text only", не "text DOS". {символы с номером > 128 отобразяться не правильно}
2) Выделяем всё. Меняем шрифт Courer на Terminal. {всё выглядит OK} Если в Word"e доступны только TT, делаешь через Excel.
3) Отправляем на печать.

Смотрим результат.
Если он плачевный
то нужен Unicode
иначе печатаем Terminal"ом;





Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.14;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.74 MB
Время: 0.02 c
1-42744           AlexanderSK           2002-01-30 17:40  2002.02.14  
TRichEdit


3-42654           Do№                   2002-01-16 22:02  2002.02.14  
Как игнорировать ошибку при открытии БД


14-42840          veZuk                 2001-12-24 21:56  2002.02.14  
Media


14-42851          Knight                2001-12-22 11:59  2002.02.14  
Решил подарочек сделать маме... Вопросик возник!


1-42809           myportal              2002-01-30 17:29  2002.02.14  
CLX