我正在使用QZ托盘使用ESC / P(不是ESC / POS)打印机9pin [1]进行原始打印。
基本上,一切正常,直到必须设置绝对水平位置(ESC $)。

问题与[2]相同,但示例使用Java,QS托盘使用JavaScript作为示例[3],并使用十六进制转义序列(\ xFF)[4]声明所有命令,字符范围为0-255(\ x00) -\ xFF)。

这是有关问题的详细信息:


在9针ESC / P中设置绝对水平位置[1]

ASCII: ESC $ nL nH
Hex:   1B 24 nL nH
0 <= nH <= 127
0 <= nL <= 255

如果nL值介于0到127之间,则可以毫无问题地将数据发送到QZ托盘。

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

]


如果'\ x80'+'\ x00'不正确,如何使用十六进制转义序列表示字符128?
我尝试使用JavaScript类型的数组Uint8Array和Uint16Array,但未成功打印,我认为这是因为ESC / P协议希望将其用作字符(数组)。


我尝试搜索QZ组和stackoverflow,但是很难找到正确的关键字。

任何帮助,将不胜感激。谢谢。

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

[2] ESC/P Set Absolute Horizontal Print Position

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

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

最佳答案

为了帮助这个人,
基本上我从qz打印邮件列表中得到了答案,
这是一个已知的错误。
(但是很难找到关键字,因为它与原始编码错误有关)。

最简单的解决方案(原始打印),添加编码ISO-8859-1,因此它不会使用UTF-8(将字符128-255设为2个字节)。

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


另一个解决方案是使用十六进制格式的原始打印。
[1] https://qz.io/wiki/2.0-Raw-Printing#hex

这是邮件列表上的讨论:
[2] https://groups.google.com/forum/#!topic/qz-print/TE0D-wsRDRg

以下是有关该错误的讨论:
[3] https://groups.google.com/forum/#!topic/qz-print/r3VGPDaYKKE

最后一个,这是github问题,如果您想在某天跟踪它已解决。
[4] https://github.com/qzind/tray/issues/155

09-18 16:42