Печать символов 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);
}
Другие вопросы по тегам