posPrinter 支持各品牌小票(热敏)打印机以及TSC标签打印机,可同时连接多台蓝牙、网口打印机,通过向打印机发送指令直接打印,无需安装驱动。
posPrinter 支持多机同时打印,可自定义打印格式,打印联数,非常适用于打印收银小票、堂食/外卖订单、超市结账单等。
使用蓝牙打印机:
使用蓝牙打印机前,要把平板(或手机)和蓝牙打印机绑定。 手动绑定蓝牙打印机时,在手机或平板的蓝牙管理界面,搜索蓝牙设备,待搜索到蓝牙打印机后,进行绑定。然后调用插件的 print 函数,把打印内容发送到绑定的打印机。 备注:(ios只支持蓝牙4.0的打印机,选购蓝牙打印机,请确定打印机是否支持ios)
使用网口打印机:
使用网口打印机前,要保证网口打印机的IP地址和平板(手机)在同一个网段,即:IP地址的前三部分相同,建议将网口打印机和和平板(手机)连接到同一个路由器。然后调用 print,在参数中传入网口打印机的IP地址和打印内容,进行打印。
使用USB打印机:
使用USB打印机前,要保证用USB线正确连接平板(手机)和打印机,如果是wifi+usb类型的打印机,打印机开机后,需要等待wifi状态检测完毕,才可以使用usb打印。然后调用 print,在参数中传入USB打印机的地址和打印内容,进行打印。
多台打印机同时打印:
当配置多台打印机进行打印时,调用 print 函数,传入蓝牙打印机的MAC地址或网口打印机的IP地址,以及对应的打印内容,插件根据地址格式自动判断打印机类型,并将打印内容发送至指定打印机。
小票打印机 - 打印格式说明:
<BR>为换行符
<CUT>为切纸符
<A></A>为放大
<B></B>为加粗
<L></L>字体2倍高度
<C></C>为居中
<CA></CA>为居中放大
<BL></BL>为倍高加粗
<AB></AB>为放大加粗
<QR></QR>按标签内的内容生成二维码并打印
<BASE64></BASE64>将标签内的base64编码还原为图片并打印
<CA>测试打印</CA><BR>
名称 单价 数量 金额<BR>
--------------------------------<BR>
番 1.0 1 1.0<BR>
番茄 10.0 10 10.0<BR>
番茄炒 10.0 100 100.0<BR>
番茄炒粉 100.0 100 100.0<BR>
番茄炒粉粉 1000.0 1 100.0<BR>
番茄炒粉粉粉粉 100.0 100 100.0<BR>
番茄炒粉粉粉粉 15.0 1 15.0<BR>
备注:快点送到<BR>
--------------------------------<BR>
合计:xx.0元<BR>
送货地点:xxxxxxxxxxxxxxxxx<BR>
联系电话:138000000000<BR>
订餐时间:2011-01-06 19:30:10<BR>
--------------------------------<BR>
<QR>(300)http://www.apicloud.com/</QR><BR>
<BR>
----------<CUT>----------<BR>
<BR>
<AB>桌号:22</AB><BR>
------------------------------------------------<BR>
<BL>测试餐厅名称(上菜单)</BL><BR>
************************************************<BR>
<L>订单流水号:T00000000030007(堂食)</L><BR>
------------------------------------------------<BR>
菜品名称 单价 数量 金额<BR>
------------------------------------------------<BR>
牛肉圆葱(大) 30 1 30<BR><BR>
素三鲜(大) 28 1 28<BR><BR>
韭菜鸡蛋(大) 28 1 28<BR><BR>
------------------------------------------------<BR>
<B> 应收金额:86 元</B><BR>
<B>优惠方式:减5元 优惠金额:5 元</B><BR>
<B> 实收金额:81 元</B><BR>
------------------------------------------------<BR>
就餐人数:1 备注: <BR>
------------------------------------------------<BR>
收银员:张三 结算方式:现金<BR>
Pos机:0003 订餐时间:2016-09-12 14:36:55<BR>
************************************************<BR>
分店地址:测试餐厅地址<BR>
订餐电话:010-12345678<BR>
<BR>
<QR>(300)http://www.apicloud.com/</QR><BR>
---------------------<CUT>--------------------------<BR>
<BR>
<QR>(300)http://www.apicloud.com/</QR><BR>
<BR>
<BASE64>iVBORw0KGgoAAAANSUhEUgAAACoAAAAbCAYAAAAK5R1TAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2tpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0ZjRmYWQ4ZC05YTdkLTQ3ZjEtOTYxMC03YjU2NDk5ZDE1MmQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MjhCRTMwNTE5NzcyMTFFNjhBNTFFMjQ2NjNGNTg2RjQiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MjhCRTMwNTA5NzcyMTFFNjhBNTFFMjQ2NjNGNTg2RjQiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6Qzc0QjUyNDMzOTIyMTFFNjlEMTVCQThCOTM4Mjc5NjQiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6Qzc0QjUyNDQzOTIyMTFFNjlEMTVCQThCOTM4Mjc5NjQiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz783Hw/AAACWklEQVR42mJgIB8wAbEXEM8E4gtA/BWI/wPxTyB+AsRbgLgEiKUZBggwAnEsED+AOowQ/g3ES4FYkZ6OFAPinUQ6EB2DQjyZHo6UB+I7ZDoSGbfT0pFCQHwDh8Ug8QYg9gRiAyC2BOIEIF4GxD9w6CmjhSNBmWYHFsveAnE0NM3iAqCMtAqL3r9AbEFthzpjseguECuRYEYVFjNOQwOBqsAbiN9DLQDRamSYMQGLY/1pkQRAIXgOiH3J1M+OpUjbREqZiA4UgDgRiN2gOZ0LLb3+o8CzILNYkfggx34C4u9A/AiI9wDxfGjpghOwAXEnEP+iQhFECf4NTSYcuBy5bYAdiI73ocUmGEwcZI6E4dnIaVQDiK8AMTOSw0Hl3EIg3grE76icKdcBsSASvxmIz0IbOElAzIKWhk2gmRij2AClEQ8a1XACWELNHkneAdr6whqqN9EkJtGwKk5EswtUgvCjqWlHU/MEJoFeHzvQyJHM0HYrsl1HsagzxxLqrExoaYIBWqbRAuQBsT6a2AIs6r5hEQO78Qma68tp4MgALOUzqIDnxKI2B03de5jEEjSJ19AaiRqAE5qr/2GJziAcra3naOrWwyRdsRjyDIjjoe1QcnoBZtA26nMc5eM0ND2g4ioKGsp4Gy476ViIrwXiw0SqPYweCpJAfI8OjuyB5v4DRKh9gisJSkOLC1o48DxasUfIoWcI9VpBVWok1KC/FDruMbQadsXSnDyAo3tyBJo3mIhpjyLnWFAo85CYmUBV4AvkYgULUEEz9xs0qr/hDMH///8zDAUAEGAAiGvKl5Gx5PgAAAAASUVORK5CYII=</BASE64>
<BR>
获取蓝牙打印机列表
getBluetoothPrinters({params}, callback(ret, err))
status:
ret:
[
{
name: '' //字符串;蓝牙设备名称
address: '' // 字符串;蓝牙设备地址
isBonded: true|false // 布尔值; 该蓝牙设备是否已绑定
}
]
err:
{
msg:'' //错误信息描述
}
var printModule = api.require('posPrinter');
var param = {
'status': 'bonded'
};
printModule.getBluetoothPrinters(param, function (ret, err) {
alert(JSON.stringify(ret));
});
搜索周边所有蓝牙设备时,需要30秒左右才能返回搜索到的设备列表
iOS系统,Android系统
可提供的1.0.0及更高版本
获取USB打印机列表
getUsbPrinters(callback(ret, err))
ret:
[
{
name:'' //字符串;USB 设备名称
address: '' // 字符串;USB 设备地址
}
]
err:
{
msg:'' //错误信息描述
}
var printModule = api.require('posPrinter');
printModule.getUsbPrinters(function (ret, err) {
alert(JSON.stringify(ret));
});
USB打印机的地址,形式为:u:256:Printer(以":Printer"结尾的地址,一般为打印机)
Android系统
可提供的1.0.0及更高版本
绑定蓝牙打印机
createBondToPrinter({params}, callback(ret, err))
address:
pin:
ret:
{
result: 'ok' //字符串;ok表示绑定成功
}
err:
{
msg:'' //错误信息描述
}
api.showProgress({
style: 'default',
animationType: 'fade',
title: '正在绑定...',
text: '请稍等...',
modal: true
});
var module = api.require('posPrinter');
module.createBondToPrinter({
address:"58:52:00:00:2E:43"
} , function(ret,err)
{
api.hideProgress();
if(err){
alert(JSON.stringify(err));
}
else if(ret && ret.result == "ok"){
alert("绑定成功");
}
});
Android系统
可提供的1.0.0及更高版本
将指定的蓝牙打印机解除绑定
removeBondToPrinter({params}, callback(ret, err))
address:
ret:
{
result: 'ok' //字符串;ok表示解绑成功
}
err:
{
msg:'' //错误信息描述
}
var printModule = api.require('posPrinter');
var param = {
'address': '98:D3:31:20:23:4A'
};
printModule.removeBondToPrinter(param, function (ret, err) {
alert(JSON.stringify(ret));
});
Android系统
可提供的1.0.0及更高版本
将打印内容发送到指定地址的打印机(蓝牙打印机为MAC地址,网口打印机为IP地址),支持多机打印
printOnSpecifiedPrinters({params})
taskList:
[
{
printerAddr: '98:D3:31:20:23:4A', //字符串;打印机地址
tscSetting:{ //如果是TSC标签打印机,这个属性必须设置,如果忽略此属性,则此打印机为小票打印机
width:40, //标签的宽度,单位mm
height:30, //标签的高度,单位mm
gap:2 //每个标签之间的间隔,单位mm
},
tagContent:'<text>我的测试1</text>', //设置标签打印的内容,TSC标签打印机专用属性,设置此属性,content属性可以忽略
content: orderInfo, //字符串;打印内容
keepAlive:true, //打印完毕后不断开连接,下次打印将使用同样的连接进行打印(蓝牙打印机建议设置为true)
cmd:[25,23,0] //打印内容的同时,一并发送指定的ESC/POS命令
copyNum: 2 //数值类型;重复打印次数,默认值为1
}
]
ret:
{
result: 'ok' //字符串;ok表示调用成功
}
err:
{
msg:'', //错误信息的汇总描述
errors:[ //用一个数组,描述打印发生的错误
{
taskIndex:0, //描述哪个打印任务发生错误
printerAddr:'', //发生错误的打印机地址
msg:'' //错误信息
}
],
}
var orderInfo;
orderInfo = "<CA>测试打印</CA><BR>";
orderInfo += "名称 单价 数量 金额<BR>";
orderInfo += "--------------------------------<BR>";
orderInfo += "番 1.0 1 1.0<BR>";
orderInfo += "番茄 10.0 10 10.0<BR>";
orderInfo += "番茄炒 10.0 100 100.0<BR>";
orderInfo += "番茄炒粉 100.0 100 100.0<BR>";
orderInfo += "番茄炒粉粉 1000.0 1 100.0<BR>";
orderInfo += "番茄炒粉粉粉粉 100.0 100 100.0<BR>";
orderInfo += "番茄炒粉粉粉粉 15.0 1 15.0<BR>";
orderInfo += "备注:快点送到<BR>";
orderInfo += "--------------------------------<BR>";
orderInfo += "合计:xx.0元<BR>";
orderInfo += "送货地点:xxxxxxxxxxxxxxxxx<BR>";
orderInfo += "联系电话:138000000000<BR>";
orderInfo += "订餐时间:2011-01-06 19:30:10<BR>";
orderInfo += "<QR>(300)http://www.baidu.com</QR><BR>";
orderInfo += " <CUT>";
var printModule = api.require('posPrinter');
var param =
{
taskList:
[
{
printerAddr: '98:D3:31:20:23:4A',
content: orderInfo,
keepAlive:true, //蓝牙打印机,建议把keepAlive设为true
copyNum: 2
},
{
printerAddr: '192.168.1.10',
content: orderInfo,
copyNum: 2
}
]
};
printModule.printOnSpecifiedPrinters(param);
##打印标签示例代码(标签打印机专用)
var printModule = api.require('posPrinter');
var param =
{
taskList:
[
{
printerAddr: 'u:85:Printer',
tscSetting:{
width:40,
height:30,
gap:2
},
tagContent:'<text size="30" bold="true" left="10" top="10">我的测试1</text><qr left="10" top="85" width="150">http://www.cailutong168.com</qr><img left="10" top="70">base64内容</img>',
//<qr>标签表示打印二维码
//tagContent里面所有标签都支持旋转属性,如rotate="45"表示旋转45度
//text标签可以使用center="1"表示居中,如果居中时,设置left="-10",表示居中后,再往左偏移10
keepAlive:true, //usb打印机,建议把keepAlive设为true
copyNum: 1
}
]
};
printModule.printOnSpecifiedPrinters(param);
iOS系统
可提供的1.0.0及更高版本
将打印内容发送到指定地址的打印机(蓝牙打印机为MAC地址,网口打印机为IP地址),支持多机打印
print({params})
taskList:
[
{
printerAddr: '98:D3:31:20:23:4A', //字符串;打印机地址
printerEncoding:'gbk', //打印机支持的编码格式,默认gbk
type:1, //打印机类型,默认是1。1:小票打印机,2:tsc标签打印机
tscSetting:{ //如果是TSC标签打印机,这个属性必须设置,如果忽略此属性,则此打印机为小票打印机
width:40, //标签的宽度,单位mm
height:30, //标签的高度,单位mm
gap:2 //每个标签之间的间隔,单位mm
},
content: orderInfo, //字符串;打印内容
keepAlive:true, //打印完毕后不断开连接,下次打印将使用同样的连接进行打印(蓝牙打印机建议设置为true)
cmd:[25,23,0] //打印内容的同时,一并发送指定的ESC/POS命令
copyNum: 2 //数值类型;重复打印次数,默认值为1
}
]
ret:
{
result: 'ok' //字符串;ok表示调用成功
}
err:
{
msg:'', //错误信息的汇总描述
errors:[ //用一个数组,描述打印发生的错误
{
taskIndex:0, //描述哪个打印任务发生错误
printerAddr:'', //发生错误的打印机地址
msg:'' //错误信息
}
],
}
var orderInfo;
orderInfo = "<CA>测试打印</CA><BR>";
orderInfo += "名称 单价 数量 金额<BR>";
orderInfo += "--------------------------------<BR>";
orderInfo += "番 1.0 1 1.0<BR>";
orderInfo += "番茄 10.0 10 10.0<BR>";
orderInfo += "番茄炒 10.0 100 100.0<BR>";
orderInfo += "番茄炒粉 100.0 100 100.0<BR>";
orderInfo += "番茄炒粉粉 1000.0 1 100.0<BR>";
orderInfo += "番茄炒粉粉粉粉 100.0 100 100.0<BR>";
orderInfo += "番茄炒粉粉粉粉 15.0 1 15.0<BR>";
orderInfo += "备注:快点送到<BR>";
orderInfo += "--------------------------------<BR>";
orderInfo += "合计:xx.0元<BR>";
orderInfo += "送货地点:xxxxxxxxxxxxxxxxx<BR>";
orderInfo += "联系电话:138000000000<BR>";
orderInfo += "订餐时间:2011-01-06 19:30:10<BR>";
orderInfo += " <BR> <BR>";
var printModule = api.require('posPrinter');
var param =
{
taskList:
[
{
printerAddr: '98:D3:31:20:23:4A',
content: orderInfo,
keepAlive:true, //蓝牙打印机,建议把keepAlive设为true
copyNum: 2
},
{
printerAddr: '192.168.1.10',
content: orderInfo,
copyNum: 2
}
]
};
printModule.print(param);
var printModule = api.require('posPrinter');
var param =
{
taskList:
[
{
printerAddr: 'u:85:Printer',
type:2,
tscSetting:{
width:40,
height:30,
gap:2
},
content:'<text size="30" bold="true" left="10" top="10">我的测试1</text><qr left="10" top="85" width="150">http://www.cailutong168.com</qr><img left="10" top="70">base64内容</img>',
//<qr>标签表示打印二维码
//tagContent里面所有标签都支持旋转属性,如rotate="45"表示旋转45度
//text标签可以使用center="1"表示居中,如果居中时,设置left="-10",表示居中后,再往左偏移10
keepAlive:true, //usb打印机,建议把keepAlive设为true
copyNum: 1
}
]
};
printModule.print(param);
Android系统
可提供的1.0.0及更高版本
向指定打印机发送 ESC/POS 指令(不了解ESC/POS指令慎用)
sendEscCommandToPrinter({params})
printerAddr:
decCmd:
ret:
{
result: 'ok' //字符串;ok表示调用成功
}
err:
{
msg:'' //错误信息描述
}
var printModule = api.require('posPrinter');
var param = {
'printerAddr': '98:D3:31:20:23:4A',
'decCmd': [27, 112, 0, 60, 255] // 向打印机发送打开钱箱指令
};
printModule.sendEscCommandToPrinter(param);
iOS系统,Android系统
可提供的1.1.0及更高版本
获取打印机状态(usb打印机此命令无效)
getPrinterStatus({params}, callback(ret, err))
printerAddr:
ret:
{
online : 'yes|no', // 字符串;打印机联机状态,yes表示在线,no表示离线
paper : 'yes|no', // 字符串; 打印机纸张状态,yes表示有纸,no表示缺纸
cashboxOpen : 'yes|no' //字符串;打印机连接的钱箱是否打开,yes表示开启,no表示关闭
}
err:
{
msg:'' //错误信息描述
}
var printModule = api.require('posPrinter');
var param = { printerAddr: '192.168.3.243' };
printModule.getPrinterStatus(param , function(ret , err)
{
alert("是否联机:" + ret.online + ", 有打印纸:" + ret.paper + ", 钱箱开启:" + ret.cashboxOpen);
});
iOS系统,Android系统
可提供的1.1.0及更高版本