先上代码:
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
运行方法
:
-
将代码解压缩, 导入到HBuilderX中;
-
连接手机;
-
运行到手机或模拟器--运行到Android App 基座;
-
待运行完毕, 在 蓝牙设置 界面点击“搜索设备”并进行连接;
-
点击”Demo界面”按钮跳转到Demo, 填写表单信息后点击”打印测试”按钮进行测试;
集成步骤
:
-
将
Demo
中
libs/print.js
复制到项目目录下
;
-
参考Demo
中
pages/setting/index.vue
在项目合适位置集成打印机连接配置功能
,
一般在系统设置
;
-
在需要的文件中引用
libs/print.js
的
print
方法
;
-
拼接指令集
,
见demo
,
更多使用方法参见
《
CPCL
指令集变成文档
.
pdf
》
;
-
调用
打印插件的
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