Uniapp无线打印实现,案例详解

目录--

  • 一、前言
  • 二、产品选型
  • 三、找驱动和二开代码
  • 四 、读文档很重要
  • 五、android studio
  • 六、打开打印程序
  • 七、修改打印函数
  • 八、uniapp配置
  • 九、执行结果
  • 十、最终效果

一、前言

前两年给我哥的小破厂写的生产管理,设计蓝牙实现生产打印。今天朋友问到,觉得有必要写出来,怕有一天自己要用到的时候想不起了。

二、产品选型

在这里插入图片描述
我这里不是在介绍产品,确实当时就是选的这一款,【汉印D35BT】,蓝牙wifi双无线,没得说
话说,两年了,一分钱都没降啊,京东你是好样的。

三、找驱动和二开代码

汉印官网:https://www.hprt.com.cn/
在这里插入图片描述
在这里插入图片描述
然后咱们就搜出了这么多,话说,咋有uniapp的,你要早点写出来,前两年,我也不会改得那么痛苦的说。
算了不鸟他,咱就喜欢安卓的,任性~。
在这里插入图片描述
b78c104242.png)

下载完了,解压。嗯~~ 有说明,咱看看先,进步了,我记得当年还是PDF来着,我很清晰的记得我用edge翻这玩意好几天,这都升级md了。

四 、读文档很重要

打开说明文档

 1 **SDK加载及使用**

1.1 在Android studio 中加载我们打印机的SDK jar包和SO库。

- 将jar包和so库都拷贝到app/libs文件夹下

- 在app中的build.gradle加入下面的代码

  ```java
  android{
    sourceSets {
          main {
              jniLibs.srcDirs = ['libs']
          }
      }
  }
  implementation  files('libs/CPCL_SDK_V1.01.jar')

1.2 我们所用的接口都在PrinterHelper这个类中所有的接口都是静态方法,可以直接调用。

2 **SDK 连接方法**

 	2.1 **蓝牙连接接口**

- 描述

  ```java
  int portOpenBT(Context context,String portSetting)

- 参数

  | 参数        | 描述             |
  | ----------- | ---------------- |
  | context     | 上下文对象       |
  | portSetting | 蓝牙地址(大写) |

- 返回

  || 描述                            |
  | :--- | :------------------------------ |
  | 0    | 连接成功                        |
  | -1   | 连接超时                        |
  | -2   | 蓝牙地址格式错误                |
  | -3   | 打印机与SDK不匹配(握手不通过) |

好了,读了1.1、1.2,其他不重要。
第一咱得下载Android studio、第二咱得改portOpenBT()。行了,我懂了。
至于,为啥要改portOpenBT,我的想法很简单,我也不知道以后用啥纸啊、打印机坏了得换MAC对吧。总得吧长和宽作为参数写进去吧。

这款是支持WIFI的,我就说说蓝牙的配置,WIFI的一个逻辑,看看文档就会改。

五、android studio

下载: https://developer.android.google.cn/studio?hl=zh-cn
在这里插入图片描述
在这里插入图片描述
还有点大,等一哈儿。出去买跟冰棍嗦一哈,广东还是嘿热。
在这里插入图片描述
装起来,安卓这图标越来越丑了,不要方,我都嘿多年没碰JAVA了
在这里插入图片描述在这里插入图片描述
说他慢,是真的慢啊,太耽误老子睡大觉了。

六、打开打印程序

在这里插入图片描述
在这里插入图片描述

这改的什么玩意儿,俺不会了啊。
在这里插入图片描述
万事不决看文档,先把下面这段复制过去先,再找找这个炸包在哪
在这里插入图片描述
目录里有 ,只是版本变了,改成1.22的。OK ,找咱们要改的了

七、修改打印函数

咱们的目的是啥,连蓝牙,对,上面说的改portOpenBT,ctrl+F查询一下portOpenBT
在这里插入图片描述
你看,人家写好demo了,然后咱们还要打印内容对吧,找找文档
在这里插入图片描述
嗯 有模版就好弄,管理Ctrl+F看看他是咋读的
在这里插入图片描述
嗯,我会了。在这里插入图片描述

 private void gotoTxtBT(String mac,String contentTxt,String nowHeight) //MAC  打印内容 标签高度
   {
            try {
		   int i = PrinterHelper.portOpenBT(mac);
			if(i==0){
				PrinterHelper.printAreaSize("0","200","200",nowHeight,"1");//
                PrinterHelper.printText(contentTxt);
				PrinterHelper.Print();
				PrinterHelper.PortClose();
			}
    } catch (Exception e) {
        Log.d("Print", e.getMessage().toString());
    }
   }

太晚了,明天再调试 打包,

八、uniapp配置

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
打印机设置,你爱写哪儿写哪儿,能读出来就行,这改起来不是so easy

        doprint() {
				//console.log(this.logs);
				this.zshow = true;

				const hs = [460, 405, 350, 295,240];
				for (let i = 0; i < this.logs.length; i++) {
					let mcut = 0;
					let txt = "";
					const log = this.logs[i];
					//this.Zheight=1120;
					txt += "! 0 200 200 " + this.Zheight + " 1";
					txt += "\r\n";
					txt += "PAGE-WIDTH " + this.Zwidth;
					txt += "\r\n";

					txt += "BOX 20 20 " + (this.Zwidth - 40) + " " + (this.Zheight - 40) + " 2";
					txt += "\r\n";
					//标题
					txt += "SETBOLD 1 \r\n";
					txt += "SETMAG 3 3 \r\n";
					 if (this.g8 == "1"){
					 	txt += "TEXT 3 0 50 40 " + this.titname.substring(0,10) + "\r\n";
						if(this.titname.length>10)
						txt += "TEXT 3 0 200 90 " + this.titname.substring(10,this.titname.length) + "\r\n";
						} 
					 else txt += "TEXT 3 0 150 100 " + this.titname + "\r\n";
					
					
					txt += "SETMAG 1 1\r\n";
					txt += "SETBOLD 0 \r\n";
					//电话 
					txt += "SETMAG 2 2\r\n";
					txt += "TEXT 3 0 100 150 " + this.phone + "\r\n";
					//地址
					txt += "TEXT 3 0 100 190 " + this.addr;
					txt += "\r\n";
					let _qrcode="http://113.125.42.176:6060/data/tags.html?no="+log.codes+"&co="+this.sortname;
					//二维码
					if (this.g8 == "1") {
						txt += "BARCODE QR 370 230 M 2 U 5\r\n";
						txt += "MA," + _qrcode + "\r\n";
						txt += "ENDQR\r\n";
					}
					//内容
					if (this.g1 == "1") {
						txt += "TEXT 3 0 50 " + hs[mcut] + " 材质: " + log.tname + "\r\n";
						mcut += 1;
					}
					if (this.showb == "1") {
						txt += "TEXT 3 0 50 " + hs[mcut] + " 数量: " + Number(log.counts)  + log.units +
						//txt += "TEXT 3 0 50 " + hs[mcut] + " 数量: " + Number(log.counts) + "/" + this.acounts + log.units +
							"\r\n";
						mcut += 1;
					}
					if (this.showa == "1") {
						txt += "TEXT 3 0 50 " + hs[mcut] + " 重量: " + (Number(log.weight)+Number(log.bweight))  + " KG" +
						//txt += "TEXT 3 0 50 " + hs[mcut] + " 重量: " + Number(log.weight)+Number(log.bweight) + "/" + this.aweight + " KG" +
							"\r\n";
						mcut += 1;
					}
					if (log.cusordernum != "") {
						txt += "TEXT 3 0 50 " + hs[mcut] + " 订单: " + log.cusordernum  +
							"\r\n";
						mcut += 1;
					} 
					txt += "TEXT 3 0 50 " + hs[mcut] + " \r\n";

					//txt += "TEXT 3 0 50 " + hs[mcut] + " 件数: 1/" + this.bagcount + "包" + "\r\n";

					txt += "TEXT 3 0 50 515 品名: " + log.proname;
					txt += "\r\n";

					txt += "TEXT 3 0 50 570 料号: " + this.code2;
					txt += "\r\n";
					txt += "BARCODE 128 1 1 50 130 615 " + this.code1; //料号	
					txt += "\r\n";
					txt += "TEXT 3 0 50 690 规格: " + log.mysize;
					txt += "\r\n";
					txt += "TEXT 3 0 50 745 生产日期: " + new Date(log.timedo).Format("yyyy年MM月dd日");
					txt += "\r\n";
					txt += "TEXT 3 0 50 800 存储: 避光 低温 少尘 防潮 通风";
					txt += "\r\n";
					txt += "SETMAG 1 1 \r\n";
					//条码

					txt += "BARCODE 128 1 2 80 100 880 " + log.codes; //包号
					txt += "\r\n";
					txt += "TEXT 2 0 200 980 " + log.codes; //包号
					txt += "\r\n";
					//txt += "PRINT\r\n";

					this.txtdata.push(txt);

				}
				console.log(this.txtdata);
				this.toprint();
			},
			toprint() {
				const pmac = this.MAC; //MAC
				let rst = 2;
				rst = printModule.gotoTxtBT(pmac, this.txtdata, this.Zheight); //传入打印插件
			    //console.log("pmac:"+pmac+"  txtdata:"+this.txtdata+' height:'+this.Zheight)
				if (rst > 0) //异常
				{
					this.zshow = false;
					this.yshow = true;
					this.pshow = false;

					this.$mHelper.toast('打印失败,请重试');
				}
				if (rst == 0 & this.instoretype == 1) //打印成功
				{
					//修改任务状态
					this.$mHelper.toast('打印成功!');
					setTimeout(() => {
						uni.switchTab({
							url: '/pages/works/task/index'
						})
					}, 2000);

				}
				if (rst == 0 & this.instoretype != 1) {
					this.$mHelper.toast('打印成功!');
					setTimeout(() => {
						uni.switchTab({
							url: '/pages/application/index'
						})
					}, 2000);

				}
			},

画打印,详细配置参考
在这里插入图片描述

九、执行结果

在这里插入图片描述
来个特写
在这里插入图片描述

! 0 200 200 1060 1
PAGE-WIDTH 600
BOX 20 20 560 1020 2
SETBOLD 1 
SETMAG 3 3 
TEXT 3 0 50 40 XXX市XXXXX有
TEXT 3 0 200 90 限公司
SETMAG 1 1
SETBOLD 0 
SETMAG 2 2
TEXT 3 0 100 150 电话:
TEXT 3 0 100 190 地址:
BARCODE QR 370 230 M 2 U 5
MA,http://XXX.XXX.XX.XXX:6060/data/tags.html?no=A00032136240905C001&co=ly
ENDQR
TEXT 3 0 50 460 材质: PE
TEXT 3 0 50 405 数量: 400KG
TEXT 3 0 50 350 
TEXT 3 0 50 515 品名: 平口袋
TEXT 3 0 50 570 料号: A000331239
BARCODE 128 1 1 50 130 615 A000331239
TEXT 3 0 50 690 规格: 130(W) X 90(L)
TEXT 3 0 50 745 生产日期: 20240905日
TEXT 3 0 50 800 存储: 避光 低温 少尘 防潮 通风
SETMAG 1 1 
BARCODE 128 1 2 80 100 880 A00032136240905C001
TEXT 2 0 200 980 A00032136240905C001

十、最终效果

等中秋我回去照两张再说,睡了睡了,顶不住了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值