一.引言

在当前的移动开发生态中,跨平台框架如uni-app因其高效、灵活的特点受到了开发者们的青睐。同时,随着物联网技术的飞速发展,智能打印设备已成为许多业务场景中不可或缺的一环。今天,我们就来探讨如何使用uni-app轻松对接驰腾品牌的智能打印机,实现无线打印功能。无论您是初学者还是有经验的开发者,本教程都将带您一步步实现这一目标。

二.准备工作

首先确保您的开发环境已就绪。这包括安装HBuilderX和uni-app框架。同时,您需要准备一台驰腾打印机,并熟悉其用户手册和API文档。了解打印机支持的通信协议(比如蓝牙或Wi-Fi)也至关重要。

三.对接流程解析

在进行代码编写之前,我们需要理解整个接口调用的流程。这通常包括建立与打印机的连接、发送打印指令以及处理返回结果。此外,我们还需要关注数据格式、编码要求以及安全机制。

四.详细步骤与实施

1.设备连接与通讯建立

蓝牙连接流程

  1. 使用uni-app提供的蓝牙模块初始化并搜索打印机设备。
  2. 配对并连接到驰腾打印机。

2.发送打印指令

  1. 数据封装与传输

    • 依据驰腾打印机的API文档,正确封装打印数据。
    • 调用相关API发送打印任务。
  2. 错误处理与反馈
    • 监听打印状态变化,及时响应可能出现的错误。
    • 向用户提供清晰的状态反馈信息。

3.打印状态展示

  • 实时显示当前打印任务的状态,包括成功、等待和失败等。

五.代码实例与详解

前期准备:

需要下载一个js文件支持包,请先点击下载

点击下载js支持包

点击下载开发指南

开发说明中有详细的指令文档,需要的大家可以自行翻阅

以下提供一个使用打印机进行二维码打印的经典案例

1.先将js包解压,并在项目中创建文件夹保存

2.现在需要两个页面,一个负责蓝牙搜索和连接,一个复制连接后的打印工作
测试蓝牙连接页面代码:

<template>
<view class="container">
<view class="top-box">
<view class="name">打印机搜索</view>
<view class="value" @click="onLoadFun" v-if="submitMain">
点击搜索
</view>
<!-- <view class="value" @click="rescan" v-else>
重新搜索
</view> -->
</view>
<scroll-view scroll-y class="box">
<view
class="item"
v-for="(item, index) in blueDeviceList"
:key="index"
@click="connect(item, index)"
:class="{ active: blueIndex === index }"
>
<view>
<text>{{ item.name }}</text>
</view>
<view>
<text>{{ item.deviceId }}</text>
</view>
</view>
<!-- <view class="item">{{code}}</view> -->
</scroll-view>
</view>
</template> <script>
import CTPL from "@/web-CTPL-SDK/ctpl.js";
export default {
data() {
return {
blueDeviceList: [], //蓝牙设备列表
blueName: "", //蓝牙设备名称
blueDeviceId: "", //蓝牙设备特征值
blueIndex: -1,
submitMain:true
};
},
onUnload() {
if(this.blueDeviceId){
CTPL.disconnect();
}
},
methods: {
async onLoadFun(){
await CTPL.init();
this.submitMain = false;
await this.discoveryList()
},
clickLeft() {
uni.navigateBack();
},
async discoveryList() { uni.showLoading({
title:'搜索设备中'
});
CTPL.discovery().then((res)=>{
uni.hideLoading();
this.blueDeviceList = res;
}).catch((err)=>{
uni.hideLoading();
uni.$u.toast(err)
})
},
//重新扫描
rescan() {
this.blueDeviceList = [];
this.discoveryList();
},
//开始连接蓝牙
connect(data, index) {
const that = this;
uni.showModal({
title:'温馨提示',
content:'是否使用选中设备进行打印',
success(res) {
if(res.confirm){
CTPL.connect(data.deviceId);
that.blueIndex = index;
that.blueDeviceId = data.deviceId;
that.blueName = data.name;
setTimeout(() => { uni.showLoading({
title:'配置设备中'
})
that.setCodeFun()
}, 1000);
}
}
})
},
setCodeFun(){
const that = this;
CTPL.setPaperType(0);
setTimeout(()=>{
CTPL.setMemoryPrint(0);
uni.hideLoading()
setTimeout(()=>{
uni.navigateTo({
url: `要进行打印的页面?id=${that.orderId}&deviceId=${that.blueDeviceId}`,
});
},500)
},500)
}, },
};
</script> <style lang="scss" scoped>
.container {
width: 100%;
overflow: hidden;
min-height: 100vh;
}
.top-box{
width: 100%;
padding: 30rpx;
background-color: white;
color: #000000;
line-height: 70rpx;
font-size: 32rpx;
overflow: hidden;
.name{
width: 50%;
display: inline-block;
vertical-align: top;
}
.value{
width: 30%;
float: right;
display: inline-block;
vertical-align: top;
background:#009180;
color: white;
text-align: center;
border-radius: 10rpx;
}
} $nav-height: 30px; .box-bg {
background-color: #f5f5f5;
.nav {
text {
font-size: 28rpx !important;
}
.uni-nav-bar-right-text {
color: #1aad19 !important;
}
}
} .city {
/* #ifndef APP-PLUS-NVUE */
display: flex;
/* #endif */
flex-direction: row;
align-items: center;
justify-content: flex-start;
// width: 160rpx;
margin-left: 4px;
} .input-view {
/* #ifndef APP-PLUS-NVUE */
display: flex;
/* #endif */
flex-direction: row;
// width: 500rpx;
flex: 1;
background-color: #f8f8f8;
height: $nav-height;
border-radius: 15px;
padding: 0 15px;
flex-wrap: nowrap;
margin: 7px 0;
line-height: $nav-height;
} .input-uni-icon {
line-height: $nav-height;
} .nav-bar-input {
height: $nav-height;
line-height: $nav-height;
/* #ifdef APP-PLUS-NVUE */
width: 370rpx;
/* #endif */
padding: 0 5px;
font-size: 14px;
background-color: #f8f8f8;
} .box {
height: calc(100vh - 100px);
overflow: hidden;
} .item {
height: 120rpx;
border-bottom: 1px solid #e5e5e5;
background-color: white;
width: 700rpx;
margin: 26rpx auto 0 auto;
overflow: hidden;
font-size: 28rpx;
line-height: 120rpx;
padding: 0 20rpx;
border-radius: 10rpx;
} .active {
background-color: #1aad19;
color: white;
}
</style>

注意点:连接了设备后,除非断开并关闭小程序,不然不要重新连接,会直接卡死

测试打印页面代码(核心打印代码):

数据:

        mainCodeArr:[],
qrcodeObj: {
x: 100,
y: 70,
eccLevel: "H",
cellWidth: 6,
encodeMode: "A",
rotation: 0,
codeMode: "M1",
mask: "S7",
content: 1234567890,
},
textObj: {
x: "80",
y: "20",
rotation: "0",
xRatio: "1",
yRatio: "1",
textAlignment: "0",
text: "我的测试商品(1)"
},
code:''

调用方法:

 async setCodeIndex(index){
uni.showLoading({
title:'打印中'
})
const item = this.mainCodeArr[index]
CTPL.queryPrintMode(0);
CTPL.setSize(4,3);
CTPL.clearCache();
let code = item.code;
this.code = code;
setTimeout(()=>{
CTPL.drawQRCode(
this.qrcodeObj.x,
this.qrcodeObj.y,
this.qrcodeObj.eccLevel,
this.qrcodeObj.cellWidth,
this.qrcodeObj.encodeMode,
this.qrcodeObj.rotation,
this.qrcodeObj.codeMode,
this.qrcodeObj.mask,
code
);
setTimeout(()=>{
let left = 40;
if(item.product_title.length < 9){
left += ((10 - item.product_title.length) * 10)
}else{
item.product_title = item.product_title.slice(0,9) +'...'
}
// 绘制条码
CTPL.drawText(
left,
this.textObj.y,
this.textObj.rotation,
this.textObj.xRatio,
this.textObj.yRatio,
this.textObj.textAlignment,
(item.product_title+'('+item.index+')')
);
setTimeout(()=>{
CTPL.setPrintCopies(1, 1);
CTPL.execute();
uni.hideLoading()
if(this.mainCodeArr.length != index +1){
setTimeout(()=>{
this.setCodeIndex(index +1)
},500) }else{
uni.showModal({
title:'温馨提示',
content:'打印完成',
showCancel:false
})
}
},1000)
},500)
},1000)
},

 调用代码:

this.setCodeIndex(0)

总结

以上的一些步骤和代码案例,就是我对接驰腾打印机的全流程,核心主要在:1.设备连接与通讯建立,2.发送打印指令,3.打印状态显示和真机调试,希望我的一点经验能对你有用

如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。

uni-app攻略:如何对接驰腾打印机的更多相关文章

  1. 史上最全的用Python操控手机APP攻略!建议收藏!

    ​最近经常看到用Python操作手机APP的项目,例如抖音.闲鱼之类的,看完后发现这些项目无一例外需要部署ADB环境.至于什么是ADB,很多大神都讲过,只是写得比较专业,我等菜鸟看完还是云里雾里. ​ ...

  2. 快速掌握MIPI开发攻略,对接百度人工智能计算卡EdgeBoard

    MIPI(移动行业处理器接口)是Mobile Industry Processor Interface的缩写,是MIPI联盟发起的为移动应⽤处理器制定的开放标准.MIPI采⽤高速串行接口传输数据,满⾜ ...

  3. 旅行app(游记、攻略、私人定制) | 顺便游旅行H5移动端实例

    <顺便游旅行>是一款H5移动端旅行app,提供目的地(国内.国外.周边)搜索.旅游攻略查询.游记分享.私人定制4大模块,类似携程.同程.去哪儿.马蜂窝移动端,只不过顺便游app界面更为简洁 ...

  4. AppStore提审攻略

    导语: AppStore后台上传新产品的时候需要填写很多资料,看似很复杂,其实搞清楚之后也比较简单. 下面就给大家介绍一下  iTunes Connect 后台上传新APP时需要提交的资料.不要等待需 ...

  5. 30天,O2O速成攻略【8.30南京站】

    活动概况 时间:2015年8月30日13:30-16:30 地点:啡咖啡·孵化器(南京市玄武大道699-22号江苏软件园22栋) 主办:APICloud.Udesk.人为峰 网址:www.apiclo ...

  6. 30天,O2O速成攻略【8.29杭州站】

    活动概况 时间:2015年8月29日13:30-16:30 地点:123茶楼(杭州上城区青年路27号2楼) 主办:APICloud.UPYUN.一起火 网址:www.apicloud.com 费用:免 ...

  7. 30天,O2O速成攻略【8.22北京站】

    活动概况 时间:2015年8月22日13:30-16:30 地点:车库咖啡(北京市海淀西大街48号鑫鼎宾馆二层) 主办:APICloud.融云.品读者 网址:www.apicloud.com 费用:免 ...

  8. 30天,O2O速成攻略【8.16武汉站】

    活动概况 时间:2015年08月16日13:30-16:30 地点:光谷创业咖啡(光谷广场资本大厦一楼停车场内) 主办:APICloud.爱立示.MBA移动业务助理 网址:www.apicloud.c ...

  9. 30天,O2O速成攻略【8.15长沙站】

    活动概况 时间:2015年08月15日13:30-16:30 地点:库可咖啡(长沙市岳麓区阜埠河路139号天马都乐街,湖南大学天马学生公寓东侧) 主办:APICloud.爱立示.兰软 网址:www.a ...

  10. 30天,O2O速成攻略【8.15济南站】

    活动概况 时间:2015年08月15日13:30-16:30 地点:山东大学凤岐茶社(山东大学中心校区北门18号楼东连廊一层) 主办:APICloud.蚁巡 网址:www.apicloud.com 费 ...

随机推荐

  1. 计网学习笔记四 Bridge && Switch

    在前面的学习中,我们学习了MAC和LAN.在一个LAN里可以通信是很不错的,我们可以用一些东西让它变得更加不错!那就是我们接下来学习的网桥和交换机,其中包括了一点802.1D机制. Bridge 网桥 ...

  2. NC16681 [NOIP2003]加分二叉树

    题目链接 题目 题目描述 ​ 设一个n个节点的二叉树tree的中序遍历为(l,2,3,-,n),其中数字1,2,3,-,n为节点编号.每个节点都有一个分数(均为正整数),记第j个节点的分数为di,tr ...

  3. junit自定义测试方法执行顺序

    平常我们写单元测试类,多个方法的执行顺序其实是没有特定顺序的.例如下面代码: package com.laoxu.gamedog; import org.junit.FixMethodOrder; i ...

  4. 问题处理:java.sql.SQLException: Value '0000-00-00 00:00:00' can not be represented as java.sql.Timestamp

    问题说明 今天跑spring boot项目,在查看列表数据时后台抛异常了,一看是这玩意: 问题原因 "0000-00-00 00:00:00"在mysql中是作为一个特殊值存在的但 ...

  5. Java并发编程实例--13.方法同步(synchronized)

    使用synchronized关键字去控制对某个方法的并发调用. 某一时段内,只能有一个线程可以读取该方法. 其他线程需要等待前面线程调用完毕后方可调用. 不过,静态方法有着不同的行为. 虽然也是每次只 ...

  6. 《系列一》-- 4、xml配置文件解析之[默认]命名空间[标签]的解析

    阅读之前要注意的东西:本文就是主打流水账式的源码阅读,主导的是一个参考,主要内容需要看官自己去源码中验证.全系列文章基于 spring 源码 5.x 版本. Spring源码阅读系列--全局目录.md ...

  7. SpringBoot整合EasyExcel实现Excel表格的导出功能

    前言 大家好!我是sum墨,一个一线的底层码农,平时喜欢研究和思考一些技术相关的问题并整理成文,限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教. 在后端管理系统的开发中,经常有导出当前表格数 ...

  8. Qt5.15.0 升级至 Qt5.15.9 遇到的一些错误

    按照之前我写的文章教程,可以很简单的编译出静态库(仅供学习交流) 编译 windows 上的 qt 静态库 编译出静态库后,替换旧版本的库,见我另一篇文章教程 VS2019 配置 QT 库 之所以没有 ...

  9. 2020-11-18 原生js实现自动打字效果

    原理 使用定时器,对要输出的文字进行遍历,每遍历一次,都增加一个字以及在段尾加上"|"暗示别人正在打字. js代码 const fangWrite = (theString, qu ...

  10. zookeeper源码(09)follower处理客户端请求

    在zookeeper中,follower也可以接收客户端连接,处理客户端请求,本文将分析follower处理客户端请求的流程: 读请求处理 写请求转发与响应 follower接收转发客户端请求 网络层 ...