分享

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

 quasiceo 2016-08-25
    前段时间做了一个无线打印的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;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

打印文字:

/**
     *
     * @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;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

打印条形码(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;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

结束指令:

private static String lableEnd_ZPL(){
        String strBarCode = "^XZ" ;

        return strBarCode;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5
        - 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;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

打印文字:

/**
     * @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;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

打印条形码:

/**
     * @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;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

打印二维码:

/**
     * @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)



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约