Печать символов Unicode на POS-принтере
Я пытаюсь распечатать языковые символы на POS-принтере. Принтер печатает хорошо, но результат плохой. Вот что я попробовал:
using (MemoryStream ms = new MemoryStream())
using (BinaryWriter bw = new BinaryWriter(ms))
{
bw.Write(AsciiControlChars.Escape);
bw.Write('@');
//ESCCMD.RenderBitmap(bw, logo);
bw.Write("Đây là Tiếng Việt");
bw.Write(AsciiControlChars.Escape);
bw.Write('d');
bw.Write((byte)3);
// Feed 3 vertical motion units and cut the paper with a 1 point uncut
bw.Write(AsciiControlChars.GroupSeparator);
bw.Write(AsciiControlChars.V);
bw.Write((byte)66);
bw.Write((byte)3);
bw.Flush();
RawPrinterHelper.SendToSerialPort(ms.ToArray(), txtPortTest.Text, Convert.ToInt32(cbbBaudRate.SelectedValue));
}
Итак, как я могу напечатать свои языковые символы с помощью команды ESC/POS? Спасибо!
1 ответ
Перед печатью международных символов необходимо проверить, поддерживает ли ваша конкретная модель соответствующую кодовую страницу, а затем установить ее с помощью ESC t
команда. Список поддерживаемых кодовых страниц для принтеров EPSON и информация о синтаксисе команды доступна здесь: https://reference.epson-biz.com/modules/ref_escpos/index.php?content_id=32 (требуется регистрация)
Например, чтобы напечатать греческий (ISO-8859-7) текст, вам нужно сделать что-то вроде этого:
private void PrintGreekIsoText(BinaryWriter bw, string text)
{
// ESC t 15
bw.Write("\x1bt\x15");
// Convert the text to the appropriate encoding
var isoEncoding = Encoding.GetEncoding(28597);
var bytes = Encoding.Unicode.GetBytes(text);
byte[] output = Encoding.Convert(Encoding.Unicode, isoEncoding, bytes);
bw.Write(output);
}