Flutter蓝牙热敏打印机控制插件esc_pos_bluetooth_updated的使用

Flutter蓝牙热敏打印机控制插件esc_pos_bluetooth_updated的使用

该库允许使用蓝牙打印机打印收据。对于WiFi/以太网打印机,请使用esc_pos_printer库。

TODO(欢迎提交PR!)

  • 将字节数据拆分为块:问题
  • 使用GS ( k命令打印QR码(已支持从图像打印QR码)
  • 使用GS ( k命令打印PDF-417条形码
  • 使用ESC 3 <n>命令设置行间距

如何帮助

  • 测试您的打印机并将其添加到表格中:WiFi/网络打印机蓝牙打印机
  • 测试并报告错误
  • 分享您可以改进的想法(代码优化、新功能等)
  • 欢迎提交PR!

测试过的打印机

以下是一些使用该库测试过的打印机:测试过的打印机列表。请将您测试过的模型添加到列表中,以维护和改进此库,并帮助其他人选择合适的打印机。

生成票据

简单票据与样式

Ticket testTicket() {
  final Ticket ticket = Ticket(PaperSize.mm80);

  ticket.text(
      'Regular: aA bB cC dD eE fF gG hH iI jJ kK lL mM nN oO pP qQ rR sS tT uU vV wW xX yY zZ');
  ticket.text('Special 1: àÀ èÈ éÉ ûÛ üÜ çÇ ôÔ',
      styles: PosStyles(codeTable: PosCodeTable.westEur));
  ticket.text('Special 2: blåbærgrød',
      styles: PosStyles(codeTable: PosCodeTable.westEur));

  ticket.text('Bold text', styles: PosStyles(bold: true));
  ticket.text('Reverse text', styles: PosStyles(reverse: true));
  ticket.text('Underlined text',
      styles: PosStyles(underline: true), linesAfter: 1);
  ticket.text('Align left', styles: PosStyles(align: PosAlign.left));
  ticket.text('Align center', styles: PosStyles(align: PosAlign.center));
  ticket.text('Align right',
      styles: PosStyles(align: PosAlign.right), linesAfter: 1);

  ticket.text('Text size 200%',
      styles: PosStyles(
        height: PosTextSize.size2,
        width: PosTextSize.size2,
      ));

  ticket.feed(2);
  ticket.cut();
  return ticket;
}

您可以在这里找到更多示例。

打印票据

PrinterBluetoothManager printerManager = PrinterBluetoothManager();

printerManager.scanResults.listen((printers) async {
  // 存储找到的打印机
});
printerManager.startScan(Duration(seconds: 4));

// ...

printerManager.selectPrinter(printer);
final PosPrintResult res = await printerManager.printTicket(testTicket());

print('Print result: ${res.msg}');

完整的示例,请查看演示项目example/blue

排查问题

如果您的打印机仅打印图像的5%-10%后停止,或者无法在同一张票上打印超过一张图像,或者无法打印长票据,请尝试调整PrinterBluetoothManager.printTicketqueueSleepTimeMs(尝试50或100ms):

printerManager.printTicket(await demoReceipt(paper), queueSleepTimeMs: 50);

更多关于Flutter蓝牙热敏打印机控制插件esc_pos_bluetooth_updated的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter蓝牙热敏打印机控制插件esc_pos_bluetooth_updated的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter应用中使用esc_pos_bluetooth_updated插件来控制蓝牙热敏打印机的示例代码。这个插件允许你通过蓝牙连接并控制ESC/POS指令集的打印机。

首先,确保你已经在pubspec.yaml文件中添加了依赖:

dependencies:
  flutter:
    sdk: flutter
  esc_pos_bluetooth_updated: ^x.y.z  # 请替换为最新版本号

然后运行flutter pub get来安装依赖。

示例代码

以下是一个完整的示例,展示如何扫描蓝牙设备、连接到打印机并发送打印命令。

1. 导入必要的包

import 'package:flutter/material.dart';
import 'package:esc_pos_bluetooth_updated/esc_pos_bluetooth_updated.dart';
import 'package:flutter_bluetooth_serial/flutter_bluetooth_serial.dart';

2. 主应用逻辑

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  FlutterBluetoothSerial _bluetooth = FlutterBluetoothSerial();
  BluetoothDevice? _connectedDevice;
  BluetoothConnection? _connection;
  EscPosBluetooth? _escPosPrinter;

  @override
  void initState() {
    super.initState();
    _initBluetooth();
  }

  @override
  void dispose() {
    _connection?.close();
    _bluetooth.close();
    super.dispose();
  }

  Future<void> _initBluetooth() async {
    bool isEnabled = await _bluetooth.isEnabled();
    if (!isEnabled) {
      await _bluetooth.requestEnable();
    }

    // 获取已配对的设备列表
    List<BluetoothDevice> pairedDevices = await _bluetooth.getBondedDevices();
    if (pairedDevices.isNotEmpty) {
      // 这里你可以显示设备列表供用户选择,为了简单起见,我们直接连接第一个设备
      _connectedDevice = pairedDevices.first;
      print('Connected to device: ${_connectedDevice?.name}');
      _connectToDevice();
    } else {
      print('No paired devices found.');
    }
  }

  Future<void> _connectToDevice() async {
    if (_connectedDevice != null) {
      _connection = await _bluetooth.connect(_connectedDevice!.address);
      print('Connected to ${_connectedDevice?.name}');

      // 初始化ESC/POS蓝牙打印机
      _escPosPrinter = EscPosBluetooth(_connection!);

      // 发送打印命令
      _sendPrintCommand();
    }
  }

  Future<void> _sendPrintCommand() async {
    if (_escPosPrinter != null) {
      try {
        // 打印文本
        await _escPosPrinter!.printText('Hello, ESC/POS Bluetooth Printer!\n');

        // 打印换行
        await _escPosPrinter!.newLine();

        // 打印切割命令(如果打印机支持)
        await _escPosPrinter!.cutPaper();

        print('Print command sent successfully.');
      } catch (e) {
        print('Error sending print command: $e');
      }
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter ESC/POS Bluetooth Printer'),
        ),
        body: Center(
          child: Text('Scanning and connecting to Bluetooth printer...'),
        ),
      ),
    );
  }
}

注意事项

  1. 权限处理:在实际应用中,你需要处理Android和iOS的蓝牙权限请求。
  2. 设备选择:上述代码直接连接了第一个配对设备,实际应用中你可能需要提供一个UI供用户选择设备。
  3. 错误处理:示例代码中的错误处理比较简单,实际应用中你可能需要更完善的错误处理逻辑。
  4. 插件版本:确保使用最新版本的esc_pos_bluetooth_updated插件,因为API可能会随着版本更新而变化。

通过上述代码,你应该能够成功连接到蓝牙热敏打印机并发送打印命令。如果遇到任何问题,请查阅插件的官方文档或GitHub仓库获取更多信息。

回到顶部