更新记录

1.0.4(2025-08-11)

  1. 优化内部接口调用

1.0.3(2025-08-05)

  1. 增减设置行间距接口

1.0.2(2025-08-01)

  1. 优化android连接
查看更多

平台兼容性

云端兼容性

阿里云 腾讯云 支付宝云

uni-app(4.07)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
- - - - - - 5.0 12 -
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 快应用-华为 快应用-联盟
- - - - - - - - - - -

uni-app x(4.07)

Chrome Safari Android iOS 鸿蒙 微信小程序
- - 5.0 12 - -

其他

多语言 暗黑模式 宽屏模式

佳博打印机,热敏条码打印机,支持小票ESC、标签TSC、面单CPCL,支持蓝牙、Wi-Fi、USB、串口等连接

集成步骤:

  • 下载demo示例功能,HBuilderX导入的时候选择vue3(vue2和vue3都支持)
  • 拷贝demo里的AndroidManifest.xml、Info.plist到项目对应到目录
  • 参考https://www.cnblogs.com/wenrisheng/p/18323027集成本插件到项目里

接口


import {
    UTSGPSDK,
    UTSBluetoothBT,
    UTSUsbManager
} from "@/uni_modules/wrs-uts-gpsdk"
let gpsdk = new UTSGPSDK()
  • 设置回调

gpsdk.onCallback((resp) => {
    let opt = resp.opt
    if (opt != "onScanBluetooth") {
        console.log(JSON.stringify(resp))
    }
    switch (opt) {
        case "onConnecting": {
            // 连接中。。。
            this.showMsg("连接中。。。")
        }
        break;
        case "onSuccess": {

            this.showMsg("连接成功")
        }
        break;
        case "onFailure": {
            this.showMsg("连接失败")
        }
        break
        case "onDisconnect": {
            this.showMsg("断开连接")
        }
        break;
        case "onCheckCommand": {
            this.showMsg("onCheckCommand。。。")
        }
        break;
        // android蓝牙回调
        case "onReceive": {
            let action = resp.action
            switch (action) {
                // 蓝牙状态变化
                case "android.bluetooth.adapter.action.STATE_CHANGED":
                    let intent = resp.intent
                    let extras = intent.extras
                    let state = extras["android.bluetooth.adapter.extra.STATE"]
                    this.showMsg("蓝牙状态变化 state:" + state)
                    break;
                    // 开始扫描蓝牙
                case "android.bluetooth.adapter.action.DISCOVERY_STARTED":
                    break;
                    // 蓝牙搜索结束
                case "android.bluetooth.adapter.action.DISCOVERY_FINISHED":
                    break;
                    // 搜索到蓝牙设备
                case "android.bluetooth.device.action.FOUND": {
                    let device = resp.device
                    let name = device.name
                    if (name) {

                        let length = this.bluetoothArray.length
                        let isExist = false
                        for (let i = 0; i < length; i++) {
                            let tempName = this.bluetoothArray[i].name
                            if (name == tempName) {
                                isExist = true
                            }
                        }
                        if (!isExist) {
                            console.log(JSON.stringify(resp))
                            this.bluetoothArray.push(device)
                        }
                    }
                    //this.showMsg(JSON.stringify(device))

                }

                break;
                //在系统弹出配对框之前(确认/输入配对码)
                case "android.bluetooth.device.action.PAIRING_REQUEST":
                    break;
                    //设备配对状态改变
                case "android.bluetooth.device.action.BOND_STATE_CHANGED": {
                    let device = resp.device
                    let bondState = device.bondState;
                    switch (bondState) {
                        case 11: {
                            // 正在配对......
                        }
                        break;
                        case 12: {
                            // 完成配对
                        }
                        break;
                        case 10: {
                            // 取消配对
                        }
                        break;
                        default:
                            break;
                    }
                }
                break;
                //最底层连接建立
                case "android.bluetooth.device.action.ACL_CONNECTED":
                    break;
                    //最底层连接断开
                case "android.bluetooth.device.action.ACL_DISCONNECTED":
                    break;
                    //BluetoothAdapter连接状态
                case "android.bluetooth.adapter.action.CONNECTION_STATE_CHANGED":
                    break;
                    // BluetoothHeadset连接状态
                case "android.bluetooth.headset.profile.action.CONNECTION_STATE_CHANGED":
                    break;
                    //BluetoothA2dp连接状态
                case "android.bluetooth.a2dp.profile.action.CONNECTION_STATE_CHANGED":
                    break;
                default:
                    break;
            }
        }
        break;
        // ios蓝牙状态回调
        case "onBluetoothState": {
            let state = resp.state
            switch (state) {
                // CBManagerStatePoweredOff
                case 4: {
                    this.showMsg("蓝牙没有打开")
                }
                break;
                // CBManagerStatePoweredOn
                case 5: {
                    gpsdk.scanBluetooth({})
                }
                break;

                default:
                    break;
            }

        }
        break;
        // ios扫描到蓝牙
        case "onScanBluetooth": {
            let device = resp.device
            let name = device.name
            if (name) {

                let length = this.bluetoothArray.length
                let isExist = false
                for (let i = 0; i < length; i++) {
                    let tempName = this.bluetoothArray[i].name
                    if (name == tempName) {
                        isExist = true
                    }
                }
                if (!isExist) {
                    this.bluetoothArray.push(device)
                }
            }
        }
        break;
        default:
            break;
    }
})
  • 连接打印机,支持蓝牙、Wi-Fi、串口、usb等方式连接

Wi-Fi连接

连接结果在gpsdk.onCallback里回调


let params = {}
params.connMethod = "WIFI"
// 打印机ip
params.ip = this.ip
// 打印机端口,一般都是9100
params.port = 9100
gpsdk.connect(params, (resp) => {
    this.showMsg(JSON.stringify(resp))
    // let flag = resp.flag
    // if (flag) {
    //  
    // } else {
    //  
    // }
})

蓝牙连接

连接结果在gpsdk.onCallback里回调


let params = {}
if (this.isAndroid) {
    let address = device.address

    // 连接方式,支持BLUETOOTH、BLE_BLUETOOTH、USB、WIFI、SERIALPORT
    params.connMethod = "BLUETOOTH" // 一般Android采用BLUETOOTH
    params.macAddress = "xxx" // macAddress地址从扫描到蓝牙那里获取
} else {
    params.connMethod = "BLE_BLUETOOTH"
    params.identifier = "xxxx"// identifier地址从扫描到蓝牙那里获取
}

gpsdk.connect(params, (resp) => {
    this.showMsg(JSON.stringify(resp))
    // let flag = resp.flag
    // if (flag) {
    //  // 连接成功
    // } else {
    //  // 连接失败
    // }
})

串口连接,仅支持Android

连接结果在gpsdk.onCallback里回调


let params = {}
params.connMethod = "SERIALPORT" 
params.serialPort = "xxxx"  // 串口路径,通过let pathArray = gpsdk.getAllDevicesPath()接口选择一个串口路径
params.baudrate = 9600 // 串口波特率,可以取之范围9600、19200、38400、115200
gpsdk.connect(params, (resp) => {
    this.showMsg(JSON.stringify(resp))
    // let flag = resp.flag
    // if (flag) {
    //  // 连接成功
    // } else {
    //  // 连接失败
    // }
})

usb连接,仅支持Android

连接结果在gpsdk.onCallback里回调


let params = {}
params.connMethod = "USB"
params.deviceId = 12121 // 通过UTSUsbManager.getDeviceList((resp)=>{})接口获取deviceId
gpsdk.connect(params, (resp) => {
    this.showMsg(JSON.stringify(resp))
    let flag = resp.flag
    if (flag) {
        // 
    } else {
        // 
    }
})
  • 蓝牙开始扫描 扫描结果在gpsdk.onCallback回调

UTSBluetoothBT.startDiscovery()
  • 蓝牙停止扫描

UTSBluetoothBT.cancelDiscovery()
  • 打开蓝牙,仅支持Android

UTSBluetoothBT.enable()
  • 判断蓝牙是否打开,仅支持Android

let isEnabled = UTSBluetoothBT.isEnabled()
  • 获取所有的串口设备

let deviceArray = gpSDK.getAllDevicesPath()
  • 获取所有的USB设备

UTSUsbManager.getDeviceList((resp)=>{

})
  • 断开打印机连接

gpSDK.close()
  • 打印小票ESC

let commands = []
//初始化打印机
commands.push({
    opt: "addInitializePrinter"
})
// 设置打印居中
commands.push({
    opt: "addSelectJustification",
    value: "CENTER"
})

// 设置字体变大
if (this.isAndroid) {
    commands.push({
        opt: "addSetCharcterSize",
        width: 16,
        height: 1
    })
} else {
    commands.push({
        opt: "addPrintMode",
        value: 88
    })
}

// 打印文字
commands.push({
    opt: "addText",
    value: "ESC票据测试\n"
})

//打印并换行
commands.push({
    opt: "addPrintAndLineFeed"
})

// 设置字体正常
if (this.isAndroid) {
    commands.push({
        opt: "addSetCharcterSize",
        width: 0,
        height: 0
    })
} else {
    commands.push({
        opt: "addPrintMode",
        value: 0
    })
}

// 设置打印居左
commands.push({
    opt: "addSelectJustification",
    value: "LEFT"
})
commands.push({
    opt: "addText",
    value: "设备"
})

commands.push({
    opt: "addSetHorAndVerMotionUnits",
    x: 7,
    y: 0
})

commands.push({
    opt: "addSetAbsolutePrintPosition",
    value: 6
})
commands.push({
    opt: "addText",
    value: "单位"
})
commands.push({
    opt: "addSetAbsolutePrintPosition",
    value: 10
})
// 打印文字
commands.push({
    opt: "addText",
    value: "单价"
})

//打印并换行
commands.push({
    opt: "addPrintAndLineFeed"
})

// 打印二维码
let qrCodeContent = "Gprinter"
if (this.isAndroid) {
    // 设置纠错等级
    commands.push({
        opt: "addSelectErrorCorrectionLevelForQRCode",
        value: 0x31
    })
    // 设置qrcode模块大小
    commands.push({
        opt: "addSelectSizeOfModuleForQRCode",
        value: 4
    })
    commands.push({
        opt: "addStoreQRCodeData",
        value: qrCodeContent
    })
    commands.push({
        opt: "addPrintQRCode",
        value: qrCodeContent
    })
} else {
    commands.push({
        opt: "addQRCodeSize",
        pL: 0,
        pH: 0,
        cn: 0,
        fn: 0,
        n: 5
    })
    commands.push({
        opt: "addStoreQRCodeData",
        pL: 0x0b,
        pH: 0,
        cn: 0x31,
        fn: 0x50,
        m: 0x30,
        data: qrCodeContent
    })
    commands.push({
        opt: "addPrintQRCode",
        pL: 0,
        pH: 0,
        cn: 0,
        fn: 0,
        m: 0
    })
}

//打印并换行
commands.push({
    opt: "addPrintAndLineFeed"
})

// 打印一维码
let barCodeContent = "ABC1234567890"
if (this.isAndroid) {
    // 设置条码可识别字符位置在条码下方
    commands.push({
        opt: "addSelectPrintingPositionForHRICharacters",
        value: 2
    })
    commands.push({
        opt: "addSetBarcodeHeight",
        value: 60
    })
    commands.push({
        opt: "addSetBarcodeWidth",
        value: 1
    })
    commands.push({
        opt: "addCODE128",
        value: barCodeContent
    })
} else {
    commands.push({
        opt: "addSetBarcodeWidth",
        value: 2
    })
    commands.push({
        opt: "addSetBarcodeHeight",
        value: 60
    })
    commands.push({
        opt: "addSelectPrintingPositionForHRICharacters",
        value: 2
    })
    commands.push({
        opt: "addCODE128",
        value: barCodeContent
    })
}

// 
commands.push({
    opt: "addPrintAndLineFeed"
})

// 打印图片
let imagePath = gpsdk.getResourcePath("/static/gprinter.png")
if (this.isAndroid) {
    commands.push({
        opt: "drawImage",
        url: imagePath,
        width: 384
    })
} else {
    commands.push({
        opt: "addESCBitmap",
        url: imagePath,
        m: 40
    })
}

commands.push({
    opt: "addPrintAndLineFeed"
})
commands.push({
    opt: "addSetHorAndVerMotionUnits",
    x: 0,
    y: 0
})

commands.push({
    opt: "addSetAbsolutePrintPosition",
    value: 0
})
commands.push({
    opt: "addText",
    value: "\n\n您好,中国\n"
})
commands.push({
    opt: "addPrintAndFeedLines",
    value: 8
})
// commands.push({
//  opt: "addCutPaper",
//  value: 1 // 0全切纸,1是半切
// })

if (this.isAndroid) {
    //切纸(带切刀打印机才可用)

}
let params = {}
params.command = "ESC"
params.commands = commands
gpsdk.sendCommands(params, (resp) => {
    this.showMsg(JSON.stringify(resp))
})
ESC commands数组里可以添加的对象:

初始化打印机


{
    opt: "addInitializePrinter"
}

设置对齐方式


{
    opt: "addSelectJustification",
    value: "LEFT" // LEFT、CENTER、RIGHT
}

设置字体大小

android:
{
    opt: "addSetCharcterSize",
    width: 0, // 0、16、32、48、64、80、96、112
    height: 0 // 0、1、2、3、4、5、6、7
}

ios:
{
    opt: "addSetCharcterSize",
    n: 8 // n= width | height 宽度放大倍数,0 ≤n ≤255 (1 ≤ 纵向放大倍数 ≤8,1 ≤ 横向放达倍数 ≤8)[描述]   用0 到2 位选择字符高度,4 到7 位选择字符宽度
}

打印文字


{
    opt: "addText",
    value: "xxxxx"
}

打印并换行


{
    opt: "addPrintAndLineFeed"
}

打印并且走纸多少行,打印完内容后发送


{
    opt: "addPrintAndFeedLines",
    value: 8
}

打印图片,80打印机图片宽度最大为576dot 1mm=8dot 用尺子量取图片的宽度单位为Xmm 传入宽度值为 X*8


{
    opt: "drawImage",
    url: "/xxx/xxx/xxx.png", // 手机本地图片的绝对路径
    width: 8  // 宽度
}

设置条码可识别字符,选择HRI字符的打印位置


{
    opt: "addSelectPrintingPositionForHRICharacters",
    value: 0 // 可识别字符位置,0, 48  不打印 1, 49  条码上方 2, 50  条码下方 3, 51  条码上、下方都打印
}

条码高度为n点,默认为40


{
    opt: "addSetBarcodeHeight",
    value: 40
}

设置条码单元宽度


{
    opt: "addSetBarcodeWidth",
    value: 1
}

打印Code128码


{
    opt: "addCODE128",
    value: “xxx”,
    charset: "B" 
}

设定纠错等级;(一般无需设定,忽略)


android:
{
    opt: "addQRCodeLevel",
    value: 0x31
}

ios:
/*
 设定纠错等级;(一般无需设定,忽略)
 [格式] ASCII码 GS ( K pL pH cn fn m d1...dk
 十六进制码 1D 28 6B 03 00 31 45 n
 [范围] (pL+pH×256)=3 (pL=3,pH=0)
 cn=49
 fn=69
 48≤n≤51
 [默认值] n=48
 */
{
    opt: "addQRCodeLevel",
    pL: 0,
    pH: 0,
     cn: 0,
     fn: 0,
     n: 0
}

设定QRCode大小;(可以省略)


android:
{
    opt: "addQRCodeSize",
    value: 4
}

ios:
/*
 1、设定QRCode大小;(可以省略)
 [格式] ASCII码 GS ( K pL pH cn fn n
 十六进制码 1D 28 6B 03 00 31 43 n
 [范围] (pL+pH×256)=3 (pL=3,pH=0)
 cn=49
 fn=67
 1 ≤n≤16
 [默认值] n=3
 */
{
    opt: "addQRCodeSize",
    pL: 0,
    pH: 0,
    cn: 0,
    fn: 0,
    n: 5
}

设置qrcode内容


android:
{
    opt: "addStoreQRCodeData",
    data: "xxxxx"
}

ios:
{
    opt: "addStoreQRCodeData",
    pL: 0x0b,
    pH: 0,
    cn: 0x31,
    fn: 0x50,
    m: 0x30,
    data: "xxxxx"
}

打印二维码

android:
{
    opt: "addPrintQRCode"
}

ios:
{
    opt: "addPrintQRCode",
    pL: 0,
    pH: 0,
    cn: 0,
    fn: 0,
    m: 0
}

切纸(带切刀打印机才可用)

{
    opt: "addCutPaper",
    value: 0 // value参数仅支持iOS,0全切纸,1是半切
}

设置切纸后走纸

{
    opt: "addCutPaperAndFeed",
    value: 0 // 走纸距离
}

开钱箱

{
    opt: "addGeneratePlus",
    foot: 0, // 钱箱引脚号,0或1
    t1: 255, // 高电平时间
    t2: 255 // 低电平时间
}

是否开启加粗

{
    opt: "addTurnEmphasizedModeOnOrOff",
    value: "ON" // ON、OFF
}

addESCBitmap,仅支持iOS


        /*
 十六进制码 1D 76 30 m xL xH yL yH d1...dk
 0 ≤ m ≤ 3, 48 ≤ m ≤ 51
 0 ≤ xL ≤ 255
 0 ≤ xH ≤ 255
 0 ≤ yL ≤ 255
 0 ≤ yH ≤ 255
 0 ≤ d ≤ 255
 k = ( xL + xH × 256) × ( yL + yH × 256) ( k ≠ 0)
 参 数 说 明
 m 模式
 0, 48 正常
 1, 49 倍宽
 2, 50 倍高
 3, 51 倍宽、倍高
 xL、 xH表示水平方向位图字节数( xL+ xH × 256)
 yL、 yH表示垂直方向位图点数(  yL+ yH × 256)
 data 影像数据
 */
{
    opt: "addESCBitmap",
    url: "/xxx/xxx/xx.png", // 本地图片文件绝对路径
     m: 0,
     xL: 0,
     xH: 0,
     yL: 0,
     yH: 0
}

设置水平和垂直单位距离


{
    opt: "addSetHorAndVerMotionUnits",
    x: 1, // 水平单位
    y: 1 // 垂直单位
}

设置绝对打印位置


{
    opt: "addSetAbsolutePrintPosition",
    value: 10
}

设置打印模式,0x1B 0x21 n(0-255),根据n的值设置字符打印模式,仅支持iOS


/**
 * 方法说明:设置打印模式,0x1B 0x21 n(0-255),根据n的值设置字符打印模式
 * @param font     选择FONTA or FONTB
 * @param emphasized    是否加粗
 * @param doubleheight  是否倍高,当倍宽和倍高模式同时选择时,字符同时在横向和纵向放大两倍。
 * @param doublewidth   是否倍宽
 * @param underline     是否下划线
 *参数n二进制默认为00000000(0X0),10001000(0X88)表示下划线和加粗,00001000(0X08)表示加粗,10000000(0X80)表示下划线
 */

{
    opt: "addPrintMode",
    value: 10
}
  • 设置行距

{
    opt: "addLineSpacing",
    value: 30
}
  • esc打印pdf,仅支持Android

// 本地pdf文件的绝对路径
let path = plus.io.convertLocalFileSystemURL('_www/static/test.pdf')
let is58MM = true
let width = is58MM ? 384 : 576
gpsdk.writePDFToEsc(path, width, (resp) => {
    this.showMsg(JSON.stringify(resp))
})
  • 打印标签TSC

let commands = []
if (this.isAndroid) {
    commands.push({
        opt: "addUserCommand",
        value: "\r\n"
    })
}
commands.push({
    opt: "addSize",
    width: 48,
    height: 80
})
if (this.isAndroid) {
    commands.push({
        opt: "addGap",
        value: 0
    })
} else {
    commands.push({
        opt: "addGap",
        m: 2,
        n: 0
    })
}

commands.push({
    opt: "addReference",
    x: 0,
    y: 0
})
commands.push({
    opt: "addTear",
    value: "ON"
})
commands.push({
    opt: "addCls"
})
commands.push({
    opt: "addText",
    x: 0,
    y: 80,
    font: "TSS24.BF2",
    rotation: 0,
    Xscal: 2,
    Yscal: 2,
    text: "佳博科技ABCD1234"
})
commands.push({
    opt: "addText",
    x: 0,
    y: 144,
    font: "5",
    rotation: 0,
    Xscal: 1,
    Yscal: 1,
    text: "2020/01/01"
})
let url = gpsdk.getResourcePath("/static/gprinter.png")
if (this.isAndroid) {
    commands.push({
        opt: "drawImage",
        x: 0,
        y: 224,
        nwidth: 300,
        url: url
    })
} else {
    commands.push({
        opt: "addNewBitmap",
        x: 0,
        y: 224,
        mode: 0,
        width: 400,
        url: url
    })
}
commands.push({
    opt: "addPrint",
    m: 1,
    m: 1
})

commands.push({
    opt: "queryPrinterStatus"
})
let params = {}
params.command = "TSC"
params.commands = commands
gpsdk.sendCommands(params, (resp) => {
    this.showMsg(JSON.stringify(resp))
})
TSC commands数组里可以添加的对象:

addUserCommand,仅支持Android


{
    opt: "addUserCommand",
    value:"\r\n"
}

设置标签尺寸宽高,按照实际尺寸设置 单位mm


{
    opt: "addSize",
    width: 100,
    height: 500
}

设置标签间隙,按照实际尺寸设置,如果为无间隙纸则设置为0 单位mm


android:
{
    opt: "addGap",
    value: 0
}

ios:
/**
 * 方法说明:设置标签间隙尺寸 单位mm
 * @param m    间隙长度
 * @param n    间隙偏移
 */

{
    opt: "addGap",
    m: 2,
    n: 0
}

设置纸张类型为黑标,发送BLINE 指令不能同时发送GAP指令


android:
{
    opt: "addBline",
    value: 2
}

ios:
/**
 * 方法说明:设定黑标高度及定义标签印完后标签额外送出的长度
 * @param m 黑标高度(0≤m≤1(inch),0≤m≤25.4(mm))
 * @param n 额外送出纸张长度 n≤标签纸纸张长度(inch或mm)
 */

{
    opt: "addBline",
    m: 100,
    n: 500
}

设置打印方向


{
    opt: "addDirection",
    direction: 0, // 0: FORWARD 1: BACKWARD
    mirror: "NORMAL" // mirror仅支持Android,NORMAL、MIRROR
}

设置原点坐标


{
    opt: "addReference",
    x: 0,
    y: 0
}

设置打印浓度


{
    opt: "addDensity",
    value: 0 // 取值范围[0~15]
}

撕纸模式开启


{
    opt: "addTear",
    value: "ON" // ON、OFF、BATCH 
}

清除打印缓冲区


{
    opt: "addCls"
}

绘制中文


{
    opt: "addText",
    x: 0,
    y: 0,
    font: "4" // 0.TTF、1.TTF、2.TTF、4.TTF、1、2、3、4、5、6、7、8、9、10、TSS16.BF2、TSS20.BF2、TSS24.BF2、TSS32.BF2、TSS48.BF2、TST24.BF2、K
    rotation: 0, // [0, 90, 180, 270]
    Xscal: 1, // [1~10]
    Yscal: 1, // [1~10]
    text: "xxx"
}

addUnicodeText,仅支持android


{
    opt: "addUnicodeText",
    x: 0,
    y: 0,
    font: "4" // 0.TTF、1.TTF、2.TTF、4.TTF、1、2、3、4、5、6、7、8、9、10、TSS16.BF2、TSS20.BF2、TSS24.BF2、TSS32.BF2、TSS48.BF2、TST24.BF2、K
    rotation: 0, // [0, 90, 180, 270]
    Xscal: 1, // [1~10]
    Yscal: 1, // [1~10]
    text: "xxx",
    textType: "BIG5" // BIG5、EUC_KR
}

打印图片drawImage


{
    opt: "drawImage",
    x: 0,
    y: 0,
    url: "/xxx/xxx/xxx.png", // 本地图片绝对路径
    mode: 0, // mode仅支持iOS,影像绘制模式 0: OVERWRITE 1:OR 2:XOR 
    nwidth: 300 // nwidth仅支持Android
}

打印图片drawJPGImage,仅支持Android


{
    opt: "drawImage",
    x: 0,
    y: 0,
    url: "/xxx/xxx/xxx.png", // 本地图片绝对路径
    nwidth: 300 // nwidth仅支持Android
}

打印图片addNewBitmap,仅支持iOS


{
    opt: "addNewBitmap",
    x: 0,
    y: 0,
    width: 20, // 影像的宽度,以 byte 表示
    url: "/xxx/xxx/xxx.png", // 本地图片绝对路径
    mode: 0 // 影像绘制模式 0: OVERWRITE 1:OR 2:XOR 
}

绘制二维码


/**
 * 方法说明:在标签上绘制QRCode二维码
 * @param x 横坐标
 * @param y 纵坐标
 * @param ecclever 选择QRCODE纠错等级,L为7%,M为15%,Q为25%,H为30%
 * @param cellwidth  二维码宽度1~10,默认为4
 * @param mode  默认为A,A为Auto,M为Manual
 * @param rotation  旋转角度,QRCode二维旋转角度,顺时钟方向,0不旋转,90顺时钟方向旋转90度,180顺时钟方向旋转180度,270顺时钟方向旋转270度
 * @param content   条码内容
 */

{
    opt: "addQRCode",
    x: 0,
    y: 0,
    level: "L", // L、M、Q、H 
    cellwidth: 2, // [1-10]
    rotation: 0, // 0、90、180、270
    data: "xxx",
    mode: "A" // A、M,mode仅支持iOS
}

绘制一维码

/**
 * 方法说明:在标签上绘制一维条码
 * @param x 横坐标
 * @param y 纵坐标
 * @param barcodeType 条码类型
 * @param height  条码高度,默认为40
 * @param readable  是否可识别,0:  人眼不可识,1:   人眼可识
 * @param rotation  旋转角度,条形码旋转角度,顺时钟方向,0不旋转,90顺时钟方向旋转90度,180顺时钟方向旋转180度,270顺时钟方向旋转270度
 * @param narrow 默认值2,窄 bar  宽度,以点(dot)表示
 * @param wide 默认值4,宽 bar  宽度,以点(dot)表示
 * @param content   条码内容
 */
{
    opt: "add1DBarcode",
    x: 0,
    y: 0,
    type: "128", // 128、128M、EAN128、25、25C、39、39C、39S、93、EAN13、EAN13+2、EAN13+5、EAN8、EAN8+2、EAN8+5、CODA、POST、UPCA、UPCA+2、UPCA+5、UPCE13、UPCE13+2、UPCE13+5、CPOST、MSI、MSIC、PLESSEY、ITF14、EAN14
    height: 40,
    readable: 0, // 0、1
    rotation: 0, // 0、90、180、270
    content: "xxx",
    narrow: 2, // narrow仅支持iOS
    wide: 4 // wide仅支持iOS
}

打印标签


/**
 * 方法说明:执行打印
 * @param m 指定打印的份数(set)1≤m≤65535
 * @param n 每张标签需重复打印的张数 1≤n≤65535
 */
{
    opt: "addPrint",
    m: 1,
    n: 1
}

打印标签后 蜂鸣器响


/**
 * 方法说明:设置蜂鸣器
 * @param level 频率
 * @param interval  时间ms
 */
{
    opt: "addSound",
    level: 2,
    interval: 100
}

打开钱箱命令,CASHDRAWER m,t1,t2


/**
 * 方法说明:打开钱箱命令,CASHDRAWER m,t1,t2
 * @param m  钱箱号 m      0,48  钱箱插座的引脚2        1,49  钱箱插座的引脚5
 * @param t1   高电平时间0 ≤ t1 ≤ 255输出由t1和t2设定的钱箱开启脉冲到由m指定的引脚
 * @param t2   低电平时间0 ≤ t2 ≤ 255输出由t1和t2设定的钱箱开启脉冲到由m指定的引脚
 */
{
    opt: "addCashdrwer",
    m: 1, // 0、1
    t1: 255,
    t2: 255
}

查询打印状态


{
    opt: "queryPrinterStatus"
}

addQueryPrinterStatus


{
    opt: "addQueryPrinterStatus",
    value: 0 // 0:OFF 1:ON 2:BATCH
}
  • 打印面单CPCL

let commands = []
if (this.isAndroid) {
    commands.push({
        opt: "addInitializePrinter",
        qty: 1,
        height: 1000,
        offset: 0
    })
} else {
    commands.push({
        opt: "addInitializePrinter",
        qty: 1,
        height: 1000
    })
}

commands.push({
    opt: "addJustification",
    value: 0
})
commands.push({
    opt: "addSetmag",
    w: 1,
    h: 1
})

commands.push({
    opt: "addText",
    font: 4,
    x: 0,
    y: 30,
    type: 0,
    text: "Sample"
})
// 将字体放大指定的放大倍数
commands.push({
    opt: "addSetmag",
    w: 0,
    h: 0
})
// 居左
commands.push({
    opt: "addJustification",
    value: 1
})
let url = gpsdk.getResourcePath("/static/gprinter.png")
commands.push({
    opt: "addEGraphics",
    command: 1, // command仅支持iOS, 0: 横向打印扩展图形 1: 横向打印压缩图形
    x: 0,
    y: 65,
    url: url,
    width: 385
})
commands.push({
    opt: "addBarcodeText",
    font: 5,
    offset: 2
})
commands.push({
    opt: "addBarcode",
    command: 0,
    type: 1,
    ratio: 0,
    height: 50,
    width: 1,
    x: 240,
    y: 130,
    text: "012345678"
})
commands.push({
    opt: "addBarcodeTextOff"
})

commands.push({
    opt: "addText",
    font: 4,
    x: 0,
    y: 330,
    type: 0,
    text: "佳博"
})
// 剧中
commands.push({
    opt: "addJustification",
    value: 0
})
commands.push({
    opt: "addText",
    font: 4,
    x: 0,
    y: 330,
    type: 0,
    text: "网络"
})

commands.push({
    opt: "addJustification",
    value: 2
})
commands.push({
    opt: "addText",
    font: 4,
    x: 0,
    y: 330,
    type: 0,
    text: "设备"
})
commands.push({
    opt: "addJustification",
    value: 1
})
commands.push({
    opt: "addText",
    font: 4,
    x: 0,
    y: 370,
    type: 0,
    text: "测试非粗体 效果SMARNET printer"
})
commands.push({
    opt: "addPrint"
})

let params = {}
params.command = "CPCL"
params.commands = commands
gpsdk.sendCommands(params, (resp) => {
    this.showMsg(JSON.stringify(resp))
})
CPCL commands数组里可以添加的对象:

addUserCommand,仅支持Android


{
    opt: "addUserCommand",
    value: "\r\n"
}

初始化打印机


 /**
  * 方法说明:初始化
  * @param offset 标签横向偏移量
  * @param height 标签最大高度
  * @param qty 打印标签的张数
  */

{
    opt: "addInitializePrinter",
    qty: 1,
    height: 1000
}

设置打印宽度


{
    opt: "addPagewidth",
    value: 10
}

控制字段的对齐方式


{
    opt: "addJustification",
    value: 0 // 0: center 1: left 2:right
}

将字体放大指定的放大倍数


{
    opt: "addSetmag",
    w: 2, //宽度放大倍数,有效放大倍数为 1 到 16
    h: 2 // 高度放大倍数,有效放大倍数为 1 到 16
}

打印文字


{
    opt: "addText",
    font: 0, // 0、1、2、3、4、5、6、7、8、10、11、12、13、20、24、41、42、43、44、45、46、47、48、55、58
    x: 0,
    y: 0,
    text: "xxx",
    type: 0 // 0: 横向打印文本 1:逆时针旋转 90 度,纵向打印文本 2:同上 3:逆时针旋转 180 度,反转打印文本 4: 逆时针旋转 270 度,反转打印文本

}

在标签上添加多行文本,以"\n"标示换行,仅支持iOS


 {
    opt: "addMultiLineWithFont",
    font: 0, // 0、1、2、3、4、5、6、7、8、10、11、12、13、20、24、41、42、43、44、45、46、47、48、55、58
    x: 0,
    y: 0,
    text: "xxx"
 }

在标签上添加多行反色文本,以‘\n’标示换行,仅支持iOS


  {
    opt: "addMultiLineReverseText",
    font: 0, // 0、1、2、3、4、5、6、7、8、10、11、12、13、20、24、41、42、43、44、45、46、47、48、55、58
    x: 0,
    y: 0,
    text: "xxx"
  }

在标签上添加多行文本,根据文本宽高自动换行,仅支持iOS


    /**
 * 方法说明:在标签上添加多行文本,根据文本宽高自动换行
 * @param font 字体类型
 * @param x 横向起始位置
 * @param y 纵向起始位置
 * @param width 文本宽度
 * @param fixHeight 高度约束,默认为0,自动计算当前高度,若手动输入高度,则高度不够,后面字符将不被显示
 * @param text 打印的文本
*/

    {
        opt: "addCustomMultiLineText",
        font: 0, // 0、1、2、3、4、5、6、7、8、10、11、12、13、20、24、41、42、43、44、45、46、47、48、55、58
        x: 0,
        y: 0,
        rowWidth: 10,
        fixHeight: 0,
        text: "xxx"
    }

在标签上添加多行反色文本,根据文本宽高自动换行,仅支持iOS


    {
        opt: "addCustomMultiLineReverseText",
        font: 0, // 0、1、2、3、4、5、6、7、8、10、11、12、13、20、24、41、42、43、44、45、46、47、48、55、58
        x: 0,
        y: 0,
        rowWidth: 10,
        fixHeight: 0,
        text: "xxx"
    }

打印图片


{
    opt: "addEGraphics",
    x: 0,
    y: 0,
    width: 0, // 最大宽度
    url: "/xxx/xxx/xx.png", // 本地文件绝对路径
    command: 0 // command仅支持iOS, 0: 横向打印扩展图形 1: 横向打印压缩图形
}

以指定的宽度和高度纵向和横向打印条码


/**
 * 方法说明:以指定的宽度和高度纵向和横向打印条码
 * @param command 横向或纵向打印
 * @param type 条码种类
 * @param width 条码窄条的单位宽度
 * @param ratio 条码宽条与窄条的比率
 * @param height  条码的单位高度
 * @param x 横向起始位置
 * @param y 纵向起始位置
 * @param text 条码内容
 */

{
    opt: "addBarcode",
    x: 0,
    y: 0,
    command: 0, // 0:BARCODE 1:VBARCODE
    type: 1, // 1:Code128 2:Upc_A 3:Upc_E 4:Ean13 5:Ean8 6:Code39 7:Code93 8:Codebar
    ratio: 0, // 0、1、2、3、4、20、21、22、23、24、25、26、27、28、29、30
    width: 1,
    height: 50,
    text: "xxx"
}

打印二维码


{
    opt: "addBQrcode",
    x: 0,
    y: 0,
    text: "xxxx",
    command: 0, // 0:BARCODE 1:VBARCODE
    n:2, // QR Code 规范编号,1 或 2,默认推荐为2,仅支持iOS
    u: 6 // 模块的单位宽度/单位高度 1-32,默认为6,仅支持iOS
}

打印标签


{
    opt:"addPrint"
}

查询打印机状态


{
    opt:"queryPrinterStatus"
}

添加条码注释


{
    opt:"addBarcodeText",
    font: 5,
    offset: 3
}

命令在设定后保持有效


{
    opt:"setBold",
    value: true
}

隐私、权限声明

1. 本插件需要申请的系统权限列表:

蓝牙、定位

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率: