使用JavaScript向打印机发送十六进制命令

使用JavaScript向打印机发送十六进制命令,javascript,printing,hex,Javascript,Printing,Hex,我正在尝试向收据打印机发送ESC序列,以触发现金抽屉打开。我是Javascript的新手,所以我只想检查一下我做得是否正确。打印机/现金抽屉没有任何问题,尽管我可能发送了错误的代码序列。 我知道抽屉确实打开了,因为我可以使用打印机测试软件触发它打开 下面是Javascript var windowUrl = 'about:blank'; var uniqueName = new Date(); var windowName = 'CloseTillPrint' + uniqueName.

我正在尝试向收据打印机发送ESC序列,以触发现金抽屉打开。我是Javascript的新手,所以我只想检查一下我做得是否正确。打印机/现金抽屉没有任何问题,尽管我可能发送了错误的代码序列。 我知道抽屉确实打开了,因为我可以使用打印机测试软件触发它打开

下面是Javascript

var windowUrl = 'about:blank';
var uniqueName = new Date();    
var windowName = 'CloseTillPrint' + uniqueName.getTime();
var PrintWindow = window.open(windowUrl, windowName, 'left=300,top=100,width=200,height=900');      

PrintWindow.document.open('text/plain')

PrintWindow.document.write(0x1B); 
PrintWindow.document.write(0x70);
PrintWindow.document.write(0x30); 
PrintWindow.document.write(0x37); 
PrintWindow.document.write(0x79);
PrintWindow.document.close();
PrintWindow.focus();
PrintWindow.print();
PrintWindow.close();    
如果你能确认我在上面的代码中没有犯任何错误,我会假设我发送了错误的十六进制序列。
谢谢

您打印的是数字,而不是字符。使用此命令而不是写入命令:

PrintWindow.document.write(String.fromCharCode(0x1B, 0x70, 0x30, 0x37, 0x79));

谢谢你的意见,但我认为这是不对的。当我按照你的建议做时,我会在收据的底部打印出字符。另外,当我从charcode搜索你的命令时,我检查了这个页面,这证实了我所说的。是的,你得到了字符。更具体地说,这是:p07y,但第一个字符0x1b是十进制的27,即转义键的ascii码。当你的密码打印27时,我的密码发送了实际的转义字符。我不知道我的建议是否有效,但你只是简单地打印了号码:271124855121。你能给我指一下收据打印机的文档吗?也许我能弄明白。我得到的字符与您提到的p07y相同,它们实际上作为文本出现在打印输出的底部。。关于手册,它比没用还糟糕。这是一个中国进口的客户。我听说它使用了Epson TM-T88的命令集。我相信我现在有了正确的代码,只是因为某种原因我无法将它们送到打印机上。这是我现在使用的命令PrintWindow.document.writeString.fromCharCode0x1B、0x70、0x00、0x19、0xFA;我怀疑问题在于你不是真的在发送转义序列,而是在发送转义序列的打印输出。打印机测试软件打开到打印机的直接线路,然后发送转义序列。但向打印机发送打印作业,即使打印作业包含转义序列,也是完全不同的。使用JS实现这一点的唯一方法是让JavaScript从服务器请求资源,然后让服务器运行打开抽屉的命令。