更新记录
1.0.4(2025-08-11)
- 优化内部接口调用
1.0.3(2025-08-05)
- 增减设置行间距接口
1.0.2(2025-08-01)
- 优化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
}