安卓蓝牙打印

2018-09-13  本文已影响0人  键盘小蟲

最近公司特卖会在国际博览中心开展,由于场地没有网络只能采用PDA收银,连接蓝牙打印机打印小票。PDA使用的安卓系统,连接打印机有两种方式:

手持POS和打印机都是采购的斑马设备

PDA 使用的是TC25

打印机使用的是EZ320

由于本次只接触了蓝牙连接方式,所以这里只记录一下蓝牙打印实现的过程。

首先获取已配对的蓝牙设备

获取所有已配对的蓝牙设备,从中找到打印设备,并获取Mac地址。关键代码如下:


private static String findPrinterMac()throws Exception {
    BluetoothAdapter defaultAdapter = BluetoothAdapter.getDefaultAdapter();
    if (defaultAdapter ==null){
        throw new Exception("本机不支持蓝牙功能");
    }
    if(!defaultAdapter.isEnabled()){
        throw new Exception("请检查蓝牙功能是否打开");
    }
    Set bondedDevices = defaultAdapter.getBondedDevices();
    for (BluetoothDevice bond:bondedDevices) {
        // 如果设置是打印机设备
        if (bond.getBluetoothClass().getMajorDeviceClass() == BluetoothClass.Device.Major.IMAGING){
            // 返回设备的Mac地址
            return bond.getAddress();
        }
    }
    return null;
}

根据mac地址连接打印机

拿到mac地址就好办,调用斑马的sdk提供的连接方式,连接到打印机。


/**
  * 连接打印机
  * @return
  */

private static ZebraPrinter connect()throws Exception {
    String macAddress =findPrinterMac();
    if (macAddress ==null){
        throw new Exception("未找到蓝牙打印机");
    }
    printerConnection =null;
    printerConnection =new BluetoothConnection(macAddress);
    try {
        printerConnection.open();
    }catch (ConnectionException e) {
        disconnect();
        System.out.println(e.getMessage());
        throw new Exception("打印机连接失败");
    }

    ZebraPrinter printer =null;
    if (printerConnection.isConnected()) {
        try {
            printer = ZebraPrinterFactory.getInstance(printerConnection);
        }catch (ConnectionException e) {
            printer =null;
            System.out.println("打印机连接失败:"+e.getMessage());
            disconnect();
            throw e;
        }catch (ZebraPrinterLanguageUnknownException e) {
            printer =null;
            System.out.println("获取打印机语言失败:"+e.getMessage());
            disconnect();
            throw e;
        }
    }
    return printer;
}

打印

连接连接成功后就可以调起打印功能了,首先要看打印机支持的语言。打印机指令语言分为两种,ZPL和CPCL。这两种语言的中文文档非常少,有空了我把整理的中文文档一起发出来。EZ320默认使用的是CPCL语言,编写起来比ZPL稍微简单一点。

! U1 JOURNAL 打印开始
! U1 PAGE-WIDTH 600 设置页面宽度
! U1 SPEED 2 设置打印速度
! U1 ENCODING UTF-8 设置编码格式
! U1 LMARGIN 0 设置偏移量(距离左边)
! U1 SETLP GBUNSG24.CPF 0 24 设置字库(有些字库需要购买)
! U1 PCX 0 0 !<LOGO.PCX 打印图片(我们公司的logo)
! U1 SETBOLD 1 设置粗体
! U1 B 128 1 1 50 0 0 123456 打印条形码
PRINT 不要忘记

以上是行模式打印的指令,比定位模式简单多了。最后发一张实际打印的效果图。


小票
上一篇下一篇

猜你喜欢

热点阅读