更新记录

v1.0.9(2022-03-18)

增加barCode的displayCode隐藏功能

v1.0.8(2021-09-28)

1.支持语音播报,中英文 2.震动手机

v1.0.7(2021-05-08)

修复偶发性bug,打印34报错

查看更多

平台兼容性

Android Android CPU类型 iOS
适用版本区间:5.0 - 9.0 armeabi-v7a:支持,arm64-v8a:支持,x86:支持 ×

原生插件通用使用流程:

  1. 购买插件,选择该插件绑定的项目。
  2. 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
  3. 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
  4. 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
  5. 开发完毕后正式云打包

付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios

注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择


前言

此文档供有 uni-app 开发经验的人阅读。当 uni-app 需要调用 A980 手持打印机的时候,需要用到我们原生插件包。使用自定义基座打包生成 APP。

说明,本程序运行在手持设备 A980 的手持打印机上,普通安卓设备运行,会报错,打印失败:16

没有废话,直奔主题,上代码

第一步:导入

// 获取 module
var printModule = uni.requireNativePlugin("lianjiao-pda")

第二步:测试

先初始化,否则偶发性报错34,在onload里APP启动时候就直接调用。

printModule.init((ret) => {
                    uni.showToast({
                        title: ret,
                        duration: 2000
                    });
                });

测试打印

printModule.sendControlCommand({
                    "name": "test"
                },(ret) => {
                    modal.toast({
                        message: ret,
                        duration: 1.5
                    });
                });

第三步:自定义打印内容

var printData = {
    "name": "printCustom",
    "data": {
        "preview":false,
        "width":384,
        "height":260,
        "qrcode": {
            "text": "1234567890",
            "width": 140,
            "height": 140,
            "left": 0,
            "top": 0
        },
        "barcode": {
            "text": "1234567890",
            "width": 345,
            "height": 60,
            "left": 0,
            "top": 120
        },
        "texts": [{
            "text": "货品编号:1234567890",
            "size": 20,
            "x": 25,
            "y": 240,
            "bold": true
        }]
    }

}
printModule.sendControlCommand(printData,(ret) => {
    modal.toast({
        message: ret,
        duration: 1.5
    });
});

自定义打印模块说明

当发送的对象 name 为 printCustom 的时候,则为自定义模版打印。这个时候 data 必须有数据,数据有三个属性 qrcode,barcode 和 texts。qrcode 是二维码,barcode 是条形码,texts 是文字,文字需要自己计算换行。设备不会自动换行。根据需要设定自己的打印内容。

width:打印区域宽度;

height:打印区域高度;

| 字段 | 说明 | | data.preview | 是否为预览 | | data.qrcode | 二维码 | | data.barcode | 条形码 | | data.texts | 文字列表 | | data.width | 打印区域宽度 | | data.height | 打印区域高度 | | data.texts[0].x | x 坐标 | | data.texts[0].y | y 坐标 | | data.texts[0].bold | 是否加粗 |

第四步:打印图片

图片是以 base64 的格式发送给打印机的

printModule.sendControlCommand({
                    "name": "printImage",
                    "data":{                        
                        "concentration":25,//打印浓度                       
                        "img":"xxx"//此处为base64转码后的图片,因为uni的md文档解析有bug,所以在这里不放base64转码后的字符了
                    }
                },(ret) => {
                    uni.showToast({
                        title: ret,
                        duration: 2000
                    });
                });

图片打印模块说明

当发送的对象 name 为 printImage 的时候,则为图片格式打印。这个时候,img 里为图片的 base64 编码的图片信息。concentration 为打印浓度。默认为 25,可不处理。

第五步:退纸与进纸

改变标签纸的位置,适当进行退纸或者进纸,也可以在每次打印完之后调用一下,方便撕纸。

movePaper(param){
    //param "1B4Axx":进纸;   "1B4Bxx":退纸;   xx:步幅
    printModule.sendControlCommand({
        'name': 'movePaper',
        'data':param
    },(ret) => {
        uni.showToast({
            title: ret,
            duration: 2000
        });
    });
}

第六步:混合打印

当需要打印的内容跟超时购物小票一样的时候,可以选择混合打印。这种打印方式比较适合类似清单那种,文字居多,长篇幅的打印。

printModule.sendControlCommand({
                    'name': 'printMix',
                    'data':[{
                                printType:0,
                                text:"收 银 凭 据\n",
                                textSize:"2x",
                                alignment:"middle"
                            },{
                                text:"时间: 2016-11-15     16:00\n"
                            },{
                                text:"操作员: admin\n"
                            },{
                                text:"收据单号:1234567890\n"
                            },{
                                text:"编号  数量  单价  折扣  小计\n"
                            },{
                                text:"-----------------------------\n"
                            },{
                                text:"A920   1  1200  0   1200\n"
                            },{
                                text:"A921   1  1300  0   1300\n"
                            },{
                                text:"A930   1  1400  0   1400\n"
                            },{
                                text:"-----------------------------\n"
                            },{
                                text:"共销售数量: 3 \n"
                            },{
                                text:"售价合计(RMB): 8800\n"
                            },{
                                text:"实收金额(RMB): 10000\n"
                            },{
                                text:"找零金额(RMB): 1200\n"
                            },{
                                text:"\n"
                            },{
                                text:"-----------------------------\n"
                            },{
                                text:"支付方式: 微信支付 \n"
                            },{
                                text:"欢迎下次光临    请保留好小票!\n"
                            },{
                                text:"-----------------------------\n"
                            },{
                                text:"   谢谢惠顾\n",
                                textSize:"2x"
                            },{
                                text:"\n"
                            },{
                                printType:1,
                                text:"1234567890",
                                width:300,
                                height:60,
                                displayCode:true,
                                left:30
                            },{
                                textSize:"1x",
                                text:"\n     扫一扫下载APP更多优惠\n"
                            },{
                                text:"\n\n"
                            },{
                                printType:2,
                                text:"1234567890",
                                width:300,
                                height:300,
                                left:100
                            },{
                                text:"\n1个月之内可凭票至服务台开具发票!\n"
                            },{
                                text:"\n\n"
                            },{
                                text:"\n\n\n"
                            }]
                },(ret) => {
                    uni.showToast({
                        title: ret,
                        duration: 2000
                    });
                });

第七步:检测黑标

当打印完成后,如果是不干胶打印的,打印完一个之后没有走到退纸位置,则可以调用检测黑标,则会调用检测方法,走纸到下一个标签开始位置。如果觉得撕纸还是不方便,可以再手动走纸一个单位。 记得黑标检测应该再打印完成事件触发回调之后再调用。

printModule.sendControlCommand({
                    'name': 'checkBlack'
                },(ret) => {
                    uni.showToast({
                        title: ret,
                        duration: 2000
                    });
                });

第七步:语音播报

具体使用还请参见示例工程

printModule.playVoice('失败了');

printModule.playVoice('test');

第八步:震动手机

具体使用还请参见示例工程

//震动时长:单位毫秒,800毫秒
printModule.vibrate(800);

隐私、权限声明

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

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

插件不采集任何数据

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

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问