更新记录
3.3.3(2024-07-05) 下载此版本
- 低版本兼容处理;
- 更新 lpapi-uniplugin.js文件,解决了IOS环境下获取不到打印机的问题;
3.3.2(2024-06-05) 下载此版本
- 解决了版本 3.3.1 中因动态权限申请失败导致的 无法获取打印机列表以及无法搜索BLE设备的问题;
- 备注:在上个版本中底层数据传输协议发生了变化,所以在使用最新版本插件的时候,需要同步的更新demo中所提供的 lpapi-uniplugin.js 文件。在最新版本中原生插件返回的数据格式为:{ statusCode: number, resultInfo: JSONArray},其中statusCode 表示返回的状态码,0表示成功,其他值一般情况下表示失败,在ble搜索的时候,1表示检测到ble设备,2表示搜索完毕。resultInfo表示具体每个接口所需要的数据。
3.3.1(2024-05-31) 下载此版本
- 新增BLE搜索功能;
- 增加在预览模式下,提交任务的时候返回BASE64预览图片的功能;
平台兼容性
Android | Android CPU类型 | iOS |
---|---|---|
适用版本区间:5.0 - 14.0 | armeabi-v7a:未测试,arm64-v8a:未测试,x86:未测试 | 适用版本区间:9 - 14 |
原生插件通用使用流程:
- 购买插件,选择该插件绑定的项目。
- 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
- 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
- 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
- 开发完毕后正式云打包
付费原生插件目前不支持离线打包。
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原生插件配置”->”云端插件“列表中删除该插件重新选择
UniPlugin-LPAPI 插件说明文档
联系方式
-
电话:021-65111580
-
邮箱:support@dothantech.com
-
全国服务热线:400-823-6599
使用方式
在需要的地方引入插件配套的 js 接口,根据实际需求,调用对应的接口函数,完成相关操作;
-
导入插件; 在插件市场中搜索LPAPI,进入之后,点击右侧的“购买for云打包”,选择目标项目,按照提示操作即可;
-
配置插件; 用HBuilderX打开目标项目,选择manifest.json,打开配置视图,在右侧选择“App原生插件配置”,找到“云端插件”,点击“选择云端插件”,勾选目标插件即可;
-
配置蓝牙权限; 标签打印机主要是用蓝牙进行数据传输的,所以在使用前需要配置先蓝牙操作权限;
<uses-permission android:name=\"android.permission.BLUETOOTH\"/> <uses-permission android:name=\"android.permission.BLUETOOTH_ADMIN\"/> <!-- BLE 搜索需要权限 --> <uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\" /> <uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\" /> <!-- Android 12新增权限 --> <uses-permission android:name=\"android.permission.BLUETOOTH_CONNECT\" /> <uses-permission android:name=\"android.permission.BLUETOOTH_SCAN\" />
-
再页面中导入封装的js接口;
import api from './lpapi-uniplugin';
-
调用接口函数,进行相关打印操作;
async printQrcode() { // 获取打印机列表 const printerList = await api.getPrinters(); // 获取打印机列表中的任意一台打印机; const printerName = printerList?.name; // 连接打印机 if (printerName) { await api.openPrinter(printerName); } // 开始打印任务 await api.startJob({ width: 45, height: 45, orientation: 0 }); // 打印二维码 await api.draw2DQRCode({ text: '德佟电子科技有限公司', x: 5, y: 5, width: 35 }); // 提交打印任务,开始打印 await api.commitJob(); // 再不需要继续打印的话可以关闭打印机,也可以关闭打印机; await api.closePrinter(); }
-
编译自定义基座; 调试模式下需要编译一个自定义基座才可以使用,打印机插件是原生插件,标准的基座是不加载原生插件的,所以要进行测试必须编译一个自定义基座才可以操作打印机; 自定义基座编译方法: 打开HBuilderX,选择菜单:运行-->运行到手机或模拟器-->制作自定义调试基座,根据实际情况选择相关选项,然后点击“打包”即可;
原生插件数据传输协议
在原生插件中回调参数数据类型为:
interface Response {
/**
* 请求状态码,0表示成功,其他表示失败,或者其他的有效状态。
* 在 BLE 搜索的时候,0表示请求成功,1表示检测到蓝牙设备,2表示本次蓝牙搜索完毕,其他表示失败。
*/
statusCode: number;
/**
* 具体的返回数据。
*/
resultInfo: any;
}
接口函数介绍
public interface LPAPI {
/**
* 插件初始化。
* 在插件初始化的时候,用户可以做一些全局配置,以及动态申请蓝牙权限等操作;
*/
init(options);
/**
* 动态申请蓝牙权限;
*/
requestBluetoothAuth();
/**
* 开始蓝牙搜索操作;
* @param {number} options.timeout 蓝牙搜索超时时间;
* @param {number} options.interval 蓝牙搜索设备上报间隔,单位毫秒;
*/
startDiscovery(options);
/**
* 停止蓝牙设备搜索操作;
*/
stopDiscovery(options);
/**
* 停止正在进行的蓝牙设备搜索操作;
*/
getBleDevices(options);
/**
* 获取指定型号的所有打印机;
* @param { string | {name?: string} } data 参数;
* @returns { {name: string}[] } 返回打印机信息列表;
*/
getPrinters(data);
/**
* 获取指定型号的一台打印机;
* @param { string | {name?: string} } data 参数;
* @returns { {name: string} } 返回检测到的第一台打印机;
*/
getFirstPrinter(data);
/**
* 打开目标打印机;
* @param { string | {name?: string}} data 参数;
*/
openPrinter(data);
/**
* 获取当前已连接打印机名称;
*/
getPrinterName();
/**
* 获取当前已连接打印机信息;
* 调用该接口前要确保打印机已连接;
*/
getPrinterInfo();
/**
* 当前打印机是否已经打开;
*/
isPrinterOpened();
/**
* 关闭打印机;
*/
closePrinter();
/**
* 打印BASE64图片;
* @param { {
* image: string,
* PRINT_DENSITY?: number,
* PRINT_SPEED?: number,
* PRINT_COPIES?: number
* } } data
*/
printImage(data);
/**
* 开始打印任务;
* @param { {
* width: number,
* height: number,
* orientation?: number
* } } data 参数;
*/
startJob(data);
/**
* 提交打印任务;
* @param {{
* GAP_TYPE: number, // 纸张类型,0:连续纸,1:定位孔,2:间隙纸,3,黑标纸,其他值无效
* PRINT_DARKNESS: number, // 打印浓度,值:0 - 14 之间;
* PRINT_SPEED: number, // 打印速度,值:0 - 4 之间;
* }} data 参数;
*/
commitJob(param);
printParamName: {
gapType: "GAP_TYPE",
printDarkness: "PRINT_DARKNESS",
printSpeed: "PRINT_SPEED",
},
printParamValue: {
gapType: {
/** 纸张类型:连续纸,value: 0 */
none: 0,
/** 纸张类型:定位孔,value: 1 */
hole: 1,
/** 纸张类型:间隙纸,value: 2 */
gap: 2,
/** 纸张类型:黑标纸,value: 3 */
black: 3,
},
printDarkness: {
/** 打印浓度:最低 */
min: 0,
/** 打印浓度:正常 */
normal: 5,
/** 打印浓度:最大 */
max: 14,
},
printSpeed: {
/** 打印速度:最慢 */
min: 0,
/** 打印熟读:正常 */
normal: 2,
/** 打印速度:最快 */
max: 4,
},
},
/**
* 结束打印任务;
*/
endJob();
/**
* 获取当前的打印任务;
*/
getJobPages();
//
/**
* 设置后续绘制参数,譬如字体名称,二维码纠错级别等等;
* @param { {
* name: string,
* value: *
* } } data 参数
*/
setDrawParam(data);
/**
* 设置后续内容的旋转方向;
* @param { number | { orientation: [0, 90, 180, 270]}} data 参数;
*/
setItemOrientation(data);
/**
* 设置水平对齐方式;
* @param { number | { alignment: [0, 1, 2]}} data 参数;
*/
setItemHorizontalAlignment(data);
/**
* 设置垂直对齐方式;
* @param { number | { alignment: [0, 1, 2]}} data 参数;
*/
setItemVerticalAlignment(data);
// ***************************************************
// * 打印相关图形对象。
// ***************************************************
/**
* 绘制字符串;
*
* @param {{}} data 字符串绘制参数;
* @param {string} data.text 待打印的字符串名称;
* @param {number} data.x 字符串显示的X轴坐标位置(单位毫米);
* @param {number} data.y 字符串显示的Y轴坐标位置(单位毫米);
* @param {number} data.width 字符串显示区域宽度(单位毫米);
* @param {number} data.height 字符串显示区域高度(单位毫米);
* @param {number} data.fontHeight 字体大小(单位毫米);
* @param {number} data.fontStyle 字体样式,默认位0;(0:常规,1:黑体,2:斜体,3:粗斜体)
* @param {string} data.fontName 字体名称,默认位"黑体";
* @param {boolean} data.autoReturn 字符串长度超过width之后,是否自动换行?默认位true;
* @param {0|90|180|270} data.orientation 字符串旋转方向?默认以setItemOrientation为准;如果未调用该函数,则为0;
* @param {0|1|2} data.horizontalAlignment 字符串在指定的宽高范围内的水平对齐方式,默认以setItemHorizontalAlignment为准,未设置则为0,表示居上对齐,值可为:0、1、2,分别表示左、中、右对齐;
* @param {0|1|2} data.verticalAlignment 字符串在指定的宽高范围内的垂直对齐方式,默认以setItemVerticalAlignment为准,未设置则为0,表示居上对齐,值可为:0、1、2,分别表示上、中、下对齐;
*
*/
drawText(data);
/**
* 绘制一维码;
* @param {{}} data 一维码绘制参数;
* @param {string} data.text, 一维码内容
* @param {number} data.x, 一维码在坐标系X轴上的位置;
* @param {number} data.y, 一维码在坐标系中Y轴上的位置;
* @param {number} data.width, 一维码在坐标系中的宽度;
* @param {number} data.height, 一维码高度;
* @param {number} data.textHeight, 一维码下面显示的字符串高度,不需要的话可以设置位0;
* @param {number} data.type 一维码类型:{@link BarcodeType}
* @param {0|90|180|270} data.orientation 字符串旋转方向?默认以setItemOrientation为准;如果未调用该函数,则为0;
* @param {0|1|2} data.horizontalAlignment 字符串在指定的宽高范围内的水平对齐方式,默认以setItemHorizontalAlignment为准,未设置则为0,表示居上对齐,值可为:0、1、2,分别表示左、中、右对齐;
* @param {0|1|2} data.verticalAlignment 字符串在指定的宽高范围内的垂直对齐方式,默认以setItemVerticalAlignment为准,未设置则为0,表示居上对齐,值可为:0、1、2,分别表示上、中、下对齐;
*
* @typedef{{
* UPC_A: 20,
* UPC_E: 21,
* EAN13: 22,
* EAN8: 23,
* CODE39: 24,
* ITF25: 25,
* CODABAR: 26,
* CODE93: 27,
* CODE128: 28,
* ISBN: 29,
* ECODE39: 30,
* AUTO: 60,
* }} BarcodeType 一维码类型
*/
draw1DBarcode(data);
/**
* 绘制二维码;
* @param {{}} data
* @param {string} data.text 二维码内容
* @param {number} data.x X轴坐标位置(单位毫米)
* @param {number} data.y Y轴坐标位置
* @param {number} data.width 二维码大小(单位毫米)
* @param {0|1|2|3} data.eccLevel 二维码纠错级别,0|1|2|3分别表示: L(低)|M(中)|Q(强)|H(高),默认为0,表示最低纠错级别
* @param {0|90|180|270} data.orientation 字符串旋转方向?默认以setItemOrientation为准;如果未调用该函数,则为0,表示不进行任何旋转;
* @param {0|1|2} data.horizontalAlignment 字符串在指定的宽高范围内的水平对齐方式,默认以setItemHorizontalAlignment为准,未设置则为0,表示居上对齐,值可为:0、1、2,分别表示左、中、右对齐;
* @param {0|1|2} data.verticalAlignment 字符串在指定的宽高范围内的垂直对齐方式,默认以setItemVerticalAlignment为准,未设置则为0,表示居上对齐,值可为:0、1、2,分别表示上、中、下对齐;
*/
draw2DQRCode(data);
/**
* 绘制矩形框;
* @param {{}} data
* @param {number} data.x X轴坐标位置(单位毫米)
* @param {number} data.y Y轴坐标位置(单位毫米)
* @param {number} data.width 绘制数据内容的宽度(单位毫米)
* @param {number} data.height 绘制数据内容的高度(单位毫米)
* @param {number} data.lineWidth 边框宽度(单位毫米),默认为0.4mm
* @param {0|90|180|270} data.orientation 字符串旋转方向?默认以setItemOrientation为准;如果未调用该函数,则为0,表示不进行任何旋转;
*/
drawRectangle(data);
/**
* 绘制填充矩形;
* @param {{}} data
* @param {number} data.x X轴坐标位置(单位毫米)
* @param {number} data.y Y轴坐标位置(单位毫米)
* @param {number} data.width 绘制数据内容的宽度(单位毫米)
* @param {number} data.height 绘制数据内容的高度(单位毫米)
* @param {0|90|180|270} data.orientation 字符串旋转方向?默认以setItemOrientation为准;如果未调用该函数,则为0,表示不进行任何旋转;
*/
fillRectangle(data);
/**
* 绘制圆角矩形框;
* @param {{}} data
* @param {number} data.x X轴坐标位置(单位毫米)
* @param {number} data.y Y轴坐标位置(单位毫米)
* @param {number} data.width 绘制数据内容的宽度(单位毫米)
* @param {number} data.height 绘制数据内容的高度(单位毫米)
* @param {number} data.cornerWidth 圆角半径(单位毫米)
* @param {number} data.cornerHeight 圆角半径(单位毫米)
* @param {number} data.lineWidth 边框宽度(单位毫米)
* @param {0|90|180|270} data.orientation 字符串旋转方向?默认以setItemOrientation为准;如果未调用该函数,则为0,表示不进行任何旋转;
*/
drawRoundRectangle(data);
/**
* 填充圆角矩形;
* @param {{}} data
* @param {number} data.x X轴坐标位置(单位毫米)
* @param {number} data.y Y轴坐标位置(单位毫米)
* @param {number} data.width 绘制数据内容的宽度(单位毫米)
* @param {number} data.height 绘制数据内容的高度(单位毫米)
* @param {number} data.cornerWidth 圆角半径(单位毫米)
* @param {number} data.cornerHeight 圆角半径(单位毫米)
* @param {0|90|180|270} data.orientation 字符串旋转方向?默认以setItemOrientation为准;如果未调用该函数,则为0,表示不进行任何旋转;
*/
fillRoundRectangle(data);
/**
* 绘制椭圆;
* @param {{}} data
* @param {number} data.x X轴坐标位置(单位毫米)
* @param {number} data.y Y轴坐标位置(单位毫米)
* @param {number} data.width 绘制数据内容的宽度(单位毫米)
* @param {number} data.height 绘制数据内容的高度(单位毫米)
* @param {number} data.lineWidth 边框宽度(单位毫米)
* @param {0|90|180|270} data.orientation 字符串旋转方向?默认以setItemOrientation为准;如果未调用该函数,则为0,表示不进行任何旋转;
*/
drawEllipse(data);
/**
* 填充椭圆;
* @param {{}} data
* @param {number} data.x X轴坐标位置(单位毫米)
* @param {number} data.y Y轴坐标位置(单位毫米)
* @param {number} data.width 绘制数据内容的宽度(单位毫米)
* @param {number} data.height 绘制数据内容的高度(单位毫米)
* @param {0|90|180|270} data.orientation 字符串旋转方向?默认以setItemOrientation为准;如果未调用该函数,则为0,表示不进行任何旋转;
*/
fillEllipse(data);
/**
* 绘制圆形;
* @param {{}} data
* @param {number} data.x 圆心X轴坐标位置(单位毫米)
* @param {number} data.y 圆心Y轴坐标位置(单位毫米)
* @param {number} data.radius 圆半径(单位毫米)
* @param {number} data.lineWidth 边框宽度(单位毫米)
*/
drawCircle(data);
/**
* 填充圆;
* @param {{}} data
* @param {number} data.x 圆心X轴坐标位置(单位毫米)
* @param {number} data.y 圆心Y轴坐标位置(单位毫米)
* @param {number} data.radius 圆半径(单位毫米)
*/
fillCircle(data);
/**
* 绘制直线;
* @param {{}} data
* @param {number} data.x1 起点X轴坐标位置(单位毫米)
* @param {number} data.y1 起点Y轴坐标位置(单位毫米)
* @param {number} data.x2 终点X轴坐标位置(单位毫米)
* @param {number} data.y2 终点Y轴坐标位置(单位毫米)
* @param {number} data.lineWidth 线条宽度(单位毫米)
* @param {0|90|180|270} data.orientation 字符串旋转方向?默认以setItemOrientation为准;如果未调用该函数,则为0,表示不进行任何旋转;
*/
drawLine(data);
/**
* 绘制虚线;
* @param {{}} data
* @param {number} data.x1 起点X轴坐标位置(单位毫米)
* @param {number} data.y1 起点Y轴坐标位置(单位毫米)
* @param {number} data.x2 终点X轴坐标位置(单位毫米)
* @param {number} data.y2 终点Y轴坐标位置(单位毫米)
* @param {number} data.dashLen[], 电话线线段长度数组(单位毫米)
* @param {number} data.lineWidth 线条宽度(单位毫米)
* @param {0|90|180|270} data.orientation 字符串旋转方向?默认以setItemOrientation为准;如果未调用该函数,则为0,表示不进行任何旋转;
*/
drawDashLine(data);
/**
* 绘制图片;
* @param {{}} data
* @param {string} data.image
* @param {number} data.x X轴坐标位置(单位毫米)
* @param {number} data.y Y轴坐标位置(单位毫米)
* @param {number} data.width 绘制数据内容的宽度(单位毫米)
* @param {number} data.height 绘制数据内容的高度(单位毫米)
* @param {number} data.threshold 黑白转换阈值,默认是192
* @param {0|90|180|270} data.orientation 字符串旋转方向?默认以setItemOrientation为准;如果未调用该函数,则为0,表示不进行任何旋转;
*/
drawImage(data);