如何解决QR的ESC / POS命令仅打印内容
我正在尝试在Custom VKP打印机上打印QR码。打印机支持QR码。我向其发送ESC / POS命令,但打印的只是文本而不是QR码。以下是我在Java
中的代码:
String content = "Hello !!";
int store_len = content.length() + 3;
byte store_pL = (byte) (store_len % 256);
byte store_pH = (byte) (store_len / 256);
byte ESC = 0x1b;
byte[] INIT = new byte[]{ESC,'@'};
byte[] CUT = new byte[]{0x0c};
byte[] FUNC_165 = new byte[]{Commands.GS,0x28,0x6b,0x04,0x00,0x31,0x41,0x51,0x00};
byte[] FUNC_167 = new byte[]{Commands.GS,0x03,0x43,0x64};
byte[] FUNC_169 = new byte[]{Commands.GS,0x45,0x48};
byte[] FUNC_180 = new byte[]{Commands.GS,store_pL,store_pH,0x50,0x30};
byte[] FUNC_181 = new byte[]{Commands.GS,0x48};
byte[] FUNC_182 = new byte[]{Commands.GS,0x52,0x48};
ByteArrayOutputStream writer = new ByteArrayOutputStream();
writer.write(INIT);
writer.write(FUNC_165);
writer.write(FUNC_167);
writer.write(FUNC_169);
writer.write(FUNC_180);
writer.write(content.getBytes());
writer.write(FUNC_181);
writer.write(FUNC_182);
writer.write(CUT);
writer.close();
输出为QHello !!
。
我在这里做错了什么。任何帮助表示赞赏。
解决方法
如果在EPSON中引用这些页面,则写入其中的参数的数字为十进制,而不是十六进制。
GS ( k <Function 165>
GS ( k <Function 167>
GS ( k <Function 169>
GS ( k <Function 180>
GS ( k <Function 181>
GS ( k <Function 182>
这是定制VKP打印机的正确参数吗?
我无法判断,因为我没有Custom VKP打印机的ESC / POS命令参考。
- 从数值看,我似乎正在尝试打印Micro QR Code,是否支持该打印机?
- 为模块大小指定了一些未知值,但EPSON在1到16的范围内。默认值为3。
- 并且由于FUNC_182是用于通知条形码的打印尺寸的功能,因此在打印后调用它毫无意义。
假设打印机支持MicroQRCode打印,命令创建部分将如下所示:
byte[] FUNC_165 = new byte[]{Commands.GS,0x28,0x6b,0x04,0x00,0x31,0x41,0x33,0x00};
byte[] FUNC_167 = new byte[]{Commands.GS,0x03,0x43,0x03};
byte[] FUNC_169 = new byte[]{Commands.GS,0x45,0x30};
byte[] FUNC_180 = new byte[]{Commands.GS,store_pL,store_pH,0x50,0x30};
byte[] FUNC_181 = new byte[]{Commands.GS,0x51,0x30};
byte[] FUNC_182 = new byte[]{Commands.GS,0x52,0x30};
- 尽管当前内容没有问题,但实际上将数据长度指定为字节数组的长度,而不是字符串的长度。
所以第一部分是:
String content = "Hello !!";
byte[] content_bytes = content.getBytes(StandardCharsets.US_ASCII)
int store_len = content_bytes.length + 3;
byte store_pL = (byte) (store_len % 256);
byte store_pH = (byte) (store_len / 256);
实际写作会是这样吗?:
writer.write(INIT);
writer.write(FUNC_165);
writer.write(FUNC_167);
writer.write(FUNC_169);
writer.write(FUNC_180);
writer.write(content_bytes);
writer.write(FUNC_181);
writer.write(CUT);
writer.close();
请尝试将其调整到Custom VKP打印机实际支持的参数范围。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。