2015-03-26 15 views
0

Я пытаюсь напечатать символы языка на POS-принтере. Принтер хорошо печатает, но результат настолько плох. Это то, что я пробовал:Печать символов Unicode для 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? Большое спасибо!

+0

Что значит результат плохой? Разве что персонажи не написаны должным образом? Затем, пожалуйста, убедитесь, что используемый шрифт поддерживает правильные символы. –

+0

Да @AfzaalAhmadZeeshan! Символы не написаны должным образом, и не существует способа определить семейство шрифтов в команде ESC/POS. Я отправляю строку как необработанные данные на принтер. – HICURIN

+0

Вы уверены, что строковая кодировка правильная? попробуйте преобразовать его в строку Encoding.Unicode –

ответ

0

Перед печатью международных символов вам необходимо проверить, поддерживает ли ваша конкретная модель соответствующую кодовую страницу, а затем задает ее командой 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); 
}