public class PrintQrCode3Test {
public static void main(String[] args) throws Exception {
// 最多3组
List<KeyValue> list = new ArrayList<>();
list.add(KeyValue.generator("80", getStr(28)));
list.add(KeyValue.generator("80", getStr(44)));
list.add(KeyValue.generator("80", getStr(74)));
System.out.println(toHexString(qrCode3Map(list)));
}
public static String getStr(Integer len) {
return StringUtil.leftPad("", len, "zxcvbnmasdfghjklqwertyuiop.:/.:/");
}
public static byte[] qrCode3Map(List<KeyValue> content) {
byte[] byteMerger = new byte[0];
// byte[] init = new byte[]{0x1B, 0x1D, 0x1E, 0x00, 0x0C, 0x04, 0x1B, 0x1D, 0x1F, 0x1B, 0x40};
byte[] init = new byte[]{0x1B, 0x40};
byteMerger = byteMerger(byteMerger, init);
int w = 880;
int h = 380;
int w_pL = w%256;
int w_pH = w/256;
int h_pL = h%256;
int h_pH = h/256;
byte[] start = new byte[]{0x1B,0x4C,0x1B,0x57,0x00,0x00,0x00,0x00,(byte) w_pL,(byte) w_pH,(byte)h_pL,(byte)h_pH,0x0A};
byteMerger = byteMerger(byteMerger, start);
for (int i = 0; i < content.size(); i++) {
String text = content.get(i).getValue();
int size = content.get(i).getKey();
Integer pager = content.get(i).getPager();
int x = (pager*8 / content.size()) * i + 20;
// byte[] crtiPrintAnddot = new byte[]{0x1D, 0x24, 0x00, 0x00, 0x1B, 0x24, (byte) (x % 256), (byte) (x / 256)};
byte[] crtiPrintAnddot = new byte[]{0x1B, 0x24, (byte) (x % 256), (byte) (x / 256)};
byte[] qrcodeSize = new byte[]{29, 40, 107, 3, 0, 49, 67, (byte) size};
byte[] qrcodeData = {29, 40, 107, (byte) ((text.getBytes().length + 3) % 256), (byte) ((text.getBytes().length + 3) / 256), 49, 80, 48};
byte[] qrcodeText = text.getBytes();
byte[] printQrcode = {29, 40, 107, 3, 0, 49, 81, 48};
byteMerger = byteMerger(byteMerger, crtiPrintAnddot);
byteMerger = byteMerger(byteMerger, qrcodeSize);
byteMerger = byteMerger(byteMerger, qrcodeData);
byteMerger = byteMerger(byteMerger, qrcodeText);
byteMerger = byteMerger(byteMerger, printQrcode);
System.out.println(String.format("%s - %s - %s", size, text.length(), text));
}
byte[] end = new byte[]{10, 12, 24, 13};
byteMerger = byteMerger(byteMerger, end);
byte[] oc = new byte[] {0x0A,0x0A,0x0A,0x0A,0x0A,0x0A};
byteMerger = byteMerger(byteMerger, oc);
return byteMerger;
}
public static byte[] byteMerger(byte[] bt1, byte[] bt2) {
byte[] bt3 = new byte[bt1.length + bt2.length];
System.arraycopy(bt1, 0, bt3, 0, bt1.length);
System.arraycopy(bt2, 0, bt3, bt1.length, bt2.length);
return bt3;
}
public static String toHexString(byte[] bytes) {
StringBuilder sb = new StringBuilder();
for(byte b : bytes) {
String hex = Integer.toHexString(b).toUpperCase();
if(hex.length() == 1) {
hex = "0" + hex;
} else if(hex.length() > 2) {
hex = hex.substring(hex.length() - 2);
}
sb.append(hex).append(" ");
}
return sb.toString();
}
public static void printStr(byte[] decode) {
try {
System.out.println(new String(decode, "GB18030"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
static class KeyValue {
private Integer key;
private String value;
private Integer pager;
public KeyValue(Integer key, String value, Integer pager) {
this.key = key;
this.value = value;
this.pager = pager;
}
public static KeyValue generator(String page, String value) {
// 取正整数(9 - 取正整数(85 / 20))
int pager = Integer.parseInt(page);
try {
int x = 0;
if ("58".equals(page)) {
x = 3;
} else if ("80".equals(page)) {
x = 2;
}
int len = value.getBytes("GB2312").length;
Integer key = Math.max((9 - Math.max(((len + x * 20 ) / 20), 0)), 0);
if ("58".equals(page) && len >= 80) {
key = 3;
}
if ("80".equals(page) && len >= 80) {
key = 4;
}
if ("110".equals(page) && len >= 80) {
key = 5;
}
return new KeyValue(key, value, pager);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
return new KeyValue(5, value, pager);
}
}
public Integer getPager() {
return pager;
}
public void setPager(Integer pager) {
this.pager = pager;
}
public Integer getKey() {
return key;
}
public void setKey(Integer key) {
this.key = key;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
}
2021/8/17大约 2 分钟