Uniapp小程序蓝牙打印 打印遇到的坑和解决方案分享

资料

  1. 链接蓝牙参考 - xun-bluetoothPrint
  2. 指令集生成参考 escpos-php

推荐方案

escpos-php 来生成指令集

强烈首推, 原因: 完善

你想要的功能都有,比如二维码 和 条码 中文字体调大等,调用也简单。
教程: www.jianshu.com/p/4c6cd7563759
这个作者已经写了,我就不重复写了。

修改:

// echo $printer->flushBase64(); 这是他的
 $printer->flushHex()

演示数据:

前端

// 这是 ` $printer->flushHex()` 的输出,也就是要返给前端的内容。
var hex_str = `
1b401d57d0011b61011d21001d286b0400314132001d286b03003143061d286b03003145301d286b0e0031503068656c6c6f20776f726c641d286b03003151301c26c4e3bac31c2e0a1d683c1d77041d48021d6b430d363933373038323238303838311b6402
`
var toBuff = str => {
    const hex_arr = str.match(/.{1,2}/g).map(byte => parseInt(byte,16))
    return new Uint8Array(hex_arr).buffer
}

var buff = toBuff(hex_str) // 这个是要发送给蓝牙设备的数据

如何发送? 参考此代码 printbuff
打印机结果:
Uniapp小程序蓝牙打印 打印遇到的坑和解决方案分享

图片和文字同一行

Uniapp小程序蓝牙打印 打印遇到的坑和解决方案分享

我并未找到 esc/pos 设置图片到同行的指令,(水平定位和绝对定位我也试过了,都不行)。
估计只有 cpcl 才可以。

我的方案是需要同行的部分由后端生成,当作图片来打印。
(上面那个图 除了条码 都是后端生成的 )
Uniapp小程序蓝牙打印 打印遇到的坑和解决方案分享

php 方案:

  1. 图片合成: intervention/image
  2. 二维码生成: simplesoftwareio/simple-qrcode

如果你用的是xun-bluetoothPrint - printbuffs这种定时器发送,会偶尔乱码/缺少的,因为那个定时的延迟不能保证 100% 像单管道一样堵塞的执行。

xun-bluetoothPrint - printbuffs 修改为Promise 解决图片乱码情况

改两个方法

async subcontractSync(buffer,maxChunk = 20) {
      for (
          let i = 0, j = 0, length = buffer.byteLength;
          i < length;
          i += maxChunk, j++
      ) {
        let subPackage = buffer.slice(
            i,
            i + maxChunk <= length ? i + maxChunk : length
        );
        await this.writeBLECharacteristicValue(subPackage)
//        setTimeout(this.printbuff, 500, subPackage);
      }
}

// 向蓝牙设备写入数据 并返回promise
printbuff(buffer) {
      return new Promise(resolve => {
       uni.writeBLECharacteristicValue({
         deviceId: this.deviceId, 
         serviceId: this.serviceId,
         characteristicId: this.characteristicId,
         value: buffer,
         success: (res) => {
           resolve(1)
         },
         fail: (e) => this.handleError(e),
       })
     })
}

吐槽

一开始,我就走进了很大误区。

  1. 以为二维码和条码需要自己生成图片,其实打印机支持的。
  2. esc/pos 组装条码和二维码数据(耗时2天左右)。

各位做打印的话,请访问: github.com/search?q=esc%2Fpos

本作品采用《CC 协议》,转载必须注明作者和本文链接
专心学习不瞎搞
讨论数量: 4

先收藏了,有需要再用,哈哈 :grin: 我之前搞了一个web 打印word 的服务

11个月前 评论

苦苦录觅打印电子面单的操作,有空看看

11个月前 评论

请问配套的打印机是啥牌子 型号 ,后面正好有个这种的需求。感谢。

11个月前 评论
lyxxxh (楼主) 11个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
未填写
文章
87
粉丝
105
喜欢
480
收藏
717
排名:109
访问:8.7 万
私信
所有博文
社区赞助商