posPrinter

createBondToPrinter removeBondToPrinter print getPrinterStatus

概述

posPrinter 支持各品牌小票(热敏)打印机以及TSC标签打印机,可同时连接多台蓝牙、网口打印机,通过向打印机发送指令直接打印,无需安装驱动。

posPrinter 支持多机同时打印,可自定义打印格式,打印联数,非常适用于打印收银小票、堂食/外卖订单、超市结账单等。

  • 使用蓝牙打印机:

    使用蓝牙打印机前,要把平板(或手机)和蓝牙打印机绑定。 手动绑定蓝牙打印机时,在手机或平板的蓝牙管理界面,搜索蓝牙设备,待搜索到蓝牙打印机后,进行绑定。然后调用模块的 print 函数,把打印内容发送到绑定的打印机。 备注:(ios只支持蓝牙4.0的打印机,选购蓝牙打印机,请确定打印机是否支持ios)

  • 使用网口打印机:

    使用网口打印机前,要保证网口打印机的IP地址和平板(手机)在同一个网段,即:IP地址的前三部分相同,建议将网口打印机和和平板(手机)连接到同一个路由器。然后调用 print,在参数中传入网口打印机的IP地址和打印内容,进行打印。

  • 使用USB打印机:

    使用USB打印机前,要保证用USB线正确连接平板(手机)和打印机,如果是wifi+usb类型的打印机,打印机开机后,需要等待wifi状态检测完毕,才可以使用usb打印。然后调用 print,在参数中传入USB打印机的地址和打印内容,进行打印。

  • 多台打印机同时打印:

    当配置多台打印机进行打印时,调用 print 函数,传入蓝牙打印机的MAC地址或网口打印机的IP地址,以及对应的打印内容,模块根据地址格式自动判断打印机类型,并将打印内容发送至指定打印机。

  • 小票打印机 - 打印格式说明:
  • 58mm 热敏打印机小票参考格式:
  1. 名称      单价 数量 金额<BR>
  2. --------------------------------<BR>
  3. 番       1.0 1 1.0<BR>
  4. 番茄      10.0 10 10.0<BR>
  5. 番茄炒     10.0 100 100.0<BR>
  6. 番茄炒粉    100.0 100 100.0<BR>
  7. 番茄炒粉粉   1000.0 1 100.0<BR>
  8. 番茄炒粉粉粉粉 100.0 100 100.0<BR>
  9. 番茄炒粉粉粉粉 15.0 1 15.0<BR>
  10. 备注:快点送到<BR>
  11. --------------------------------<BR>
  12. 合计:xx.0元<BR>
  13. 送货地点:xxxxxxxxxxxxxxxxx<BR>
  14. 联系电话:138000000000<BR>
  15. 订餐时间:2011-01-06 19:30:10<BR>
  16. --------------------------------<BR>
  17. <QR>(300)http://www.apicloud.com/</QR><BR>
  18. <BR>
  19. ----------<CUT>----------<BR>
  20. <BR>
  • 80mm 热敏打印机小票参考格式:
  1. <AB>桌号:22</AB><BR>
  2. ------------------------------------------------<BR>
  3. <BL>测试餐厅名称(上菜单)</BL><BR>
  4. ************************************************<BR>
  5. <L>订单流水号:T00000000030007(堂食)</L><BR>
  6. ------------------------------------------------<BR>
  7. 菜品名称 单价 数量 金额<BR>
  8. ------------------------------------------------<BR>
  9. 牛肉圆葱(大) 30 1 30<BR><BR>
  10. 素三鲜(大) 28 1 28<BR><BR>
  11. 韭菜鸡蛋(大) 28 1 28<BR><BR>
  12. ------------------------------------------------<BR>
  13. <B> 应收金额:86 元</B><BR>
  14. <B>优惠方式:减5元 优惠金额:5 元</B><BR>
  15. <B> 实收金额:81 元</B><BR>
  16. ------------------------------------------------<BR>
  17. 就餐人数:1 备注: <BR>
  18. ------------------------------------------------<BR>
  19. 收银员:张三 结算方式:现金<BR>
  20. Pos机:0003 订餐时间:2016-09-12 14:36:55<BR>
  21. ************************************************<BR>
  22. 分店地址:测试餐厅地址<BR>
  23. 订餐电话:010-12345678<BR>
  24. <BR>
  25. <QR>(300)http://www.apicloud.com/</QR><BR>
  26. ---------------------<CUT>--------------------------<BR>
  27. <BR>
  • 打印二维码参考格式(1.1.0及以上版本支持): (300):表示大小为300
  1. <QR>(300)http://www.apicloud.com/</QR><BR>
  • 打印base64编码图片参考格式(1.1.0及以上版本支持):

    1. <BR>
    2. <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>
    3. <BR>

getBluetoothPrinters

获取蓝牙打印机列表

getBluetoothPrinters({params}, callback(ret, err))

status:

  • 类型:字符串
  • 描述:(可选项)表示要获取绑定的设备还是搜索周边所有蓝牙设备
  • 取值范围:bonded | all 默认值为 all
  • 示例: 传入 {status: ‘bonded’} 获取绑定的蓝牙设备,null 或 {status: ‘all’} 搜索周边所有蓝牙设备

callback(ret, err)

ret:

  • 类型:JSON数组,其中每一个JSON对象代表一个蓝牙设备
  • 内部字段:
  1. [
  2. {
  3. name: '' //字符串;蓝牙设备名称
  4. address '' // 字符串;蓝牙设备地址
  5. isBonded true|false // 布尔值; 该蓝牙设备是否已绑定
  6. }
  7. ]

err:

  • 类型:JSON对象
  • 内部字段:
  1. {
  2. msg:'' //错误信息描述
  3. }

示例代码

  1. var printModule = api.require('posPrinter');
  2. var param = {
  3. 'status': 'bonded'
  4. };
  5. printModule.getBluetoothPrinters(param, function (ret, err) {
  6. alert(JSON.stringify(ret));
  7. });

补充说明

搜索周边所有蓝牙设备时,需要30秒左右才能返回搜索到的设备列表

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

getUsbPrinters

获取USB打印机列表

getUsbPrinters(callback(ret, err))

callback(ret, err)

ret:

  • 类型:JSON数组,其中每一个JSON对象代表一个USB设备
  • 内部字段:
  1. [
  2. {
  3. name:'' //字符串;USB 设备名称
  4. address '' // 字符串;USB 设备地址
  5. }
  6. ]
  • 类型:JSON对象
  • 内部字段:
  1. msg:'' //错误信息描述
  2. }

示例代码

  1. var printModule = api.require('posPrinter');
  2. printModule.getUsbPrinters(function (ret, err) {
  3. alert(JSON.stringify(ret));
  4. });

补充说明

USB打印机的地址,形式为:u:256:Printer(以”:Printer”结尾的地址,一般为打印机)

可用性

Android系统

可提供的1.0.0及更高版本

createBondToPrinter

绑定蓝牙打印机

createBondToPrinter({params}, callback(ret, err))

params

address:

  • 类型:字符串
  • 描述:(必填项)蓝牙打印机 MAC 地址

pin:

  • 类型:字符串
  • 描述:(可选项)绑定蓝牙设备时需要输入的pin码
  • 默认值: 0000

callback(ret, err)

ret:

  • 类型:JSON对象
  • 内部字段:

err:

  • 类型:JSON对象
  • 内部字段:
  1. {
  2. msg:'' //错误信息描述
  3. }
  1. api.showProgress({
  2. style: 'default',
  3. animationType: 'fade',
  4. title: '正在绑定...',
  5. text: '请稍等...',
  6. modal: true
  7. });
  8. var module = api.require('posPrinter');
  9. module.createBondToPrinter({
  10. address:"58:52:00:00:2E:43"
  11. } , function(ret,err)
  12. {
  13. api.hideProgress();
  14. if(err){
  15. alert(JSON.stringify(err));
  16. }
  17. else if(ret && ret.result == "ok"){
  18. }
  19. });

可用性

Android系统

可提供的1.0.0及更高版本

removeBondToPrinter

将指定的蓝牙打印机解除绑定

removeBondToPrinter({params}, callback(ret, err))

params

address:

  • 类型:字符串
  • 描述:(必填项)要解除绑定的蓝牙打印机 MAC 地址

callback(ret, err)

ret:

  • 类型:JSON对象
  • 内部字段:
  1. {
  2. result: 'ok' //字符串;ok表示解绑成功
  3. }

err:

  • 类型:JSON对象
  • 内部字段:
  1. {
  2. msg:'' //错误信息描述
  3. }

示例代码

  1. var printModule = api.require('posPrinter');
  2. var param = {
  3. 'address': '98:D3:31:20:23:4A'
  4. };
  5. printModule.removeBondToPrinter(param, function (ret, err) {
  6. alert(JSON.stringify(ret));
  7. });

可用性

Android系统

可提供的1.0.0及更高版本

printOnSpecifiedPrinters

将打印内容发送到指定地址的打印机(蓝牙打印机为MAC地址,网口打印机为IP地址),支持多机打印

printOnSpecifiedPrinters({params})

params

taskList:

  • 类型:JSON数组
  • 描述:(必填项)打印机、打印内容、重复打印次数组成的JSON对象数组
  • 内部字段:
  1. [
  2. {
  3. printerAddr: '98:D3:31:20:23:4A', //字符串;打印机地址
  4. tscSetting:{ //如果是TSC标签打印机,这个属性必须设置,如果忽略此属性,则此打印机为小票打印机
  5. width:40, //标签的宽度,单位mm
  6. height:30, //标签的高度,单位mm
  7. gap:2 //每个标签之间的间隔,单位mm
  8. },
  9. tagContent:'<text>我的测试1</text>', //设置标签打印的内容,TSC标签打印机专用属性,设置此属性,content属性可以忽略
  10. content: orderInfo, //字符串;打印内容
  11. keepAlive:true, //打印完毕后不断开连接,下次打印将使用同样的连接进行打印(蓝牙打印机建议设置为true)
  12. cmd:[25,23,0] //打印内容的同时,一并发送指定的ESC/POS命令
  13. copyNum: 2 //数值类型;重复打印次数,默认值为1
  14. }
  15. ]

callback(ret, err)

ret:

  • 类型:JSON对象
  • 内部字段:
  1. {
  2. result: 'ok' //字符串;ok表示调用成功
  3. }

err:

  • 类型:JSON对象
  • 内部字段:
  1. {
  2. msg:'', //错误信息的汇总描述
  3. errors:[ //用一个数组,描述打印发生的错误
  4. {
  5. taskIndex:0, //描述哪个打印任务发生错误
  6. printerAddr:'', //发生错误的打印机地址
  7. msg:'' //错误信息
  8. }
  9. ],
  10. }

打印小票示例代码(小票打印机专用)

  1. var orderInfo;
  2. orderInfo = "<CA>测试打印</CA><BR>";
  3. orderInfo += "名称      单价 数量 金额<BR>";
  4. orderInfo += "--------------------------------<BR>";
  5. orderInfo += "番       1.0 1 1.0<BR>";
  6. orderInfo += "番茄      10.0 10 10.0<BR>";
  7. orderInfo += "番茄炒     10.0 100 100.0<BR>";
  8. orderInfo += "番茄炒粉    100.0 100 100.0<BR>";
  9. orderInfo += "番茄炒粉粉   1000.0 1 100.0<BR>";
  10. orderInfo += "番茄炒粉粉粉粉 100.0 100 100.0<BR>";
  11. orderInfo += "番茄炒粉粉粉粉 15.0 1 15.0<BR>";
  12. orderInfo += "备注:快点送到<BR>";
  13. orderInfo += "--------------------------------<BR>";
  14. orderInfo += "合计:xx.0元<BR>";
  15. orderInfo += "送货地点:xxxxxxxxxxxxxxxxx<BR>";
  16. orderInfo += "联系电话:138000000000<BR>";
  17. orderInfo += "订餐时间:2011-01-06 19:30:10<BR>";
  18. orderInfo += "<QR>(300)http://www.baidu.com</QR><BR>";
  19. orderInfo += " <CUT>";
  20. var printModule = api.require('posPrinter');
  21. var param =
  22. {
  23. taskList:
  24. [
  25. {
  26. printerAddr: '98:D3:31:20:23:4A',
  27. content: orderInfo,
  28. keepAlive:true, //蓝牙打印机,建议把keepAlive设为true
  29. copyNum: 2
  30. },
  31. {
  32. printerAddr: '192.168.1.10',
  33. content: orderInfo,
  34. copyNum: 2
  35. }
  36. ]
  37. };
  38. printModule.printOnSpecifiedPrinters(param);

打印标签示例代码(标签打印机专用)

  1. var printModule = api.require('posPrinter');
  2. var param =
  3. {
  4. taskList:
  5. [
  6. printerAddr: 'u:85:Printer',
  7. tscSetting:{
  8. width:40,
  9. height:30,
  10. gap:2
  11. },
  12. 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>',
  13. //<qr>标签表示打印二维码
  14. //tagContent里面所有标签都支持旋转属性,如rotate="45"表示旋转45度
  15. //text标签可以使用center="1"表示居中,如果居中时,设置left="-10",表示居中后,再往左偏移10
  16. keepAlive:true, //usb打印机,建议把keepAlive设为true
  17. copyNum: 1
  18. }
  19. };
  20. printModule.printOnSpecifiedPrinters(param);

可用性

可提供的1.0.0及更高版本

print

将打印内容发送到指定地址的打印机(蓝牙打印机为MAC地址,网口打印机为IP地址),支持多机打印

print({params})

taskList:

  • 类型:JSON数组
  • 描述:(必填项)打印机、打印内容、重复打印次数组成的JSON对象数组
  • 内部字段:

callback(ret, err)

ret:

  • 类型:JSON对象
  • 内部字段:
  1. {
  2. result: 'ok' //字符串;ok表示调用成功
  3. }

err:

  • 类型:JSON对象
  • 内部字段:
  1. {
  2. msg:'', //错误信息的汇总描述
  3. errors:[ //用一个数组,描述打印发生的错误
  4. {
  5. taskIndex:0, //描述哪个打印任务发生错误
  6. printerAddr:'', //发生错误的打印机地址
  7. msg:'' //错误信息
  8. }
  9. ],
  10. }

打印小票示例代码

  1. var orderInfo;
  2. orderInfo = "<CA>测试打印</CA><BR>";
  3. orderInfo += "名称      单价 数量 金额<BR>";
  4. orderInfo += "--------------------------------<BR>";
  5. orderInfo += "番       1.0 1 1.0<BR>";
  6. orderInfo += "番茄      10.0 10 10.0<BR>";
  7. orderInfo += "番茄炒     10.0 100 100.0<BR>";
  8. orderInfo += "番茄炒粉    100.0 100 100.0<BR>";
  9. orderInfo += "番茄炒粉粉   1000.0 1 100.0<BR>";
  10. orderInfo += "番茄炒粉粉粉粉 100.0 100 100.0<BR>";
  11. orderInfo += "番茄炒粉粉粉粉 15.0 1 15.0<BR>";
  12. orderInfo += "备注:快点送到<BR>";
  13. orderInfo += "--------------------------------<BR>";
  14. orderInfo += "合计:xx.0元<BR>";
  15. orderInfo += "送货地点:xxxxxxxxxxxxxxxxx<BR>";
  16. orderInfo += "联系电话:138000000000<BR>";
  17. orderInfo += "订餐时间:2011-01-06 19:30:10<BR>";
  18. orderInfo += " <BR> <BR>";
  19. var printModule = api.require('posPrinter');
  20. var param =
  21. {
  22. taskList:
  23. [
  24. {
  25. printerAddr: '98:D3:31:20:23:4A',
  26. content: orderInfo,
  27. keepAlive:true, //蓝牙打印机,建议把keepAlive设为true
  28. copyNum: 2
  29. },
  30. {
  31. printerAddr: '192.168.1.10',
  32. content: orderInfo,
  33. copyNum: 2
  34. }
  35. ]
  36. };
  37. printModule.print(param);

打印标签示例代码

  1. var printModule = api.require('posPrinter');
  2. var param =
  3. {
  4. taskList:
  5. [
  6. {
  7. printerAddr: 'u:85:Printer',
  8. type:2,
  9. tscSetting:{
  10. width:40,
  11. height:30,
  12. gap:2
  13. },
  14. 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>',
  15. //<qr>标签表示打印二维码
  16. //tagContent里面所有标签都支持旋转属性,如rotate="45"表示旋转45度
  17. //text标签可以使用center="1"表示居中,如果居中时,设置left="-10",表示居中后,再往左偏移10
  18. keepAlive:true, //usb打印机,建议把keepAlive设为true
  19. copyNum: 1
  20. }
  21. ]
  22. };
  23. printModule.print(param);

可用性

Android系统

可提供的1.0.0及更高版本

sendEscCommandToPrinter

向指定打印机发送 ESC/POS 指令(不了解ESC/POS指令慎用)

sendEscCommandToPrinter({params})

params

printerAddr:

  • 类型:字符串
  • 描述:(必填项)蓝牙打印机地址(可通过getBluetoothPrinters获取)、IP打印机地址、USB打印机地址(可通过getUsbPrinters获取)

decCmd:

  • 类型:JSON数组
  • 描述:(必填项)以十进制数字组成的 ESC/POS 指令数组
  • 示例: 传入 [27, 112, 0, 60, 255] 表示打开钱箱指令,传入[29, 86, 66, 0] 表示切纸命令

callback(ret, err)

ret:

  • 类型:JSON对象
  • 内部字段:
  1. {
  2. result: 'ok' //字符串;ok表示调用成功
  3. }

err:

  • 类型:JSON对象
  • 内部字段:
  1. {
  2. msg:'' //错误信息描述
  3. }

示例代码

  1. var printModule = api.require('posPrinter');
  2. var param = {
  3. 'printerAddr': '98:D3:31:20:23:4A',
  4. 'decCmd': [27, 112, 0, 60, 255] // 向打印机发送打开钱箱指令
  5. };
  6. printModule.sendEscCommandToPrinter(param);

可用性

iOS系统,Android系统

可提供的1.1.0及更高版本

getPrinterStatus

获取打印机状态(usb打印机此命令无效)

getPrinterStatus({params}, callback(ret, err))

params

printerAddr:

  • 类型:字符串
  • 描述:(必填项)打印机Mac地址或IP地址

callback(ret, err)

ret:

  • 类型:JSON对象
  • 内部字段:
  1. {
  2. online 'yes|no', // 字符串;打印机联机状态,yes表示在线,no表示离线
  3. paper 'yes|no', // 字符串; 打印机纸张状态,yes表示有纸,no表示缺纸
  4. cashboxOpen : 'yes|no' //字符串;打印机连接的钱箱是否打开,yes表示开启,no表示关闭
  5. }

err:

  • 类型:JSON对象
  • 内部字段:
  1. {
  2. msg:'' //错误信息描述
  3. }
  1. var printModule = api.require('posPrinter');
  2. var param = { printerAddr: '192.168.3.243' };
  3. printModule.getPrinterStatus(param , function(ret , err)
  4. {

可用性

iOS系统,Android系统

可提供的1.1.0及更高版本