日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

斑马打印机-RFID打印机 ZT411R最全攻略,从0上手 通过【JAVA生成ZPL指令+ts24.lib+ip:端口】的方式调用打印,无须安装驱动

發布時間:2023/12/9 编程问答 142 豆豆
生活随笔 收集整理的這篇文章主要介紹了 斑马打印机-RFID打印机 ZT411R最全攻略,从0上手 通过【JAVA生成ZPL指令+ts24.lib+ip:端口】的方式调用打印,无须安装驱动 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言:本文如標題所言,主要分享如何通過JAVA調用斑馬的RFID進行打印

1.準備

? ? ? ? 首先得準備好你的RFID打印機、本文實例用得是斑馬ZT411 RFID版。根據打印機操作手冊完成打印機得安裝,其中包括標簽和色帶安裝、以及打印機得配網(推薦配置固定IP)。

下載?斑馬打印機連接工具,方便配置打印機,以及測試ZPL指令

? ? ? ? 下載后根據打印機具體型號選擇安裝相應的驅動方便測試(說明:java中連接打印機是不需要安裝驅動的)

下載?ZebraDesigner for Developers 3 條碼標簽編輯軟件

**下載**?ts24.lib斑馬打印機點陣字體-Java文檔類資源-CSDN下載,無需積分 將下載完的ts24.lib文件放在好記住的位置后文代碼中會使用該文件的地址。?

下載?斑馬打印機ZPL中文指令手冊-Java文檔類資源-CSDN下載?無需積分

2.開始打印

1.打印工具類

import com.szzl.cms.stock.domain.HcBind; import com.szzl.common.utils.DateUtils; import com.szzl.common.utils.StringUtils; import com.szzl.system.service.ISysConfigService; import com.zebra.sdk.comm.*; import com.zebra.sdk.printer.PrinterStatus; import com.zebra.sdk.printer.ZebraPrinter; import com.zebra.sdk.printer.ZebraPrinterFactory; import com.zebra.sdk.printer.ZebraPrinterLanguageUnknownException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;import java.io.*; import java.util.HashMap; import java.util.Map;/*** <p>RFID打印機測試</p>** @author : LIn* @date : 2022-06-17 11:14**/ @Service public class ZplPrinter {@Autowiredprivate ISysConfigService configService;private byte[] dotFont;/*** 標簽模板*/public static String printModel(HcBind hcBind) {ZplPrinter p = new ZplPrinter();StringBuilder begin = new StringBuilder();StringBuilder content = new StringBuilder();// 耗材名稱PrintDataBackDTO name = p.getText("名稱:" + hcBind.getName(), 54, 70);begin.append(name.getBegin());content.append(name.getContent());// 耗材規格PrintDataBackDTO spec = p.getText("規格:" + hcBind.getSpec(), 54, 120);begin.append(spec.getBegin());content.append(spec.getContent());// 廠家PrintDataBackDTO manufacturer = p.getText("廠家:" + hcBind.getManufacturer(), 54, 170);begin.append(manufacturer.getBegin());content.append(manufacturer.getContent());// 批次PrintDataBackDTO batchNo = p.getText("批次:" + hcBind.getBatchNo(), 54, 220);begin.append(batchNo.getBegin());content.append(batchNo.getContent());// 效期PrintDataBackDTO effectDate = p.getText("效期:" + DateUtils.parseDateToStr("yyyy-MM-dd",hcBind.getEffectDate()), 54, 270);begin.append(effectDate.getBegin());content.append(effectDate.getContent());//返回EPC在這里設置 (),,到^FS前可填入參數名稱 "^RS8 ^RFR,H,0,8,E^FN1^FS^HV1,,EPC:^FS" ^RS8,,,1表示這里的1表示只讀一個標簽content.append("^RS8,,,1 ^RFR,H,0,8,E^FN1^FS^HV1,,^FS");// 條形碼content.append("^BY2,3,104^FT791,297^BCN,,Y,N^FH\\^FD>;").append(hcBind.getUniqueCode()).append("^FS");///二維碼content.append("^FT1015,313^BQN,2,5^FH\\^FDLA,").append(hcBind.getUniqueCode()).append("^FS");///EPC打印出來content.append("^FPH,6^FT54,320^AQN,28,9^FN2^FS^FN2^RFR,H,2,16,E^FS");//打印數量content.append("^PQ1,0,1,Y");return begin.toString() + content.toString() + "^XZ";}/*** 打印并獲取Epc*/public Map<String,Object> printGetEpc(HcBind hcBind) throws ConnectionException {String sendStr = printModel(hcBind);String printerIp = configService.selectConfigByKey("rfid.printer.ip");Connection connection = ConnectionBuilder.build("TCP_MULTI:" + printerIp + ":9100:9200");Map<String,Object> map = new HashMap<String, Object>();try {connection.open();//獲得tid指令//String date="^XA^RS8^RFR,H,0,12,E^FN1^FS^HV1,,TID:^FS^XZ";byte[] sendAndWaitForResponse = connection.sendAndWaitForResponse(sendStr.getBytes(),8000,8000,"" );StringBuilder epcBuilder = new StringBuilder();for (byte b : sendAndWaitForResponse) {char c = (char) b;String str = String.valueOf(c);epcBuilder.append(str);}String epc = epcBuilder.toString();//判斷EPC是否為空 并且長度是否為24 這里根據實際標簽信息決定if(StringUtils.isNotEmpty(epc) && epc.length() == 24){map.put("dealState", "success");map.put("epc", epc);}else{map.put("dealState", "error");map.put("dealMsg","獲取標簽RFID失敗,請檢查打印機打印機狀態,并完成RFID校準");}} catch (ConnectionException e) {map.put("dealState", "error");map.put("dealMsg","打印出現異常,請聯系管理員");} finally {connection.close();}return map;}/*** 根據ip獲得打印機狀態* @return* @throws ConnectionException*/public Map<String,Object> getPrinterStatus() throws ConnectionException { // String printerIp = configService.selectConfigByKey("rfid.printer.ip");//打印機連接信息Connection connection = new TcpConnection("192.168.36.95", TcpConnection.DEFAULT_ZPL_TCP_PORT);//返回打印機狀態用Map<String,Object> map = new HashMap<String, Object>();map.put("dealState", "success");try {//打開與打印機的鏈接connection.open();//獲得打印機工廠ZebraPrinter zPrinter = ZebraPrinterFactory.getInstance(connection);// 獲得打印機狀態/**{"isHeadCold":false, 是否過冷"isHeadOpen":false, 是否打開"isHeadTooHot":false, 是否過熱"isPaperOut":false, 是否缺紙"isPartialFormatInProgress":false, 是否正在進行格式化"isPaused":true, 暫停"isReadyToPrint":false, 準備好打印"isReceiveBufferFull":false, 接收緩沖區滿了"isRibbonOut":false, 帶出"labelLengthInDots":1956, 用點標注長度"labelsRemainingInBatch":0, 批號仍在分批"numberOfFormatsInReceiveBuffer":0,接收緩沖區的格式數"printMode":"TEAR_OFF"} 打印模式** **/PrinterStatus currentStatus = zPrinter.getCurrentStatus();map.put("currentStatus", currentStatus);connection.close();} catch (ConnectionException | ZebraPrinterLanguageUnknownException e) {map.put("dealState", "error");map.put("dealMsg", e);} finally {//關閉打印機連接connection.close();}return map;}/*** 構造方法**/public ZplPrinter() {File file = new File("C://ts24.lib");//這里放自己的ts24.lib位置FileInputStream fis;try {fis = new FileInputStream(file);dotFont = new byte[fis.available()];fis.read(dotFont);fis.close();} catch (IOException e) {e.printStackTrace();}}/*** 打印內容** @param str 內容* @param x x坐標* @param y y坐標*/private PrintDataBackDTO getText(String str, int x, int y) {PrintDataBackDTO result = new PrintDataBackDTO();StringBuilder begin = new StringBuilder();begin.append("^XA~SD25^PW1146^PR1,1");StringBuilder content = new StringBuilder();byte[] ch = str2bytes(str);for (int off = 0; off < ch.length; ) {if (((int) ch[off] & 0x00ff) >= 0xA0) {try {//中文字符int qcode = ch[off] & 0xff;int wcode = ch[off + 1] & 0xff;content.append(String.format("^FO%d,%d^XG0000%01X%01X,%d,%d^FS\n", x, y, qcode, wcode, 1, 1));begin.append(String.format("~DG0000%02X%02X,00072,003,\n", qcode, wcode));qcode = (qcode + 128 - 32) & 0x00ff;wcode = (wcode + 128 - 32) & 0x00ff;int offset = (qcode - 16) * 94 * 72 + (wcode - 1) * 72;for (int j = 0; j < 72; j += 3) {qcode = (int) dotFont[j + offset] & 0x00ff;wcode = (int) dotFont[j + offset + 1] & 0x00ff;int qcode1 = (int) dotFont[j + offset + 2] & 0x00ff;begin.append(String.format("%02X%02X%02X\n", qcode, wcode, qcode1));}x = x + 24;off = off + 2;} catch (Exception e) {//替換成X號content.append(getChar("X", x, y, 30, 20));x = x + 15;off = off + 2;}} else if (((int) ch[off] & 0x00FF) < 0xA0) {content.append(getChar(String.format("%c", ch[off]), x, y, 30, 20));x = x + 15;off++;}}result.setBegin(begin);result.setContent(content);return result;}/*** 英文字符串(包含數字)** @param str 英文字符串* @param x x坐標* @param y y坐標* @param h 高度* @param w 寬度*/private String getChar(String str, int x, int y, int h, int w) {return "^FO" + x + "," + y + "^A0," + h + "," + w + "^FD" + str + "^FS";}/*** 字符串轉byte[]*/private byte[] str2bytes(String s) {if (null == s || "".equals(s)) {return null;}byte[] abytes = null;try {abytes = s.getBytes("gb2312");} catch (UnsupportedEncodingException ex) {System.out.println("字符串轉byte出錯");}return abytes;} } //調用示例 Map<String, Object> printResult = zplPrinter.printGetEpc(hcBind);

2.打印對象根據需求自定義printModel方法

3.使用ZebraDesigner 3 for Developers生成.prn文件,用記事本打開,拷貝后 打開Zebra Setup Utilities

?打開后拷入ZPL指令

?點擊 【發送到打印機】按鈕 即可測試打印

4.調好的位置信息根據需求放入printModel方法中

總結

以上是生活随笔為你收集整理的斑马打印机-RFID打印机 ZT411R最全攻略,从0上手 通过【JAVA生成ZPL指令+ts24.lib+ip:端口】的方式调用打印,无须安装驱动的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。