1.蓝牙打印引用文件 btprinter.js

import context from "@/common/context.js" //上下文处理 用来保存绑定的蓝牙设备地址function searchDevices() {var main = plus.android.runtimeMainActivity();var IntentFilter = plus.android.importClass('android.content.IntentFilter');var BluetoothAdapter = plus.android.importClass("android.bluetooth.BluetoothAdapter");var BluetoothDevice = plus.android.importClass("android.bluetooth.BluetoothDevice");var BAdapter = BluetoothAdapter.getDefaultAdapter();console.log("开始搜索设备");var des = BAdapter.getBondedDevices();var devices = [];console.log(des);if (des) {var iter = plus.android.invoke(des, "iterator");console.log(iter);while (plus.android.invoke(iter, "hasNext")) {var next = plus.android.invoke(iter, "next");var dename = plus.android.invoke(next, "getName");console.log(dename);var deaddr = plus.android.invoke(next, "getAddress");console.log(deaddr);var bind = false;if (context.printer_mac) {console.log(context.printer_mac)if (deaddr == context.printer_mac) {bind = true}}devices.push({addr: deaddr,name: dename,bind: bind})}}return devices;
}function setPrinter(mac_address) {if (mac_address) {context.printer_mac = mac_address;}
}function printImg(img) {var mac_address = context.printer_mac;if (!mac_address) {return '蓝牙打印机未连接';}if (img) {var main = plus.android.runtimeMainActivity();var BluetoothAdapter = plus.android.importClass("android.bluetooth.BluetoothAdapter");var UUID = plus.android.importClass("java.util.UUID");var uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");var BAdapter = BluetoothAdapter.getDefaultAdapter();var device = BAdapter.getRemoteDevice(mac_address);plus.android.importClass(device);var bluetoothSocket = device.createRfcommSocketToServiceRecord(uuid);plus.android.importClass(bluetoothSocket);if (!bluetoothSocket.isConnected()) {console.log('检测到设备未连接,尝试连接....');bluetoothSocket.connect();}console.log('设备已连接');if (bluetoothSocket.isConnected()) {var outputStream = bluetoothSocket.getOutputStream();plus.android.importClass(outputStream);var reset = [0x1b, 0x40]var print = [0x0a]outputStream.write(reset);outputStream.flush();outputStream.write(print);console.log("write img")outputStream.write(img);outputStream.write(reset);//走纸outputStream.write(print);outputStream.write(print);outputStream.flush();console.log('end print2')device = null //这里关键  bluetoothSocket.close(); //必须关闭蓝牙连接否则意外断开的话打印错误 console.log('end print3')return "1";}} else {return "没有输入打印内容";}
}function print(print_texts) {var mac_address = context.printer_mac;if (!mac_address) {return '蓝牙打印机未连接';}if (print_texts) {var main = plus.android.runtimeMainActivity();var BluetoothAdapter = plus.android.importClass("android.bluetooth.BluetoothAdapter");var UUID = plus.android.importClass("java.util.UUID");var uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");var BAdapter = BluetoothAdapter.getDefaultAdapter();var device = BAdapter.getRemoteDevice(mac_address);plus.android.importClass(device);var bluetoothSocket = device.createRfcommSocketToServiceRecord(uuid);plus.android.importClass(bluetoothSocket);if (!bluetoothSocket.isConnected()) {console.log('检测到设备未连接,尝试连接....');bluetoothSocket.connect();}console.log('设备已连接');if (bluetoothSocket.isConnected()) {var outputStream = bluetoothSocket.getOutputStream();plus.android.importClass(outputStream);var arr = [];if (Array.isArray(print_texts)) {// console.log("start print Text  lines:" + print_texts.length)arr = print_texts;} else {// console.log("start print one Text")arr.push(print_texts.toString());}console.log("start print arr:" + arr)var reset = [0x1b, 0x40]var print = [0x0a]outputStream.write(reset);//一行行的打印for (var i = 0; i < arr.length; i++) {var datastr = arr[i];console.log("start print arr:" + arr[i] + ";" + arr)if (Array.isArray(datastr)) {//带字体大小定义var first = datastr[0];if (datastr.length > 2) {//行内自定义for (var j = 0; j < datastr.length; j += 2) {if (datastr.length > j + 1) {var tfirst = datastr[j];var tstr = datastr[j + 1];writeBig(tfirst, tstr, outputStream, false); //false标示不换行}}outputStream.write(print); //全部打完再换行console.log('end print')} else if (datastr.length > 1) {writeBig(first, datastr[1], outputStream, true);}} else {outputStream.write(0x1c);outputStream.write(0x21);outputStream.write(1);var bytes = plus.android.invoke(datastr, 'getBytes', 'gbk');outputStream.write(bytes);outputStream.write(print);}}//走纸outputStream.write(print);outputStream.write(print);outputStream.flush();console.log('end print2')device = null //这里关键  bluetoothSocket.close(); //必须关闭蓝牙连接否则意外断开的话打印错误 console.log('end print3')return "1";}} else {return "没有输入打印内容";}
}function writeBig(first, str, outputStream, br) {var print = [0x0a]outputStream.write(0x1c);outputStream.write(0x21);outputStream.write(1);if (first.toLowerCase() == "n") {//正常大小var bytes = plus.android.invoke(str, 'getBytes', 'gbk');outputStream.write(bytes);if (br)outputStream.write(print);} else if (first.toLowerCase() == "w") {//横向加宽outputStream.write(0x1c);outputStream.write(0x21);outputStream.write(4);var bytes = plus.android.invoke(str, 'getBytes', 'gbk');outputStream.write(bytes);if (br)outputStream.write(print);} else if (first.toLowerCase() == "h") {//纵向加高outputStream.write(0x1c);outputStream.write(0x21);outputStream.write(8);var bytes = plus.android.invoke(str, 'getBytes', 'gbk');outputStream.write(bytes);if (br)outputStream.write(print);} else if (first.toLowerCase() == "wh") {//横向加宽并纵向加高outputStream.write(0x1c);outputStream.write(0x21);outputStream.write(12);var bytes = plus.android.invoke(str, 'getBytes', 'gbk');outputStream.write(bytes);if (br)outputStream.write(print);}}const printer = {print: print,searchDevices: searchDevices,setPrinter: setPrinter,printImg: printImg
}
module.exports = printer

使用该蓝牙处理类,需要先然设备配对蓝牙打印设备,方法说明如下:

searchDevices() 用于搜索已配对蓝牙设备
setPrinter() 指定已配对设备为当前打印设备
print() 打印文本
printImg() 打印图片

打印文本示例

import printer from "btprinter.js"//打印单行
var res = printer.print("系统测试页打印");
//打印多行
var arr = ["软件测试页打印",["w", "aaa加宽"],["h", "bbb加高"],["wh", "加大"],new Date().toDateString(),["n", "默认大小", "w", "加宽", "h", "加高", "wh", "加大", "n", "默认大小"]];
var res = printer.print(arr);
if (res == "1") {} else {uni.showModal({showCancel: false,title: "打印测试页失败",content: res})
}

打印图片

var img=XXXXX //图片点阵灰度数据
printer.printImg(img);

图片点阵数据如何生成,如何打印二维码数据

下一篇:UniAPP Android 蓝牙 ESCPOS打印机 打印图片和二维码

DCloud UniAPP Android 蓝牙连接ESCPOS打印机相关推荐

  1. UniAPP Android 蓝牙 ESCPOS打印机 打印图片和二维码

    移动端打印的实现方式参考 上一篇:DCloud UniAPP Android 蓝牙连接ESCPOS打印机 本片来实现 上一篇中 打印图片中 的 img (图片点阵灰度数据) var img=XXXXX ...

  2. Uniapp Android 佳博 小票打印机 插件

    Uniapp Android 佳博 小票打印机 插件 Uniapp Android 佳博小票打印机插件:  支持图片.条型码.二维码 打印. 1. 实例化插件 const gp= uni.requir ...

  3. android连接蓝牙耳机,蓝牙耳机厂家:Android蓝牙连接的一些心得

    蓝牙耳机厂家最近做一个项目,主要是给蓝牙发送指令的,boss要求能够最快速度的搜索到蓝牙,并且发送数据. 刚开始也遇到很多133,各种断开连接的问题.android蓝牙搜索有两种方式,一种startL ...

  4. android蓝牙连接133问题的解决办法---(连接篇)

    上一篇文章介绍了"蓝牙扫描",今天来说一下android蓝牙连接过程中133的问题: 我们经常在网上看到一些答案说需要释放gatt资源,这种方式可以在一定程度上减少出现133的概率 ...

  5. pos请求 微信小程序_微信小程序蓝牙连接小票打印机实例代码详解

    1.连接蓝牙 (第一次发表博客) 第一步打开蓝牙并搜索附近打印机设备// startSearch: function() { var that = this wx.openBluetoothAdapt ...

  6. Android 蓝牙连接 ESC/POS 热敏打印机打印(ESC/POS指令篇)

    上一篇 主要介绍了如何通过蓝牙连接到打印机.这一篇,我们就介绍如何向打印机发送打印指令,来打印字符和图片. =====================2017.05.09 更新============ ...

  7. Android 蓝牙连接打印机打印网络图片

    实现蓝牙连接打印机打印网络图片 经过自己一下午加一个小时的时间整理出来,希望能帮助到各位码兄弟! 主要分为以下几步: 将网络图片URL转为bitmap :其中需要进行网络请求,不可在主线程中进行,需另 ...

  8. 记录app通过蓝牙连接小票打印机的坑

    试了好几台5.0以下版本的测试机,发现可正常通过蓝牙连接打印机,我就以为大功告成了,结果测试的时候,在锤子手机上一打开app就崩溃了... 报错信息: IllegalArgumentException ...

  9. Android 蓝牙/wifi云打印机 ESC/POS热敏打印机打印(ESC/POS指令篇)

    上一篇主要介绍了如何通过蓝牙打印机和wifi云打印机的连接与数据发送,这一篇,我们就介绍向打印机发送打印指令,来打印字符和图片. 由于公司暂且买了两台打印机,一台佳博GP-58MIII,一台GP-SH ...

最新文章

  1. java 模拟时钟_java模拟时钟
  2. How to use tcpdump with examples
  3. C++ string中find ,rfind 等函数 用法总结及示例
  4. Android测试环境配置
  5. java中的内省 (Introspector)
  6. oracle配置首选项主目录名_ArduinoIDE安装与配置
  7. python办公代码_[Python] 自动化办公 docx操作Word基础代码
  8. 编程之美之控制cpu线
  9. matlab三相异步电动机仿真,MATLAB中的三相异步电动机仿真
  10. 高可用架构-- MySQL主从复制的配置
  11. CompletableFuture详解~runAfterBoth
  12. JSP页面元素-新手向
  13. (83)FPGA仿真完成激励(finish)
  14. pycocotools安装_pycocotools安装问题
  15. alin39048错误原因_支付宝支付ALIN10146错误
  16. WPS最大的败笔是“免费用,广告弹窗”,难怪用户纷纷使用office
  17. 史上最全使用Nexus搭建Maven服务器详细配置
  18. 社区发现算法之——Louvain
  19. 联想Yoga C930 NM-B741 EYG70 Ariel-SVT笔记本点位图TVW
  20. php0day,Nginx 0day漏洞—却原来是php漏洞

热门文章

  1. mysql 命令行登录详解
  2. addons.php,GitHub - zz-studio/think-addons: The ThinkPHP6 Addons Package
  3. 给Docker中的Nginx搭建HTTPS环境
  4. 远距离遥控玩具中的8通道无线收发芯片
  5. 语音处理/语音识别基础(三)- 声音的特征和声音的能量
  6. 【电脑运用及修理】Internet Explorer 浏览器
  7. Mobius Inversion
  8. 计算机三级网络技术准备多久,请问一下,考计算机三级网络技术需要哪些准备?谢谢/...
  9. 干货!区块链入门、进阶、行业专家观点!1000篇好文帮你破解区块链密码!(中篇)...
  10. 六维空间:更快、更新、更优秀的教育网IPV6免费资源共享平台!