Code128码打印---ZPL语言 By Sue
使用斑马打印机专门的打印命令ZPL语言进行VIN码打印 1. 斑马打印机驱动的设置
(1)使用的打印纸大概为------6.5cm*1.3cm (2)设置Paper Size的大小为6.5cm*1.3cm-----使用的是用户自定义大小
(3)设置打印的浓度 Printer Darkness 为10(默认为10)---可使用打印命令^MD16设置打印浓度
(4)设置Printer Actions 设置如下所示,具体作用不是很清楚
2. ZPL命令简单使用
(1) ^XA 和^XZ 是开始和结束标记
(2) ^MD30 设置色带颜色的深度,取值范围从-30到30,30为最深颜色深度
(3) ^LH 设置条码纸的边距
(4) ^FO 设置条码左上角的位置,0,0 代表完全不留边距
(5) ^ACN是设置字体的. 因为在条码下方会显示该条码的内容, 所以这里要设一下字体. 这个字体跟条码无关.
^Afo,h,w
(6)^BY是设置条码样式
^BY命令的格式: 改变条码默认参数
^Byw,r,h
w 模块(窄条)宽 开机初始化值:2点 可接受的数值:1-10点
r 宽条与窄条的比例 开机初始化值:,.0 可接受的数值:,.0到3.0,,.1的增量(对固定比例的条码无效) 效)
h 条码高度 开机初始化值:,,点 可接受的数值:,点到标签高度
(7)^BC是打印code128的指令
(8)^FD设置要打印的内容, ^FS表示换行.
(9)^XG命令用于调用一个或多个要进行打印的图形图像
(10)~DGd:o.x,t,w,data
3. VIN(17位)条形码打印------使用ZPL语言即命令来实现Zebra打印机打印条形码 (1)使用ZPL语言实现打印,下面是实现函数ZebraPrint package cn.edu.hust.mes.client.utils;
import java.io.File;
import java.io.FileInputStream;
import javax.print.Doc;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintException; import javax.print.PrintService;
import javax.print.PrintServiceLookup; import javax.print.SimpleDoc;
public class ZebraPrint {
byte[] dotfont;
String s_prt = \"^XA,^MD16\
//^XA打印开始标志 ^MD打印浓度为30 ^ABN,30,30设置字体大小
// 长,宽
public static void main(String[] args) {
try {
ZebraPrint a = new ZebraPrint();
a.setCommand(\"LNBMDLAA1CR023837\");
String str = a.getCommand();
System.out.println(str);
a.print(str );
} catch (Exception e) {
e.printStackTrace();
}
}
public ZebraPrint() throws Exception {
File file = new File(System.getProperty(\"user.dir\")+\"\\\\src\\\\resources\\\s24.lib\");
FileInputStream fis = new FileInputStream(file);
dotfont = new byte[fis.available()];
fis.read(dotfont);
fis.close();
}
public void setCommand(String barcode) {
//String barcode = \"ABCD1234567890123\";
//printBarcode(barcode, 30, 60,60);
// printBarcode(barcode, 30, 60);
printBarcode(barcode, 100, 40); //打印之后能够正确扫描
//printBarcode(barcode,100,100);
}
public void setCommand(String barcode,int x, int y,int fontX,int fontY,int thinBarcode,int
times,int height) {
//String barcode = \"ABCD1234567890123\";
//printBarcode(barcode, 30, 60,60);
// printBarcode(barcode, 30, 60);
printBarcode(barcode,x,y,fontX,fontY,thinBarcode,times,height); //打印之后能够正确扫描
//printBarcode(barcode,100,100);
}
public String getCommand() {
return s_prt + s_prt_buffer+\"^XZ\";
//^XZ 打印结束
}
public void print(String str) throws PrintException {
PrintService psZebra = PrintServiceLookup.lookupDefaultPrintService();
if (psZebra == null) {
System.out.println(\"没有发现条码打印机.\");
return;
}
DocPrintJob job = psZebra.createPrintJob();
byte[] by = str.getBytes();
DocFlavor flavor = DocFlavor.BYTE_ARRAY.AUTOSENSE;
Doc doc = new SimpleDoc(by, flavor, null);
job.print(doc, null);
}
/**
* 打印条形码
* @param barcode 字符串
* @param xx x坐标
* @param yy y坐标
* @param fontX 字体高度 单位:dots
* @param fontY 字体宽度
* @param thinBarcode 窄条宽度 单位:dots 可接受的数值:1-10点
* @param times 宽条与窄条的比例 可接受的数值:,.0到3.0,,.1的增量(对固定比例的条码无效)
* @param height 高度 可接受的数值:,点到标签高度
*/
protected void printBarcode(String barcode,int x, int y,int fontX,int fontY,int thinBarcode,int
times,int height) {
System.out.println(barcode);
// s_prt_buffer += \"^BY3^FS^FO\"+x+\\"\\n\";
s_prt_buffer +=
\"^FO\"+x+\,\"+height+\"^BCN,,
Y,N^FD\" + barcode + \"\\n\";
}
protected void printBarcode(String barcode,int x, int y) {
System.out.println(barcode);
// s_prt_buffer += \"^BY3^FS^FO\"+x+\
\"\\n\";
s_prt_buffer += \"^FO\"+x+\+ barcode +
\"\\n\";
// s_prt_buffer += \"^FO\"+x+\\"^FS\";
// s_prt_buffer +=
\"^FO\"+x+\\";
/*
*
^XA
^FO90,200^BY4
^BCN,256,Y,N,Y,N
^FD>;>80012345123451234512^FS
^XZ
^FO 设置条码位置
^FD设置要打印的内容, ^FS表示换行
^BY命令的格式: 改变条码默认参数
^Byw,r,h
w 模块(窄条)宽 开机初始化值:2点 可
接受的数值:1-10点
r 宽条与窄条的比例 开机初始化值:,.0 可接受的
数值:,.0到3.0,,.1的增量(对固定比例的条码无效)
h 条码高度 开机初始化值:,,点 可接受的数
值:,点到标签高度
*/
}
}
(2)上面的s24.lib包需要添加-----放在项目下(需要注意路径问题)
(3)下面的ZPL函数能够在6.5*1.3cm的纸张下打印出条形码长度与注释长度等宽
条形码和注释等宽:VIN码长度为17位
^XA,^MD16^FO100,40^A5N,30,33^BY4,3,150^BCN,,Y,N^FDLNBMDLAA1CR023837
^XZ
Sue remarks:在调整条形码和注释等宽的时候,当字体类型和大小很难调整,达到要求
时,可以考虑调整宽条与窄条的比例
因篇幅问题不能全部显示,请点此查看更多更全内容