JAVA对接斑马打印机打印RFID标签和普通标签
1、打印RFID标签
在打印RFID标签时,如果机器在没有校准的情况下进行打印标签,此时如果还需要获取到RFID的epc值,那么打印机返回的EPC值,有可能不是当前标签的epc值。考虑到此种情形,我们采用zpl命令进行控制打印机打印:命令包含写入EPC,同时包含返回EPC值。用写入的epc是否等于返回的epc,加以校验,从而避免这种情况的发生。以下用zt411型号验证过的代码
所需第三方jar:
ZSDK_API.jar 斑马打印机sdk
ts24.lib 字体库
在程序启动时,首先加载字体库:
private byte[] dotFont;
......
/**
* 构造方法 加载中文字体支持
*/
public ZplPrinter() {
String currentp = System.getProperty("user.dir");
String tspath = currentp + File.separator + "lib" + File.separator + "ts24.lib";
File file = new File(tspath);
log.info("the path of ts24.lib is == " + tspath);
FileInputStream fis;
try {
fis = new FileInputStream(file);
dotFont = new byte[fis.available()];
fis.read(dotFont);
fis.close();
} catch (IOException e) {
log.error(e.getMessage(), e);
}
}
拼接ZPL命令:
private String getRFIDZPL(MaterialInfo m) {
StringBuilder sb = new StringBuilder("^XA^CW1,E:HEITI.TTF^FS^CI28");// 字体
String fontsize = "^A1N,30,30";// 字体大小
int x = 150;
int y = 70;
int step = 40;
// 商品名称
String str = "名称:" + m.getProductName();
sb.append(fontsize);
sb.append("^FO" + x + "," + (y + step) + "^FD" + str + "^FS");
// 商品编码
str = "编码:" + m.getProductCode();
sb.append(fontsize);
sb.append("^FO" + x + "," + (y + 2 * step) + "^FD" + str + "^FS");
// 商品规格
str = "规格:" + m.getSpecifications();
sb.append(fontsize);
sb.append("^FO" + x + "," + (y + 3 * step) + "^FD" + str + "^FS");
// 商品批次
str = "批次:" + m.getBatchNumber();
sb.append(fontsize);
sb.append("^FO" + x + "," + (y + 4 * step) + "^FD" + str + "^FS");
// 商品效期
str = "效期:" + m.getExpiredDate();
sb.append(fontsize);
sb.append("^FO" + x + "," + (y + 5 * step) + "^FD" + str + "^FS");
// 商品生产厂家
str = "供应商:" + m.getSupplier();
sb.append(fontsize);
sb.append("^FO" + x + "," + (y + 6 * step) + "^FD" + str + "^FS");
String writec = "^RS8^RFW,H,1,2,1^FD3400^FS^RFW,H,2,12,1^FD" + m.getRfidCode() + "^FS";
sb.append(writec);
// 条形码
sb.append("^BY3,3,60^FT150,70^BCN,50,Y,N^FD>:").append(m.getBarCode()).append("^FS");
/// 二维码
sb.append("^FT520,270^BQN,2,7^FH\\^FDLA,").append(m.getBarCode()).append("^FS");
sb.append("^RS8,,,1 ^RFR,H,0,8,E^FN1^FS^HV1,,^FS");
// 打印数量
sb.append("^PQ1,0,1,Y");
// 结束标识
sb.append("^XZ");
return sb.toString();
连接打印机,发送打印请求:
public void printRFID(String printerip, MaterialInfo m) throws Exception {
Connection connection = ConnectionBuilder.build("TCP_MULTI:" + printerip + ":9100:9200");
Integer timeout = 8000;
Date date = new Date();
try {
connection.open();
if (StringUtils.isBlank(m.getBarCode())) {
String barcode = customerService.createSPDUniqueCode();// 自动生成spd唯一码
m.setBarCode(barcode)<