js蓝牙打印实现
实现蓝牙打印的步骤
1. 获取蓝牙设备权限
在项目的 AndroidManifest.xml 文件中添加以下权限:
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
2. 检查并请求蓝牙权限 在 JavaScript 中,使用 Web Bluetooth API 请求蓝牙设备访问权限:
navigator.bluetooth.requestDevice({
acceptAllDevices: true,
optionalServices: ['generic_access']
})
.then(device => {
console.log('设备名称:', device.name);
})
.catch(error => {
console.error('错误:', error);
});
3. 连接蓝牙打印机 连接设备并获取 GATT 服务:
device.gatt.connect()
.then(server => {
return server.getPrimaryService('generic_access');
})
.then(service => {
return service.getCharacteristic('device_name');
})
.then(characteristic => {
return characteristic.readValue();
})
.then(value => {
console.log('设备信息:', new TextDecoder().decode(value));
})
.catch(error => {
console.error('连接错误:', error);
});
4. 发送打印数据 向打印机发送打印指令(示例为 ESC/POS 指令):
const printData = new Uint8Array([0x1B, 0x40, 0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x0A]);
characteristic.writeValue(printData)
.then(() => {
console.log('打印指令发送成功');
})
.catch(error => {
console.error('发送失败:', error);
});
注意事项
蓝牙协议兼容性 不同品牌的蓝牙打印机可能使用不同的协议(如 ESC/POS、ZPL、CPCL),需根据打印机型号调整指令集。
跨平台限制
Web Bluetooth API 目前仅部分浏览器支持(Chrome、Edge),iOS 需使用第三方库如 cordova-plugin-ble-central。
数据格式转换 中文字符需转换为打印机支持的编码格式(如 GB2312),示例代码:
function encodeGB2312(text) {
// 实际项目中需引入编码库或使用后端转换
return new TextEncoder('gb2312').encode(text);
}
调试建议
使用蓝牙调试工具
开发阶段可先用 nRF Connect 等工具测试打印机响应,确认特征值和服务 UUID。
错误处理 增加超时机制和用户提示:
const timeout = setTimeout(() => {
console.error('连接超时');
}, 10000);
device.gatt.connect()
.finally(() => {
clearTimeout(timeout);
});
打印机指令参考 常见 ESC/POS 指令示例:

- 初始化打印机:
[0x1B, 0x40] - 换行:
[0x0A] - 设置字体大小:
[0x1D, 0x21, 0x11](双倍宽高)






