esc/pos命令只打印内容

mfpqipee  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(366)

我想在定制的vkp打印机上打印二维码。打印机支持二维码。我向它发送esc/pos命令,但打印的只是文本而不是二维码。下面是我的代码 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 !! .
我做错什么了。感谢您的帮助。

vvppvyoh

vvppvyoh1#

如果您在epson中引用这些页面,则其中写入的参数的数字是十进制的,而不是十六进制的。
gs(k<函数165>
gs(k<函数167>
gs(k<函数169>
gs(k<函数180>
gs(k<函数181>
gs(k<函数182>
还是自定义vkp打印机的正确参数?
我无法判断,因为我没有自定义vkp打印机的esc/pos命令参考。
从数值上看,好像我在试着打印微qr码,打印机支持吗?
为模块大小指定了一些未知值,但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();

请尝试将其调整为自定义vkp打印机实际支持的参数范围。

相关问题