Gio*_*ino 10 ruby printing qr-code barcode zebra-printers
我正在打印一些QR码(来自Ruby脚本),将ESC/POS命令写入Epson TM-T20热敏打印机.
顺便说一下,我正在编写一个简单的ESC/POS命令打印机"驱动程序".打印机我正在使用Epson TM-T20(USB接口)我正在使用serialport gem从Windows 7主机进行一些测试.
所有关于为打印格式文本和线性条形码编写ESC/POS命令都很好,但是我在使用Epson提供的唯一可用文档(据我所知)打印QR CODES时遇到问题,请参阅:http: //www.novopos.ch/client/EPSON/TM-T20/TM-T20_eng_qr.pdf
现在,关于QRCodes命令的部分对我来说非常模糊,我无法解释所请求的字节序列; 相反,我发现非常有用的Nicolas我在这里找到的例子:https://code.google.com/p/python-escpos/wiki/Usage
黑客那个有用的字节码示例,我能够成功打印二维码,请参阅:
我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
Run Code Online (Sandbox Code Playgroud)
有人可以建议关于ESC/POS命令(=字节码序列)的CLEAR ESC/POS DOCUMENTATION来打印QRCodes(二维码ESC/POS命令)吗?
Jos*_*rra 12
我在ESC/POS命令集中找到的最完整的文档就是这个:http: //content.epson.de/fileadmin/content/files/RSD/downloads/escpos.pdf
最近,我将QR码功能添加到POS客户端.我发现从这个代码页437引用打印出来非常有用,特别是对于调试打印的序列.
我的例子是Java,但你可以得到这个想法:
public void print_qr_code(String qrdata)
{
int store_len = qrdata.length() + 3;
byte store_pL = (byte) (store_len % 256);
byte store_pH = (byte) (store_len / 256);
// QR Code: Select the model
// Hex 1D 28 6B 04 00 31 41 n1(x32) n2(x00) - size of model
// set n1 [49 x31, model 1] [50 x32, model 2] [51 x33, micro qr code]
// https://reference.epson-biz.com/modules/ref_escpos/index.php?content_id=140
byte[] modelQR = {(byte)0x1d, (byte)0x28, (byte)0x6b, (byte)0x04, (byte)0x00, (byte)0x31, (byte)0x41, (byte)0x32, (byte)0x00};
// QR Code: Set the size of module
// Hex 1D 28 6B 03 00 31 43 n
// n depends on the printer
// https://reference.epson-biz.com/modules/ref_escpos/index.php?content_id=141
byte[] sizeQR = {(byte)0x1d, (byte)0x28, (byte)0x6b, (byte)0x03, (byte)0x00, (byte)0x31, (byte)0x43, (byte)0x03};
// Hex 1D 28 6B 03 00 31 45 n
// Set n for error correction [48 x30 -> 7%] [49 x31-> 15%] [50 x32 -> 25%] [51 x33 -> 30%]
// https://reference.epson-biz.com/modules/ref_escpos/index.php?content_id=142
byte[] errorQR = {(byte)0x1d, (byte)0x28, (byte)0x6b, (byte)0x03, (byte)0x00, (byte)0x31, (byte)0x45, (byte)0x31};
// QR Code: Store the data in the symbol storage area
// Hex 1D 28 6B pL pH 31 50 30 d1...dk
// https://reference.epson-biz.com/modules/ref_escpos/index.php?content_id=143
// 1D 28 6B pL pH cn(49->x31) fn(80->x50) m(48->x30) d1…dk
byte[] storeQR = {(byte)0x1d, (byte)0x28, (byte)0x6b, store_pL, store_pH, (byte)0x31, (byte)0x50, (byte)0x30};
// QR Code: Print the symbol data in the symbol storage area
// Hex 1D 28 6B 03 00 31 51 m
// https://reference.epson-biz.com/modules/ref_escpos/index.php?content_id=144
byte[] printQR = {(byte)0x1d, (byte)0x28, (byte)0x6b, (byte)0x03, (byte)0x00, (byte)0x31, (byte)0x51, (byte)0x30};
// flush() runs the print job and clears out the print buffer
flush();
// write() simply appends the data to the buffer
write(modelQR);
write(sizeQR);
write(errorQR);
write(storeQR);
write(qrdata.getBytes());
write(printQR);
flush();
}
Run Code Online (Sandbox Code Playgroud)
我不熟悉 ESC/POS,但我对二维码有一些经验。
如果您达到了 QR 码中可以输入的字符数上限,则 QR 码设计中固有的四个因素可能会导致该问题:
您可以控制纠错数据的数量。更多纠错意味着二维码更大,但扫描更可靠。
QR 码必须是方形的,因此您可能会遇到打印机固件的“最大宽度”和“最小 QR 码像素大小”限制。
QR 码按“版本”定义,每个版本代表一定的大小范围(版本越高,QR 码越大)。您的打印机固件可能不支持高于特定数字的版本。
QR 码支持四种不同的编码,每种编码具有不同的数据限制(数字、字母数字、二进制和汉字)。
这意味着您应该:
检查您投入了多少错误纠正。(从最多到最少,级别为H、Q、M和L)。您可能会发现较低级别的纠错仍然可以为您提供足够的可靠性,同时允许您压缩更多数据。
检查规格,看看是否可以要求更小的 QR 码像素,以便在纸张上适合更宽的代码。
检查您的打印机支持的最高 QR 码版本是什么。
检查您正在使用哪种数据编码。
如果达到 400 个字符左右的限制,则最大版本应该在8-13数字、11-17字母数字和13-21二进制范围内,具体取决于所使用的纠错级别。(参见我之前链接的参考表)
| 归档时间: |
|
| 查看次数: |
26851 次 |
| 最近记录: |