ble_gprinter 0.0.4 copy "ble_gprinter: ^0.0.4" to clipboard
ble_gprinter: ^0.0.4 copied to clipboard

Gprinter BLE Flutter plugin

ble_gprinter #

Flutter插件,用于通过蓝牙连接佳博(Gprinter)打印机并打印PDF文件。基于佳博Android SDK2实现TSC指令集打印。

功能特性 #

  • ✅ 搜索蓝牙打印机设备
  • ✅ 连接/断开打印机
  • ✅ 打印PDF文件(自动转换为位图)
  • ✅ 获取打印机状态
  • ✅ 支持多种打印机配置(DPI、浓度、速度等)
  • ✅ 支持TSC、ESC、ZPL、CPCL指令集

支持的平台 #

  • Android (minSdk 24+)

安装 #

pubspec.yaml 中添加依赖:

dependencies:
  ble_gprinter: ^0.0.4

Android配置 #

android/app/src/main/AndroidManifest.xml 中添加权限:

<!-- 蓝牙权限 -->
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN"
    android:usesPermissionFlags="neverForLocation" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

<!-- 文件访问权限 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

android/build.gradle.kts 中添加佳博maven库:

allprojects {
    repositories {
         //佳博SDK仓库
        maven {
            url = uri("http://118.31.6.84:8081/repository/maven-public/")
            isAllowInsecureProtocol = true
        }
        google {
            url = uri("https://maven.aliyun.com/repository/google")
        }
        maven {
            url = uri("https://maven.aliyun.com/repository/public")
        }
        maven {
            url = uri("https://jitpack.io")
        }
    }
}

使用方法 #

1. 初始化插件 #

import 'package:ble_gprinter/ble_gprinter.dart';

final bleGprinter = BleGprinter();

2. 监听打印机事件 #

bleGprinter.onPrinterEvent.listen((event) {
  final eventType = event['event'];
  
  switch (eventType) {
    case 'onDeviceFound':
      // 发现设备
      print('发现设备: ${event['deviceName']} - ${event['deviceAddress']}');
      break;
    case 'onPrinterConnected':
      // 打印机已连接
      print('打印机连接成功');
      break;
    case 'onPrinterConnectFail':
      // 连接失败
      print('打印机连接失败');
      break;
    case 'onPrinterDisconnect':
      // 打印机断开
      print('打印机已断开');
      break;
    case 'onSearchCompleted':
      // 搜索完成
      print('搜索完成');
      break;
  }
});

3. 搜索打印机 #

//onlyGprinter 是否只搜佳博
await bleGprinter.searchPrinters(onlyGprinter: true);

4. 连接打印机 #

await bleGprinter.connectPrinter(deviceAddress, deviceName);

5. 打印PDF #

final result = await bleGprinter.printPdf(
  '/path/to/file.pdf',
  width: 80,        // 标签宽度(mm)
  height: 120,      // 标签高度(mm)
  dpi: 203,         // DPI (203或300)
  density: 8,       // 打印浓度 (1-15)
  speed: 2,         // 打印速度 (1-5)
  paperType: 1,     // 纸张类型: 0=连续纸, 1=间隔纸, 2=黑标纸
  instruction: 1,   // 指令集: 0=ESC, 1=TSC, 2=ZPL, 3=CPCL
);

if (result['success'] == true) {
  print('打印成功,共${result['pageCount']}页');
}

6. 获取打印机状态 #

/// [instruction] 指令集(0=ESC,1=TSC,2=ZPL,3=CPCL)
final status = await bleGprinter.getPrinterStatus(instruction:1);

print('状态码: ${status['status']}');
print('缺纸: ${status['isOutOfPaper']}');
print('开盖: ${status['isOpenCover']}');
print('卡纸: ${status['isJampPaper']}');
print('暂停: ${status['isPausePrint']}');
print('其他错误: ${status['isOtherError']}');

7. 检查连接状态 #

bool connected = await bleGprinter.isConnected();

8. 断开连接 #

await bleGprinter.disconnectPrinter();

完整示例 #

参考 example/lib/main.dart 文件,其中包含一个完整的使用示例,展示了如何:

  • 搜索并连接打印机
  • 选择并打印PDF文件
  • 监听打印机事件
  • 显示打印机状态

API参考 #

方法 #

方法 说明 参数 返回值
searchPrinters() 搜索打印机设备 Future<bool>
stopSearch() 停止搜索 Future<bool>
connectPrinter() 连接打印机 String deviceAddress, String deviceName Future<bool>
disconnectPrinter() 断开连接 Future<bool>
isConnected() 检查连接状态 Future<bool>
printPdf() 打印PDF文件 见下表 Future<Map<String, dynamic>>
getPrinterStatus() 获取打印机状态 Future<Map<String, dynamic>>

printPdf 参数 #

参数 类型 默认值 说明
pdfPath String 必填 PDF文件路径
width int 80 标签宽度(mm)
height int 120 标签高度(mm)
dpi int 203 打印机DPI (203或300)
density int 8 打印浓度 (1-15)
speed int 2 打印速度 (1-5)
paperType int 1 纸张类型: 0=连续纸, 1=间隔纸, 2=黑标纸
instruction int 1 指令集: 0=ESC, 1=TSC, 2=ZPL, 3=CPCL

事件类型 #

事件 说明 数据字段
onDeviceFound 发现设备 deviceType, deviceName, deviceAddress
onSearchCompleted 搜索完成
onPrinterConnected 打印机已连接 message
onPrinterConnectFail 连接失败 message
onPrinterDisconnect 打印机断开 message

注意事项 #

  1. Android 12 (API 31) 及以上需要动态请求蓝牙权限
  2. 打印PDF前确保打印机已连接
  3. 根据实际打印机型号调整DPI、浓度等参数
  4. TSC指令集适用于标签打印机

许可证 #

MIT License

技术支持 #

如有问题,请查看佳博官方文档或提交Issue。