使用页模式打印多个二维码
2021/4/10大约 2 分钟
使用页模式打印多个二维码
可能会在使用页模式前出现停顿,页模式要先把指令编好,再打印。
步骤:
1、开始页模式
2、页模式偏移量
3、设置二维码大小
4、设置二维码错误纠错等级
5、传输数据至编码缓存(打印二维码数据)
6、打印编码缓存中的二维条码
打印多个:继续 2-6 步骤
7、打印页模式数据,关闭页模式
开始页模式
/**
* 0x00,0x00,0x00,0x00 是打印区域左上角
* w,h 定义的是打印区域的右下角
* w 是页模式内容区域的宽,单位dot 1mm=8dot
* h 是页模式内容区域的高,单位dot
*/
public byte[] crtiPageStartn(int w,int h) {
int w_pL = w%256;
int w_pH = w/256;
int h_pL = h%256;
int h_pH = h/256;
byte[] bytes = new byte[]{0x1B,0x4C,0x1B,0x57,0x00,0x00,0x00,0x00,(byte) w_pL,(byte) w_pH,(byte)h_pL,(byte)h_pH};
return bytes;
}
横向打印二维码
打印二维码要定义每一个二维码左上角的位置,即偏移量。
/** 页模式偏移量,单位dot */
public byte[] crtiPrintAnddot(int x) {
int x_s = x % 256;
int y_s = x / 256;
//1B 24 3c 00 --1B 24 nL nH 设置绝对打印位置LabelNowX
//1D 24 00 00 --1D 24 nL nH 页模式下设置纵向绝对位置LabelNowY
byte[] bytes = new byte[]{0x1B, 0x24, (byte)x_s, (byte)y_s, 0x1D, 0x24, 0x00, 0x00};
return bytes;
}
/** 二维码大小 1-9 */
public byte[] setQrcodeSize(int size) {
byte[] bytes = new byte[]{29, 40, 107, 3, 0, 49, 67, (byte) size};
return bytes;
}
/**
* 设置二维码错误纠错等级
* @param 48 <= n <= 51,纠正比例(7,15,25,30)%
*/
public byte[] setQrcodeErrorCorrectionLevel(byte n) {
byte[] bytes = {29, 40, 107, 3, 0, 49, 69, n};
return bytes;
}
/**
* 传输数据至编码缓存
*/
public byte[] setQrcodeData(String text) {
byte[] bytes = {29, 40, 107, (byte) ((text.getBytes().length + 3) % 256), (byte) ((text.getBytes().length + 3) / 256), 49, 80, 48};
bytes = byteMerger(bytes, text.getBytes("GB18030"));
return bytes;
}
/**
* 打印编码缓存中的二维条码
*/
public byte[] setPrintQrcode() {
byte[] bytes = {29, 40, 107, 3, 0, 49, 81, 48};
return bytes;
}
/**
* 合并字节数组
*/
public byte[] byteMerger(byte[] byte_1, byte[] byte_2) {
byte[] byte_3 = new byte[byte_1.length + byte_2.length];
System.arraycopy(byte_1, 0, byte_3, 0, byte_1.length);
System.arraycopy(byte_2, 0, byte_3, byte_1.length, byte_2.length);
return byte_3;
}
关闭页模式
/** 结束页模式 */
public byte[] crtiPageEnd() {
byte[] bytes = new byte[]{10, 12, 24, 13};
return bytes;
}