uni-app 蓝牙打印, CPCL指令集使用

先上代码:

GitHub - byc233518/uniapp-bluetooth-printer-demo: 使用uniApp 连接蓝牙打印机 Demo, CPCL 指令简单实用示例

(内含 芝珂,佳博,精臣 多个厂家指令集使用文档)

文件结构:


├── App.vue 
├── CPCL 指令手册.pdf  // 指令集参考手册
├── LICENSE
├── README.md
├── libs
│   └── print.js // uni-app打印插件
├── main.js // Demo 入口文件
├── manifest.json // uni-app 
├── node_modules // 依赖
├── pages 
│   ├── index 
│   │   └── index.vue // Demo 页面, 业务上使用可参考此文件
│   └── setting
│   └── index.vue // 打印机连接, 可以集成到应用的系统设置功能
├── pages.json // 页面配置文件
├── uni.scss // uni-app 样式文件
└── yarn.lock

运行方法:

  1. 将代码解压缩, 导入到HBuilderX中;
  2. 连接手机;
  3. 运行到手机或模拟器--运行到Android App 基座;
  4. 待运行完毕, 在 蓝牙设置 界面点击“搜索设备”并进行连接;
  5. 点击”Demo界面”按钮跳转到Demo, 填写表单信息后点击”打印测试”按钮进行测试;

uni-app 蓝牙打印, CPCL指令集使用_第1张图片   uni-app 蓝牙打印, CPCL指令集使用_第2张图片

集成步骤:

  1. Demo  libs/print.js 复制到项目目录下;
  2. 参考Demo  pages/setting/index.vue 在项目合适位置集成打印机连接配置功能, 一般在系统设置;
  3. 在需要的文件中引用 libs/print.js  print 方法;
  4. 拼接指令集, 见demo, 更多使用方法参见 CPCL 指令集变成文档.pdf ;
  5. 调用 打印插件的 print 方法进行打印,入参为 打印机ID  拼接好的指令集字符串;

代码解析:

*************************************************libs/print.js***********************************************


/**

 * 打印

 * @param mac_address 打印机ID

 * @param data 指令集字符串, 为了灵活起见, 指令集在业务代码中进行转换然后传递进来

 */

export const print = (mac_address, data) => {

    var that = this

    if (!mac_address) {

        uni.showModal({

            title: "提示",

            content: "请选择蓝牙打印机",

            showCancel: false,

        })

        return

    }

    if (!data) {

        uni.showModal({

            title: "提示",

            content: "请提供打印数据.",

            showCancel: false,

        })

        return

    }



    main = plus.android.runtimeMainActivity()

    BluetoothAdapter = plus.android.importClass("android.bluetooth.BluetoothAdapter")

    var UUID = plus.android.importClass("java.util.UUID")

    uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB")

    BAdapter = BluetoothAdapter.getDefaultAdapter()

    if (!BAdapter.isEnabled()) {

        uni.showModal({

            title: "提示",

            content: "蓝牙处于关闭状态,是否打开?",

            success: (_) => {

                if (_.confirm) {

                    BAdapter.enable()

                }

            },

        })

        console.log("蓝牙处于关闭状态,正在打开...")

        return

    }



    device = BAdapter.getRemoteDevice(mac_address)

    plus.android.importClass(device)

    bluetoothSocket = device.createInsecureRfcommSocketToServiceRecord(uuid)

    plus.android.importClass(bluetoothSocket)

    if (!bluetoothSocket.isConnected()) {

        console.log("检测到设备未连接,尝试连接....")

        bluetoothSocket.connect()

    }

    console.log("设备已连接")

    if (bluetoothSocket.isConnected()) {

        var outputStream = bluetoothSocket.getOutputStream()

        plus.android.importClass(outputStream)

        outputStream.write([0x1b, 0x40]) //打印复位

        outputStream.flush()



        var bytes = plus.android.invoke(data, "getBytes", "gbk") /*utf-8*/



        outputStream.write(bytes)

        outputStream.flush()



        device = null //这里关键

        bluetoothSocket.close()

    }

}

******************************************pages/index/index.vue******************************************





****************************************pages/setting/index.vue******************************************

方法解释:

searchDevices  //开始搜寻附近的蓝牙外围设备

onConn // 连接打印机

你可能感兴趣的:(uni-app)