posPrinter

来自于:开发者立即使用

概述

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

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

  • 使用蓝牙打印机:

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

  • 使用网口打印机:

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

  • 使用USB打印机:

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

  • 多台打印机同时打印:

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

  • 打印格式标签说明(每行只能有一个格式控制标签):
<BR>为换行符
<CUT>为切纸符
<A></A>为放大
<B></B>为加粗
<L></L>字体2倍高度
<C></C>为居中
<CA></CA>为居中放大
<BL></BL>为倍高加粗
<AB></AB>为放大加粗
<QR></QR>按标签内的内容生成二维码并打印
<BASE64></BASE64>将标签内的base64编码还原为图片并打印
  • 58mm 热敏打印机小票参考格式:
<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>http://www.apicloud.com/</QR><BR>
   <BR>
----------<CUT>----------<BR>
   <BR>
  • 80mm 热敏打印机小票参考格式:
<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>http://www.apicloud.com/</QR><BR>
---------------------<CUT>--------------------------<BR>
  <BR>
  • 打印二维码参考格式(1.1.0及以上版本支持):
<QR>http://www.apicloud.com/</QR><BR>
  • 打印base64编码图片参考格式(1.1.0及以上版本支持):
    <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

获取蓝牙打印机列表

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

params

status:

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

callback(ret, err)

ret:

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

err:

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

        {
            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及更高版本

createBondToPrinter

绑定蓝牙打印机

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

params

address:

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

pin:

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

callback(ret, err)

ret:

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

err:

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

        {
            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及更高版本

getUsbPrinters

获取USB打印机列表

getUsbPrinters(callback(ret, err))

callback(ret, err)

ret:

  • 类型:JSON数组,其中每一个JSON对象代表一个USB设备
  • 内部字段:
[
    {
        name:''         //字符串;USB 设备名称
        address:  ''    // 字符串;USB 设备地址
    }
]

err:

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

        {
            msg:''       //错误信息描述
        }

示例代码

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

补充说明

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

可用性

Android系统

可提供的1.0.0及更高版本

removeBondToPrinter

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

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

params

address:

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

callback(ret, err)

ret:

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

err:

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

        {
            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及更高版本

printOnSpecifiedPrinters

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

printOnSpecifiedPrinters({params})

params

taskList:

  • 类型:JSON数组
  • 描述:(必填项)打印机、打印内容、重复打印次数组成的JSON对象数组
  • 内部字段:
[
    {
        printerAddr: '98:D3:31:20:23:4A',  //字符串;打印机地址
        content: orderInfo,     //字符串;打印内容
        keepAlive:true,       //打印完毕后不断开连接,下次打印将使用同样的连接进行打印(蓝牙打印机建议设置为true)
        cmd:[25,23,0]           //打印内容的同时,一并发送指定的ESC/POS命令
        copyNum: 2                 //数值类型;重复打印次数,默认值为1 
    }
]

callback(ret, err)

ret:

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

err:

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

        {
            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.printOnSpecifiedPrinters(param);

可用性

iOS系统,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对象
  • 内部字段:
{
    result:     'ok'   //字符串;ok表示调用成功
}

err:

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

        {
            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及更高版本

getPrinterStatus

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

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

params

printerAddr:

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

callback(ret, err)

ret:

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

err:

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

        {
            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及更高版本