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)
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories