У меня возникли проблемы с печатью специальных символов (€, £, ¥, ý) на термопринтере EPSON TM-T88V по командам esc/pos. Вот часть коды:Распечатка специальных символов на термопринтере
FPrintoutLines := TStringList.Create;
try
FPrintoutLines.Add(#$1B'@');
FPrintoutLines.Add(#$1B't'#16);
FPrintoutLines.Add('€, £, ¥, ý'+#$A);
Print
finally
FPrintoutLines.Free;
end;
В Windows XP у меня есть правильная распечатка со всеми символами, проблема с Windows 7 и 8.
Я строем StringList с командами, а затем отправить эту строку за строкой к принтеру. Это прекрасно работает для всех других символов и изображений, но не для специальных символов.
Может ли кто-нибудь мне помочь, как я могу печатать эти символы из любой Windows?
Вот код, который печатает строку:
var
vCurrentLine : AnsiString;
begin
...
for i := 0 to FPrintoutLines.Count - 1 do begin
vCurrentLine := AnsiString(FPrintoutLines[i]);
if (PrintRawData(hPrn, PAnsiChar(vCurrentLine), Length(vCurrentLine)) < 0) then begin
log('PrintRawData error', 'NativePrint');
EndRawPrintPage(hPrn);
EndRawPrintJob(hPrn);
Exit;
end;
конца;
Нам нужно угадать, что делает «Печать». Мы также не знаем спецификации команд принтера. Вы проверили, что вы отправляете на принтер, когда считаете его двоичным? Я бы предположил, что вы просто наивно переходите от UTF-16 к локальному ANSI, и беспорядок начинается там. Знаете ли вы, какое двоичное значение вы должны отправлять для этих символов? –
Я добавил код, как отправлять строки на принтер. Нет, я не знаю, и я не могу это проверить. Я понимаю, что проблема в разных кодовых страницах в окнах xp и 7,8. Не могли бы вы рассказать, как я могу построить более универсальную строку? Прежде чем отправлять строки на принтер, я конвертирую его как AnsiString (FPrintoutLines [i]), потому что без него у меня есть совершенно неверная распечатка. –
So. Какие бинарные значения вам нужно передать на принтер? Либо мы читаем руководство, либо вы это делаете. Угадайте, что мы предпочитаем. –