之前接到一个任务,要利用斑马打印机打印,在网上找了好多种方式,包括利用官方jdk,还有各种复杂的方式。发现不仅麻烦,有些方法还打印不了中文。最后发现一种超级简单的方式。
直接用Socket接口,通过IP和端口发送zpl指令。
注意:要转换成UTP8字节流的方式发送,不然打印机无法识别中文。
import java.io.OutputStream;
import java.net.Socket;
public class ZebraPrinterExampleWithChinese {
public static void main(String[] args) {
String printerIp = "192.168.1.100"; // 替换为你的打印机IP地址
int printerPort = 9100; // 替换为你的打印机端口号
String labelContent = "这是一个中文标签^FS"; // 包含中文的文本
try (Socket socket = new Socket(printerIp, printerPort);
OutputStream out = socket.getOutputStream()) {
// ZPL 指令示例,设置字体并打印中文文本
// 这里假设你使用的是支持中文的字体,比如"Zebra Chinese Font"
String zplCommand = "^XA" // 开始标签
+ "^FO50,50" // 设置打印位置
+ "^A0N,50,50" // 选择字体、大小和方向
+ ",20,20" // 字体宽度、高度
+ "^FD" +"这是一个测试"+ "^FS" // 打印中文文本
+ "^XZ"; // 结束标签
// 发送ZPL指令到打印机
out.write(zplCommand.getBytes("UTF-8")); // 使用UTF-8编码
out.flush();
System.out.println("打印指令已发送。");
} catch (Exception e) {
e.printStackTrace();
System.out.println("打印指令发送失败。");
}
}
}
当然以上只是一个简单的zpl测试
这是我在实际项目中zpl指令
^XA^LL1024
^CW1,E:MSUNG.FNT^FS
^BY2,1,40^FT40,41^FO40,50^BCN,40,N,N,N^FD{lfid}^FS
^CI17^F8^FO40,100^A1N,30,20^FD{lfid}^FS
^FO470,53^BQN,2,3^FDQA,{物料编码}^FS
^CI17^F8^FO40,140^A1N,30,20^FD物料编码:{物料编码}^FS
^CI17^F8^FO40,170^A1N,30,20^FD物料名称:{物料名称}^FS
^CI17^F8^FO40,200^A1N,30,20^FD数量:{数量} 产线: LPN:{LPN}^FS
^CI17^F8^FO40,230^A1N,30,20^FD供应商代码:{供应商代码} {公司}^FS
^CI17^F8^FO40,260^A1N,30,20^FD订单号:{订单号} {开放数量}^FS
^XZ
我利用String.replace("{XXX}","XXXX"),将内容替换成指定的参数
这是我在实际中的效果
关于该zpl命令的简单介绍
^XA // 开始新的标签
^LL1024 // 设置标签长度为1024点
^CW1,E:MSUNG.FNT^FS // 加载名为"MSUNG.FNT"的自定义字体,宽度为1,并结束字段
^BY2,1,40 // 设置条形码类型为Code 128,高度为1,宽度为40点
^FT40,41 // 设置文本位置为x=40, y=41
^FO40,50 // 设置字段的原点位置为x=40, y=50
^BCN,40,N,N,N // 打印Code 128条形码,高度为40点,不使用人类可读文本、不检查校验位、不截断
^FD{lfid} // 设置要打印的数据为"{lfid}",这是一个占位符,实际打印时会被替换
^FS // 结束当前字段
^CI17 // 选择字体17
^F8 // 设置打印比例为8(即放大8倍)
^FO40,100 // 设置字段的原点位置为x=40, y=100
^A1N,30,20 // 设置字体A,大小为30点,正常方向
^FD{lfid} // 打印数据"{lfid}"
^FS // 结束当前字段
// 下面的代码段类似地设置了多个文本字段的位置和内容
^FO470,53 // 设置字段的原点位置
^BQN,2,3 // 打印二维码,使用字体Q,大小为2,错误级别为3
^FDQA,{物料编码} // 设置二维码数据为"QA,{物料编码}"
^FS // 结束当前字段
// ... (其他字段设置和打印指令)
^XZ // 结束标签
这里推荐一个方便调试zpl的网址:
不用感谢我,我是活雷锋