蓝牙连接德佟打印机打印

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;


Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐