Flutter热敏打印机控制插件escpos的使用

Flutter热敏打印机控制插件escpos的使用

ESC/POS dart库

Pub Version

该库是从 https://github.com/andrey-ushakov/esc_pos_printer 派生出来的。

该库允许使用ESC/POS热敏WiFi/以太网打印机打印收据。对于蓝牙打印机,请使用 esc_pos_bluetooth 库。

它可以在Flutter或纯Dart项目中使用。对于Flutter项目,同时支持Android和iOS。

要在网络中查找打印机,可以考虑使用 ping_discover_network 包。请注意,大多数ESC/POS打印机默认监听端口9100。

TODO (PRs是受欢迎的!)

  • 使用 GS ( k 命令打印QR码(已支持从图像打印QR码)
  • 使用 GS ( k 命令打印PDF-417条形码
  • 使用 ESC 3 <n> 命令设置行间距

如何帮助

  • 测试你的打印机并添加到表格中:Wifi/Network打印机Bluetooth打印机
  • 测试并报告错误
  • 分享你对如何改进的想法(代码优化、新功能等)
  • PR是受欢迎的!

测试过的打印机

这里有一些使用此库测试过的打印机:测试过的打印机。请添加你测试过的模型,以便维护和改进此库,并帮助其他人选择合适的打印机。

生成一个收据

简单收据与样式

void testReceipt(NetworkPrinter printer) {
  printer.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');
  printer.text('Special 1: àÀ èÈ éÉ ûÛ üÜ çÇ ôÔ',
      styles: PosStyles(codeTable: 'CP1252'));
  printer.text('Special 2: blåbærgrød',
      styles: PosStyles(codeTable: 'CP1252'));

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

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

  printer.feed(2);
  printer.cut();
}

你可以在这里找到更多示例:esc_pos_utils

打印一个收据

import 'package:esc_pos_printer/esc_pos_printer.dart';

const PaperSize paper = PaperSize.mm80;
final profile = await CapabilityProfile.load();
final printer = NetworkPrinter(paper, profile);

final PosPrintResult res = await printer.connect('192.168.0.123', port: 9100);

if (res == PosPrintResult.success) {
  testReceipt(printer);
  printer.disconnect();
}

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

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

1 回复

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


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

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

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

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

接下来,是一个简单的Flutter应用示例,它展示了如何连接到蓝牙热敏打印机并打印一行文本。

import 'package:flutter/material.dart';
import 'package:escpos_bluetooth/escpos_bluetooth.dart';

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

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

class _MyAppState extends State<MyApp> {
  EscposBluetooth? _printer;
  BluetoothDevice? _connectedDevice;

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

  Future<void> initPrinter() async {
    _printer = EscposBluetooth();

    // 获取已配对的蓝牙设备列表
    List<BluetoothDevice> devices = await _printer!.getPairedDevices();

    // 假设我们选择第一个设备(实际应用中应让用户选择)
    if (devices.isNotEmpty) {
      _connectedDevice = devices.first;
      await connectToDevice(_connectedDevice!);
    } else {
      print("No paired devices found.");
    }
  }

  Future<void> connectToDevice(BluetoothDevice device) async {
    try {
      await _printer!.connect(device.address);
      print("Connected to device: ${device.name}");
      await printReceipt();
    } catch (e) {
      print("Failed to connect: $e");
    }
  }

  Future<void> printReceipt() async {
    try {
      // ESC/POS指令集: 初始化打印机
      List<int> initBytes = Uint8List.fromList([0x1B, 0x40]);
      await _printer!.write(initBytes);

      // 打印一行文本
      String text = "Hello, ESC/POS Printer!";
      List<int> textBytes = Uint8List.fromList(text.codeUnits);
      await _printer!.write(textBytes);

      // 换行
      List<int> newlineBytes = Uint8List.fromList([0x0A]);
      await _printer!.write(newlineBytes);

      // 切割纸(如果打印机支持)
      List<int> cutBytes = Uint8List.fromList([0x1B, 0x66, 0x01]);
      await _printer!.write(cutBytes);

      print("Receipt printed successfully.");
    } catch (e) {
      print("Failed to print receipt: $e");
    } finally {
      // 断开连接
      await _printer!.disconnect();
      print("Disconnected from device.");
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter ESC/POS Printer Example'),
        ),
        body: Center(
          child: Text('Checking for paired devices...'),
        ),
      ),
    );
  }
}

注意

  1. 权限:确保你的AndroidManifest.xml和Info.plist文件中已经添加了必要的蓝牙权限。
  2. 设备选择:上面的代码示例中直接选择了第一个配对设备,实际应用中应该让用户从列表中选择要连接的设备。
  3. 错误处理:示例中的错误处理较为简单,实际应用中应该有更完善的错误处理和用户反馈机制。
  4. 指令集:ESC/POS指令集可能因打印机型号而异,请参考你所使用的打印机的具体指令集文档。

这个示例展示了基本的连接、打印和断开连接的流程,希望对你有所帮助。

回到顶部