ESC/POS 二维码命令仅打印内容
ESC/POS commands for QR prints only the content
我正在尝试在自定义 VKP 打印机上打印二维码。打印机支持二维码。我向它发送 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, 0x28, 0x6b, 0x03, 0x00, 0x31, 0x43, 0x64};
byte[] FUNC_169 = new byte[]{Commands.GS, 0x28, 0x6b, 0x03, 0x00, 0x31, 0x45, 0x48};
byte[] FUNC_180 = new byte[]{Commands.GS, 0x28, 0x6b, store_pL, store_pH, 0x31, 0x50, 0x30};
byte[] FUNC_181 = new byte[]{Commands.GS, 0x28, 0x6b, 0x03, 0x00, 0x31, 0x51, 0x48};
byte[] FUNC_182 = new byte[]{Commands.GS, 0x28, 0x6b, 0x03, 0x00, 0x31, 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 打印机的正确参数?
我无法判断,因为我没有自定义 VKP 打印机的 ESC/POS 命令参考。
- 从数值上看,我好像是在尝试打印微二维码,打印机支持吗?
- 模块尺寸指定了一些未知值,但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, 0x28, 0x6b, 0x03, 0x00, 0x31, 0x43, 0x03};
byte[] FUNC_169 = new byte[]{Commands.GS, 0x28, 0x6b, 0x03, 0x00, 0x31, 0x45, 0x30};
byte[] FUNC_180 = new byte[]{Commands.GS, 0x28, 0x6b, store_pL, store_pH, 0x31, 0x50, 0x30};
byte[] FUNC_181 = new byte[]{Commands.GS, 0x28, 0x6b, 0x03, 0x00, 0x31, 0x51, 0x30};
byte[] FUNC_182 = new byte[]{Commands.GS, 0x28, 0x6b, 0x03, 0x00, 0x31, 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打印机实际支持的参数范围。
我正在尝试在自定义 VKP 打印机上打印二维码。打印机支持二维码。我向它发送 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, 0x28, 0x6b, 0x03, 0x00, 0x31, 0x43, 0x64};
byte[] FUNC_169 = new byte[]{Commands.GS, 0x28, 0x6b, 0x03, 0x00, 0x31, 0x45, 0x48};
byte[] FUNC_180 = new byte[]{Commands.GS, 0x28, 0x6b, store_pL, store_pH, 0x31, 0x50, 0x30};
byte[] FUNC_181 = new byte[]{Commands.GS, 0x28, 0x6b, 0x03, 0x00, 0x31, 0x51, 0x48};
byte[] FUNC_182 = new byte[]{Commands.GS, 0x28, 0x6b, 0x03, 0x00, 0x31, 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 打印机的正确参数?
我无法判断,因为我没有自定义 VKP 打印机的 ESC/POS 命令参考。
- 从数值上看,我好像是在尝试打印微二维码,打印机支持吗?
- 模块尺寸指定了一些未知值,但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, 0x28, 0x6b, 0x03, 0x00, 0x31, 0x43, 0x03};
byte[] FUNC_169 = new byte[]{Commands.GS, 0x28, 0x6b, 0x03, 0x00, 0x31, 0x45, 0x30};
byte[] FUNC_180 = new byte[]{Commands.GS, 0x28, 0x6b, store_pL, store_pH, 0x31, 0x50, 0x30};
byte[] FUNC_181 = new byte[]{Commands.GS, 0x28, 0x6b, 0x03, 0x00, 0x31, 0x51, 0x30};
byte[] FUNC_182 = new byte[]{Commands.GS, 0x28, 0x6b, 0x03, 0x00, 0x31, 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打印机实际支持的参数范围。