我正在打印一些QR码(来自Ruby脚本),将ESC / POS命令写入Epson TM-T20热敏打印机 .
顺便说一句,我正在编写一个简单的ESC / POS命令打印机“驱动程序” . 打印机我正在使用Epson TM-T20(USB接口)我正在使用serialport gem从Windows 7主机进行一些测试 .
所有关于为打印格式化文本和线性条形码编写ESC / POS命令都很好,但我有问题了解打印QR码的命令协议,使用Epson提供的唯一可用文档(据我所知),请参阅:http://www.novopos.ch/client/EPSON/TM-T20/TM-T20_eng_qr.pdf
现在,关于QRCodes命令的部分对我来说非常模糊,我无法解释所请求的字节序列;相反,我发现Nicolas在这里找到的例子很有帮助:https://code.google.com/p/python-escpos/wiki/Usage
黑客攻击有用的字节码示例,我能够成功打印QR码,请参阅:
我https://twitter.com/solyarisoftware/status/464740233008132096
然而,一般来说,我对ESC / POS消息格式感到困惑,特别是如果我在QR码内插入一条长文本消息(> 400个字符)......似乎打印机拒绝(不打印)QR使用此代码包含超过400个字符的代码:
def test_qrcode (printer, text, print_also_text=false, qr_size=6.chr)
s = text.size + 3
lsb = (s % 256).chr
msb = (s / 256).chr
# https://code.google.com/p/python-escpos/wiki/Usage
escpos = ""
escpos << "\x1D\x28\x6B\x03\x00\x31\x43#{qr_size}"
escpos << "\x1D\x28\x6B\x03\x00\x31\x45\x33"
escpos << "\x1D\x28\x6B#{lsb}#{msb}\x31\x50\x30"
escpos << text #
escpos << "\x1D\x28\x6B\x03\x00\x31\x51\x30"
# writing byte streams directly to the serial port
printer.write escpos
end
有人可以建议关于ESC / POS命令(=字节码序列)的CLEAR ESC / POS DOCUMENTATION来打印QRCodes(二维码ESC / POS命令)吗?
3 回答
我在ESC / POS命令集中找到的最完整的文档就是这个:http://content.epson.de/fileadmin/content/files/RSD/downloads/escpos.pdf
最近,我将QR码功能添加到POS客户端 . 我发现打印出这个Code page 437 reference是非常有用的,特别是对于调试打印的序列 .
我的例子是Java,但你可以得到这个想法:
我不熟悉ESC / POS,但我对QR码有一些经验 .
如果您在QR码中输入的字符数量达到上限,则QR码设计中可能存在四种固有的因素:
您可以控制纠错数据的数量 . 更多纠错意味着更大的QR码,但更可靠的扫描 .
QR码必须是方形的,这样您可能会遇到打印机固件的“最大宽度”和“最小QR码像素大小”限制 .
QR码在"versions"中定义,每个版本代表一系列尺寸(版本越高,QR码越大) . 您的打印机固件可能不支持超过特定数量的版本 .
QR码支持四种不同的编码,每种编码具有不同的数据限制(数字,字母数字,二进制和汉字) .
这意味着你应该:
检查您正在进行多少纠错 . (从大多数情况到最低级别,级别为
H
,Q
,M
和L
) . 您可能会发现较低级别的错误纠正仍然可以提供足够的可靠性,同时允许您挤入更多数据 .检查规格,看看是否可以要求更小的QR码像素,以便更宽的代码适合纸张 .
检查打印机支持的最高QR码版本 .
检查您正在使用的数据编码 .
如果您达到约400个字符的限制,则最大版本应该在
8-13
范围内的数字,11-17
表示字母数字,13-21
表示二进制,具体取决于所使用的纠错级别 . (见前面我联系的reference table)这是在ESC / POS: