相关文章推荐
大方的羽毛球  ·  uni-app 蓝牙打印, ...·  1 周前    · 
着急的板栗  ·  win10 ...·  1 年前    · 
直爽的黄花菜  ·  高合HiPhi ...·  1 年前    · 

先上代码:

GitHub - byc233518/uniapp-bluetooth-printer-demo: 使用uniApp 连接蓝牙打印机 Demo, CPCL 指令简单实用示例

(内含 芝珂,佳博,精臣 多个厂家指令集使用文档)

文件结构 :


├── App.vue
├── CPCL 指令手册.pdf  // 指令集参考手册
├── LICENSE
├── README.md
├── libs
│   └── print.js // uni-app打印插件
├── main.js // Demo 入口文件
├── manifest.json // uni-app
├── node_modules // 依赖
├── pages
│   ├── index
│   │   └── index.vue // Demo 页面, 业务上使用可参考此文件
│   └── setting
│   └── index.vue // 打印机连接, 可以集成到应用的系统设置功能
├── pages.json // 页面配置文件
├── uni.scss // uni-app 样式文件
└── yarn.lock

运行方法 :

  1. 将代码解压缩, 导入到HBuilderX中;
  2. 连接手机;
  3. 运行到手机或模拟器--运行到Android App 基座;
  4. 待运行完毕, 在 蓝牙设置 界面点击“搜索设备”并进行连接;
  5. 点击”Demo界面”按钮跳转到Demo, 填写表单信息后点击”打印测试”按钮进行测试;

集成步骤 :

  1. Demo libs/print.js 复制到项目目录下 ;
  2. 参考Demo pages/setting/index.vue 在项目合适位置集成打印机连接配置功能 , 一般在系统设置 ;
  3. 在需要的文件中引用 libs/print.js print 方法 ;
  4. 拼接指令集 , 见demo , 更多使用方法参见 CPCL 指令集变成文档 . pdf ;
  5. 调用 打印插件的 print 方法进行打印 , 入参为 打印机ID 拼接好的指令集字符串 ;

代码解析 :

*************************************************libs/print.js***********************************************

* @param mac_address 打印机ID  * @param data 指令集字符串, 为了灵活起见, 指令集在业务代码中进行转换然后传递进来 export const print = (mac_address, data) => {     var that = this     if (!mac_address) {         uni.showModal({             title: "提示",             content: "请选择蓝牙打印机",             showCancel: false,         return     if (!data) {         uni.showModal({             title: "提示",             content: "请提供打印数据.",             showCancel: false,         return     main = plus.android.runtimeMainActivity()     BluetoothAdapter = plus.android.importClass("android.bluetooth.BluetoothAdapter")     var UUID = plus.android.importClass("java.util.UUID")     uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB")     BAdapter = BluetoothAdapter.getDefaultAdapter()     if (!BAdapter.isEnabled()) {         uni.showModal({             title: "提示",             content: "蓝牙处于关闭状态,是否打开?",             success: (_) => {                 if (_.confirm) {                     BAdapter.enable()         console.log("蓝牙处于关闭状态,正在打开...")         return     device = BAdapter.getRemoteDevice(mac_address)     plus.android.importClass(device)     bluetoothSocket = device.createInsecureRfcommSocketToServiceRecord(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)         outputStream.write([0x1b, 0x40]) //打印复位         outputStream.flush()         var bytes = plus.android.invoke(data, "getBytes", "gbk") /*utf-8*/         outputStream.write(bytes)         outputStream.flush()         device = null //这里关键         bluetoothSocket.close()

******************************************pages/index/index.vue******************************************

<template>
				<input v-model="formData.name" class="uni-input" placeholder="公司名称" />
				<input v-model="formData.model" class="uni-input" placeholder="车型" />
				<input v-model="formData.code" class="uni-input" placeholder="条码" />
				<input v-model="formData.line" class="uni-input" placeholder="产线" />
				<input v-model="formData.box" class="uni-input" placeholder="箱号" />
				<input v-model="formData.date" class="uni-input" placeholder="日期" />
				<input v-model="formData.operator" class="uni-input" placeholder="装箱人" />
				<input v-model="formData.auditor" class="uni-input" placeholder="确认人" />
			</view>
			<view class="buttos-bar">
				<button class="plain-button plain-button--blue" @click="printTest">打印测试</button>
				<navigator url="/pages/setting/index" hover-class="navigator-hover">
					<button type="default">跳转到设置界面</button>
				</navigator>
			</view>
		</view>
	</view>
	</view>
</template>
<script>
	// 引入打印插件的打印方法
	import {
		print
	} from '@/libs/print.js'
	export default {
		name: 'PrintDemo',
		data() {
			return {
				// 业务数据
				formData: {
					name: "xxx配件有限公司",
					model: "型号123456789",
					code: "编码123456789",
					line: "产线1",
					box: "序号1",
					date: "2023/11/15",
					operator: "操作人",
					auditor: "审核人",
		methods: {
			printTest() {
				// 从缓存中获取已经连接的打印机信息
				var printerid = uni.getStorageSync('ble_printerId')
				if (printerid) {
					if (printerid != null && printerid.length > 0) {
						const data = this.formData
						// 标签开始, 固定开头, 详见 指令集文档
						var str = " ! 0 200 200 350 1 " + '\r\n';
						// 设置打印纸张宽度
						str += "PAGE-WIDTH 600" + '\r\n';
						// 标签内容
						// 文本 {command} {font} {size} {x} {y} {data}
						str += "TEXT 24 0 30 50 " + data.name +"\r\n";
						// 二维码 {command} {type} {x} {y} [M n] [U n] {data}
						str += "B QR 380 20 M 2 U 5" + '\r\n';
						str += "MA," + data.code +"\r\n";
						str += "ENDQR" + '\r\n';
						str += "TEXT 24 0 30 100 车型: " + data.model +"\r\n";
						str += "TEXT 24 0 30 150 条码编号:" + data.code +"\r\n";
						str += "TEXT 24 0 320 150 生产线号:" + data.line +"\r\n";
						str += "TEXT 24 0 30 200 装箱序号:" + data.box +"\r\n";
						str += "TEXT 24 0 320 200 日期:" + data.date +"\r\n";
						str += "TEXT 24 0 30 250 装箱人:" + data.operator +"\r\n";
						str += "TEXT 24 0 320 250 确认人:" + data.auditor +"\r\n";
						// 标签结束
						str += "GAP-SENSE" + '\r\n';
						str += "FORM " + '\r\n';
						str += "PRINT " + '\r\n';
						// 指令集拼接完成, 调用打印插件打印方法进行打印
						print(printerid, str);
				} else {
					uni.showModal({
						title: '提示',
						content: '请先选择已配对的蓝牙打印机, 再进行测试.',
						showCancel: false
</script>
<style scoped lang="scss">
	.uni-input {
		margin-top: 10px;
		height: 30px;
		border: 1px solid #eee;
</style>

****************************************pages/setting/index.vue******************************************

方法解释:

searchDevices  //开始搜寻附近的蓝牙外围设备
onConn // 连接打印机
蓝牙 连接德佟 打印 打印 1、导入插件; 在插件市场中搜索LPAPI,进入之后,点击右侧的“购买for云打包”,选择目标项目,按照提示操作即可; 2、 配置插件; 用HBuilderX打开目标项目,选择manifest.json,打开配置视图,在右侧选择“ App 原生插件配置”,找到“云端插 件”,点击“选择云端插件”,勾选目标插件即可; 3、配置 蓝牙 权限; 标签 打印 机主要是用 蓝牙 进行数据传输的,所以在 使用 前需要配置先 蓝牙 操作权限; <uses-permission android:name=\"and
1、佳博标签 打印 机编程手册tspl v1.0.7.pdf 2、佳博 打印 机自定义 指令 手册 v1.0.0.pdf 3、佳博面单 打印 机编程手册c pc l v1.0.3.pdf 4、佳博票据 打印 机编程手册esc v1.0.6.pdf 5、C PC L 指令 手册.pdf
### 回答1: 斑马C PC L (Comtec Printer Control Language) 是一种常见的 指令 语言,用于控制斑马 打印 打印 任务。然而,由于斑马 打印 机最初设计用于 打印 英文字符, 使用 C PC L 指令 打印 中文存在一些限制。 要 使用 斑马C PC L 指令 打印 中文,需要注意以下几点: 1. 字体选择:斑马 打印 机通常预装了几种字体,包括一些支持中文的字体。需要确保所选字体能够正确显示中文字符。 2. 字符编码:斑马 打印 使用 的字符编码通常是ASCII码,因此在 打印 中文字符之前,需要将中文字符转换为对应的ASCII码。可以 使用 相应的编码表或者编程语言库来实现转换。 3. 字符宽度:中文字符通常比英文字母宽,因此在 使用 C PC L 指令 时需要调整字符宽度,以确保中文字符能够完整显示。 4. 换行控制:在 使用 C PC L 指令 打印 中文时,需要特别注意换行的位置。中文字符的高度可能会影响到下一行文字的位置,需要谨慎控制换行的位置,以避免错位或重叠现象。 总之, 使用 斑马C PC L 指令 打印 中文是可行的,但需要考虑一些额外的因素,如字体选择、字符编码、字符宽度和换行控制。如果需要更高效、更稳定地 打印 中文,建议考虑 使用 支持中文的 打印 机或控制语言,如支持 Uni code编码的 指令 。 ### 回答2: 斑马C PC L 指令 是指针对斑马 打印 机的一种特定 指令 格式,可用于控制 打印 机进行 打印 操作。关于在斑马C PC L 指令 打印 中文的问题,可以通过以下几个步骤来实现: 1. 设置 打印 机的字符集为中文字符集。可以 使用 "SETM" 指令 打印 机的字符集设置为中文字符集。 示例 指令 :^XA^CWZ,E:SIMSUN.FNT^XZ 解释: 使用 "^CWZ" 指令 设置字符集为中文字符集,并选择相应的字体文件。 2. 对于要 打印 的中文字符,需要将其转换成对应的字符编码。可以 使用 Uni code编码或者其他中文字符编码来表示中文字符。 示例 指令 :^XA^FO100,100^A@N,50,50,E:SIMSUN.FNT^FH^FD文本^FS^XZ 解释: 使用 "^FO" 指令 设置 打印 文本的位置,"^A" 指令 选择字体和文字大小,"^FD" 指令 后面跟随的是转换后的中文字符编码。 3. 如果遇到多行文本,可以 使用 "^FB" 指令 来设置文本框的大小和对齐方式。 示例 指令 :^XA^FO100,100^A@N,50,50,E:SIMSUN.FNT^FB400,3,,R^FD文本1\n文本2^FS^XZ 解释: 使用 "^FB" 指令 设置文本框的宽度为400,设置最多显示3行文本,并设置对齐方式为右对齐。 通过以上步骤,我们可以在斑马 打印 使用 C PC L 指令 打印 中文字符。但需要注意的是, 打印 机必须支持中文字符集和相应的字体文件,否则无法正常 打印 中文字符。 ### 回答3: 斑马C PC L 指令 是一种用于 打印 机的命令语言。虽然斑马C PC L 指令 本身不直接支持中文字符的 打印 ,但我们可以通过一些特殊的处理来实现中文 打印 。 首先,需要将要 打印 的中文字符转换为其对应的 Uni code编码。然后,可以 使用 C PC L 指令 中的CG命令来 打印 Uni code编码对应的字符。CG命令需要提供字符的x、y坐标以及相应的 Uni code编码。 例如,在C PC L 指令 中,可以 使用 如下命令 打印 一个中文字符:"你": CG 10,10,0,40,0,"4F60" 其中,10、10分别是字符的x、y坐标,40是字符的高度,0代表正常字体,"4F60"是"你"对应的 Uni code编码。 如果要 打印 多个中文字符,可以 使用 循环结构来处理。例如,可以 使用 FOR...ENDFOR命令结合CG命令来实现批量 打印 。 总体而言,斑马C PC L 指令 虽然不直接支持中文 打印 ,但通过将中文字符转换为 Uni code编码,并 使用 CG命令在指定位置 打印 字符,我们可以在 打印 机上实现中文 打印
vue 项目使用vue-i18n报错 Cannot translate the value of keypath 'xxx'. Use the value of keypath as default. 21124