Как записать шестнадцатеричную escape-последовательность размером более 7 бит (7F) в массиве JavaScript, чтобы правильно интерпретировать принтер ESC/P?

Я работаю с QZ-лотком, чтобы сделать необработанную печать на принтере ESC/P (не ESC/POS) 9pin [1]. В основном все работает нормально, пока я не установлю абсолютную горизонтальную позицию (ESC $).

проблема та же с [2], но он использует Java и QZ tray, используя JavaScript для своего примера [3], и объявляет все команды, используя шестнадцатеричную escape-последовательность (\xFF) [4], символы от 0 до 255 (\x00) - \xFF).

вот подробно о проблеме:

  1. установить абсолютное горизонтальное положение в 9-контактном ESC/P [1]

    ASCII: ESC $ nL nH
    Hex:   1B 24 nL nH  
    0 <= nH <= 127
    0 <= nL <= 255
    
  2. отправлять данные в лоток QZ без проблем, если значение nL от 0 до 127.

    var data = [
        '\x1B' + '\x40',                    // init
    
        '\x1B' + '\x24' + '\x10' + '\x00',  // set horizontal
        '0x10' + '\x0D' + '\x0A',           // print position ok
    
        '\x1B' + '\x24' + '\x7F' + '\x00',  // set horizontal
        '0x7F' + '\x0D' + '\x0A',           // print position ok
    
        '\x1B' + '\x24' + '\x80' + '\x00',  // set horizontal
        '0x80' + '\x0D' + '\x0A',           // print position PROBLEM
    
        '\x1B' + '\x24' + '\x00' + '\x01',  // set horizontal
        '1x00' + '\x0D' + '\x0A',           // print position ok
    
    ]
    

    как представить символ 128 с помощью шестнадцатеричной escape-последовательности, если '\x80' + '\x00' было неверным?

  3. Я пытался использовать типизированный массив JavaScript Uint8Array и Uint16Array, но печать не удалась, я думаю, это потому, что протокол ESC / P хочет использовать его как символы (массив).

Я попытался выполнить поиск по группам QZ и stackru, но довольно сложно найти правильное ключевое слово.

любая помощь будет оценена. благодарю вас.

[1] https://files.support.epson.com/pdf/general/escp2ref.pdf

[2] ESC / P Установить абсолютную горизонтальную позицию печати

[3] https://qz.io/wiki/2.0-raw-printing

[4] https://mathiasbynens.be/notes/javascript-escapes

2 ответа

Чтобы помочь кому-то с этой проблемой, в основном я получил ответ из списка рассылки qz-print, это известные ошибки. (но было бы трудно найти ключевое слово, потому что оно связано с необработанной ошибкой кодирования).

самое простое решение для этого (необработанная печать) с добавленной кодировкой ISO-8859-1, чтобы не использовать UTF-8 (который делает символ 128-255 2 байтами).

var config = qz.configs.create(printer, {encoding: 'ISO-8859-1'});

Еще одно решение для этого - использовать print raw в шестнадцатеричном формате. [1] https://qz.io/wiki/2.0-Raw-Printing

вот обсуждение в списке рассылки: [2] https://groups.google.com/forum/

вот обсуждение ранее об ошибке: [3] https://groups.google.com/forum/

и наконец, вот проблема github, если вы хотите отследить ее, когда-нибудь она будет решена. [4] https://github.com/qzind/tray/issues/155

Сила ISO-8859-1 кодирование и использование необработанной шестнадцатеричной записи объекта.

var config = qz.configs.create(printer, {encoding: 'ISO-8859-1'});

var data = [
   '...',
   '\x1B' + '\x24' + '\x80' + '\x00',  // set horizontal

   ///// RAW HEX OBJECT NOTATION /////
   { type: 'raw', format: 'hex', data: 'x80x0Dx0A' } 
   //'0x80' + '\x0D' + '\x0A',           // print position PROBLEM

   '\x1B' + '\x24' + '\x00' + '\x01',  // set horizontal
   '1x00' + '\x0D' + '\x0A',           // print position ok
   '...',
]

Обратите внимание, что это тот же общий ответ, который был предложен @oon-arfiandwi, но напечатан в коде.

Другие вопросы по тегам