前段时间做了一个无线打印的Android App,打印机用的是Zebra的 QL 220(移动打印机)和GX 430t(桌面打印机)。这里给大家分享一下具体实现方法。
调用打印机用的是Zebra提供的ZSDK_ANDROID_API。此jar需要大家自己去网上下载,我忘记下载地址了,如果需要可以给我留言,我单独发给你们。
在实现打印前需要先配置好环境:准备好可用的Zebra打印机(可支持CPCL或ZPL打印指令),连上局域网,Android设备与打印机需在同一个局域网内。蓝牙打印与Wifi打印类似,
下面是具体实现:
1.创建连接
connection = new TcpConnection(PRINT_IP, PRINT_PORT);
PRINT_IP:打印机对应的IP
PRINT_PORT:打印机端口,可以在打印机上面查看。
2.打开连接并且创建打印机实例(ZebraPrinterFactory是ZSDK_ANDROID_API.jar提供)。
connection.open();
ZebraPrinter printer = ZebraPrinterFactory.getInstance(connection);
3.获取打印机控制语言(一般为CPCL或ZPL)
PrinterLanguage pl = printer.getPrinterControlLanguage();
针对不同的语言编写对应的打印指令,下面简单介绍一下语法:
- ZPL(Zebra桌面打印机一般都支持)
开始指令:
/**
* ^XA 指令块的开始
* ^MD 设置色带颜色的深度,取值范围从-30到30,上面的示意指令将颜色调到了最深.
* ^LH 设置条码纸的边距的.
* ^CF 改变字符字体默认字体
*/
private static String lableStart_ZPL(int md,int x,int y){
String strLable="^XA"+"^CF0,15,7"+ "^MD"+String.valueOf(md)+ "^LH"+String.valueOf(x)+","+String.valueOf(y);
return strLable;
}
打印文字:
/**
*
* @param x 起始水平坐标
* @param y 起始垂直坐标
* @param strValue 内容
* @return
*/
private static String printText_ZPL(int x,int y,String strValue) {
String strText = "^FO"+String.valueOf(x)+","+String.valueOf(y)+
"^AD" +
"^FD"+ strValue + "^FS";
return strText;
}
打印条形码(Code128):
/**
* ^FO20,10 ^FO是设置条码左上角的位置的,0,0代表完全不留边距.
* ^ACN,18,10 ^ACN是设置字体的.因为在条码下方会显示该条码的内容,所以要设一下字体.这个跟条码无关.
* ^BY1.4,3,50 ^BY是设置条码样式的,1.4是条码的缩放级别,3是条码中粗细柱的比例,50是条码高度.
* ^BCN,,Y,N ^BC是打印code128的指令,具体参数详见ZPL的说明书(百度云盘)
* ^FD01008D004Q-0^FS ^FD设置要打印的内容, ^FS表示换行.
*/
private static String printCode128_ZPL(int x,int y,int height,String strValue){
String strBarCode = "^FO"+String.valueOf(x)+","+String.valueOf(y)+
"^BC"+"N"+","+String.valueOf(height)+",N,N,N" +
"^FD" + strValue + "^FS";
return strBarCode;
}
结束指令:
private static String lableEnd_ZPL(){
String strBarCode = "^XZ" ;
return strBarCode;
}
- CPCL(Zebra移动打印机一般都支持)
开始指令:
/**
* @param offset 偏移
* @param Horizontal 水平尺寸
* @param Vertical 垂直尺寸
* @param height 高度
* @param qty 数量
* @return
*/
private static String lableStart(double offset,float Horizontal,float Vertical,double height,int qty){
String strLable="!"+" "+String.valueOf(offset)+" "+String.valueOf(Horizontal)+" "+
String.valueOf(Vertical)+" "+String.valueOf(height)+" "+String.valueOf(qty);
return strLable;
}
打印文字:
/**
* @param font 字体
* @param size 字号
* @param x 起始水平坐标
* @param y 起始垂直坐标
* @param strValue 内容
* @return
*/
private static String printText(int font, double size, double x, double y,String strValue) {
String strText = "VT" + " " + String.valueOf(font) + " "
+ String.valueOf(size) + " " + String.valueOf(x) + " "
+ String.valueOf(y) + " " + strValue;
return strText;
}
打印条形码:
/**
* @param type 条码字体类型(例如:39,128,UPCA,UPCE,EAN13,EAN8,I2OF5,UCCEAN128,MSI,POSTNET,FIM)
* @param width 条码宽度
* @param ratio 宽窄比(例如:0 = 1.5 : 1,1 = 2.0 : 1,20 = 2.0:1,30 = 3.0:1)
* @param height 高度
* @param x 起始水平坐标
* @param y 起始垂直坐标
* @param strValue 内容
* @return
*/
private static String printBarCode(String type,int width,int ratio,int height,int x,int y,String strValue){
String strBarCode = "VB" + " "+type+ " "+ String.valueOf(width) + " "
+ String.valueOf(ratio) + " " +String.valueOf(height) + " " + String.valueOf(x) + " "
+ String.valueOf(y) + " " + strValue;
return strBarCode;
}
打印二维码:
/**
* @param x 起始水平坐标
* @param y 起始垂直坐标
* @param strValue 内容
* @return
*/
private static String printQRCode(int x,int y,String strValue){
/**
* M: QR code model No.Range is 1 or 2.Default is 2.
* U: Unit-width/Unit-height of the module.Range is 1 to 32.Default is 6.
* "M" is the error correction parameter (L=Low, M=Medium, Q=Medium High, H=High)
* "0" is the mask pattern
* "A" is the mode conversion (A=Auto, M=Manual)
*/
String strWrap="\r\n";
String strBarCode = "VB" + " QR " + String.valueOf(x) + " " + String.valueOf(y) + " M 2 "+ " U 4 "+strWrap+"M0A,"+ strValue + strWrap+"ENDQR";
return strBarCode;
}
4.向打印机发送打印指令
printer.sendCommand(ConfigLabel);
5.不要忘记关闭连接。
connection.close();
这些是主要的语法,还有一些细节控制没有在这里写出我将上传源码,有需要的人可以自行下载研究。
下载地址:[连接POS打印机使用ZPL和CPCL指令打印类](http://download.csdn.net/detail/h072056218/9390530)