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打印机实际支持的参数范围。