蓝牙连接德佟打印机打印
1、导入插件; 在插件市场中搜索LPAPI,进入之后,点击右侧的“购买for云打包”,选择目标项目,按照提示操作即可;
2、 配置插件; 用HBuilderX打开目标项目,选择manifest.json,打开配置视图,在右侧选择“App原生插件配置”,找到“云端插 件”,点击“选择云端插件”,勾选目标插件即可;
3、配置蓝牙权限; 标签打印机主要是用蓝牙进行数据传输的,所以在使用前需要配置先蓝牙操作权限;
<uses-permission android:name=\"android.permission.BLUETOOTH\"/>
<uses-permission android:name=\"android.permission.BLUETOOTH_ADMIN\"/>
<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>
// 解决调用打印机后界面跳转的时候出现的APP闪退的问题。
<!-- Android 12新增权限 -->
<uses-permission android:name=\"android.permission.BLUETOOTH_CONNECT\" />
<uses-permission android:name=\"android.permission.BLUETOOTH_SCAN\" />
4、勾选配置
5、新建lpapi-uniplugin.js文件
6、再页面中导入封装的js接口;
引用页面
import api from './lpapi-uniplugin';
检测打印机
//初始加载
this.printerList.splice(0);
const list = await api.getPrinters();
if (list.length > 0) {
for (let item of list) {
this.printerList.push(item.name);
}
} else {
this.printerList.push("未检测到打印机");
}
//自动连接打印机
onPrinterChanged(e) {
this.index = e ? e.target.value : 0;
this.printerName = this.printerList[this.index];
},
//手动点击连接打印机
async openPrinter() {
if (this.printerName) {
// 连接新的打印机
api.openPrinter(this.printerName, (value) => {
if (value) {
}
});
}
},
// 打印二维码
await api.draw2DQRCode({
text: '德佟电子科技有限公司',
x: 5,
y: 5,
width: 35
});
// 提交打印任务,开始打印
await api.commitJob();
lpapi-uniplugin.js文件
const api = uni.requireNativePlugin("DothanTech-LPAPI");
function request(action, data, callback) {
console.log(`### Request: action = ${action}`);
// console.log(data ? JSON.stringify(data) : data);
return new Promise((resolve) => {
if (api && api[action]) {
api[action](data || {}, (result) => {
// console.log(`### Response:`);
// console.log(JSON.stringify(data));
if (result && result.code === 0) {
resolve(result.data || true);
} else {
resolve(undefined);
console.log(result.data);
}
if (typeof callback === "function") {
callback(result.code === 0 ? result.data : null);
}
});
} else {
if (api) {
resolve(undefined);
console.log("LPAPI插件加载失败");
} else {
resolve(undefined);
console.log("未检测到该方法:" + action);
}
}
});
}
const lpapi = {
/**
* 获取指定型号的所有打印机;
* @param { string | {name?: string} } data 参数;
* @returns { {name: string, macAddress?: string}[] } 获取打印机列表;
*/
getPrinters(data) {
if (typeof data === "string") {
data = { name: data };
}
return request("getPrinters", data);
},
/**
* 获取指定型号的一台打印机;
* @param { string | {name?: string} } data 参数;
* @returns { {name: string, macAddress?: string} } 获取检测到的第一台打印机;
*/
getFirstPrinter(data) {
if (typeof data === "string") {
data = { name: data };
}
return request("getFirstPrinter", data);
},
/**
*
* @param { string | {name?: string}} data 参数;
*/
openPrinter(data, callback) {
if (typeof data === "string") {
data = { name: data };
}
return request("openPrinter", typeof data === "object" ? data : {}, callback);
},
/**
* 获取当前已连接打印机名称;
*/
getPrinterName() {
return request("getPrinterName", {});
},
/**
* 获取当前已连接打印机信息;
* 调用该接口前要确保打印机已连接;
*/
getPrinterInfo() {
return request("getPrinterInfo", {});
},
// /**
// * 获取当前打印机的连接状态;
// */
// getPrinterState() {
// return request('getPrinterState', {});
// },
/**
* 当前打印机是否已经打开;
*/
isPrinterOpened() {
return request("isPrinterOpened", {});
},
/**
*
* @param { string | {}} data 参数;
* @param {string} data.name
* @param {string} data.model
* @returns
*/
isPrinterSupported(data) {
data =
typeof data === "object"
? data
: {
name: arguments[0],
model: arguments[1],
};
return request("isPrinterSupported", data || {});
},
// /**
// * 取消当前打印任务;
// */
// cancel() {
// return request('cancel', {});
// },
/**
* 关闭打印机;
*/
closePrinter() {
return request("closePrinter", {});
},
/**
* 打印BASE64图片;
* @param {{}} data
* @param {string} data.image
* @param {number} data.PRINT_DENSITY
* @param {number} data.PRINT_SPEED
* @param {number} data.PRINT_COPIES
*/
printImage(data) {
return request("printImage", data);
},
/**
* 开始打印任务;
* @param {{}} data 参数;
* @param {number} data.width
* @param {number} data.height
* @param {number} data.orientation
*/
startJob(data) {
return request("startJob", data);
},
// /**
// * 终止打印任务;
// */
// abortJob() {
// return request('abortJob', {});
// },
/**
* 提交打印任务;
* @param {{}} data 参数;
* @param {number} data.PRINT_DENSITY
* @param {number} data.PRINT_SPEED
* @param {number} data.PRINT_COPIES
*/
commitJob(data) {
return request("commitJob", data);
},
// /**
// * 开始打印页面;
// */
// startPage() {
// return request('startPage', {});
// },
// /**
// * 结束打印页面;
// */
// endPage() {
// return request('endPage', {});
// },
/**
* 结束打印任务;
*/
endJob() {
return request("endJob", {});
},
/**
* 获取当前的打印任务;
*/
getJobPages() {
return request("getJobPages", {});
},
//
/**
* 设置后续绘制参数,譬如字体名称,二维码纠错级别等等;
* @param {{}} data 参数
* @param {string} name
* @param value
*/
setDrawParam(data) {
return request("setDrawParam", data);
},
// /**
// * 获取当前内容的旋转角度;
// */
// getItemOrientation() {
// return request('getItemOrientation', {});
// },
/**
* 设置后续内容的旋转方向;
* @param { number | { orientation: [0, 90, 180, 270]}} data 参数;
*/
setItemOrientation(data) {
data = typeof data === "object" ? data : { orientation: data };
return request("setItemOrientation", data);
},
// /**
// * 获取当前的水平对齐方式;
// */
// getItemHorizontalAlignment() {
// return request('getItemHorizontalAlignment', {});
// },
/**
* 设置水平对齐方式;
* @param { number | { alignment: [0, 1, 2]}} data 参数;
*/
setItemHorizontalAlignment(data) {
data = typeof data === "object" ? data : { alignment: data };
return request("setItemHorizontalAlignment", data);
},
// /**
// * 获取当前的垂直对齐方式;
// */
// getItemVerticalAlignment() {
// return request('getItemVerticalAlignment', {});
// },
/**
* 设置垂直对齐方式;
* @param { number | { alignment: [0, 1, 2]}} data 参数;
*/
setItemVerticalAlignment(data) {
data = typeof data === "object" ? data : { alignment: data };
return request("setItemVerticalAlignment", data);
},
/**
* 设置背景色;
* 默认白色底色:0xFFFFFFFF;
* 如需透明色,可设置:0x00000000;
* @param { number | {color: number} } data 参数;
*/
setBackground(data) {
data = typeof data === "object" ? data : { color: data };
return request("setBackground", 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) {
return request("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) {
return request("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) {
return request("draw2DQRCode", data);
},
/**
* 绘制PDF417码;
* @param {{}} data PDF417打印参数;
* @param {string} data.text 打印内容
* @param {number} data.x X轴坐标位置(单位毫米)
* @param {number} data.y Y轴坐标位置(单位毫米)
* @param {number} data.width 绘制数据内容的宽度(单位毫米)
* @param {number} data.height 绘制数据内容的高度(单位毫米)
*/
// draw2DPdf417(data) {
// return request("draw2DPdf417", 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) {
return request("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) {
return request("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) {
return request("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) {
return request("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) {
return request("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) {
return request("fillEllipse", data);
},
/**
* 绘制圆形;
* @param {{}} data
* @param {number} data.x 圆心X轴坐标位置(单位毫米)
* @param {number} data.y 圆心Y轴坐标位置(单位毫米)
* @param {number} data.radius 圆半径(单位毫米)
* @param {number} data.lineWidth 边框宽度(单位毫米)
*/
drawCircle(data) {
return request("drawCircle", data);
},
/**
* 填充圆;
* @param {{}} data
* @param {number} data.x 圆心X轴坐标位置(单位毫米)
* @param {number} data.y 圆心Y轴坐标位置(单位毫米)
* @param {number} data.radius 圆半径(单位毫米)
*/
fillCircle(data) {
return request("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) {
return request("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) {
return request("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) {
return request("drawImage", data);
},
};
export default lpapi;