您的位置:首页 > 移动开发 > Android开发

Zebra POS打印机Wifi无线打印方案和Android实现

2016-01-05 11:37 651 查看
前段时间做了一个无线打印的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 strValu
4000
e) {
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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息