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

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

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

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

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

TODO(欢迎PR!)

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

如何帮助

  • 测试你的打印机并添加到表格中:WiFi/网络打印机蓝牙打印机
  • 测试并报告错误
  • 分享你对改进的看法(代码优化、新功能等)
  • PRs欢迎!

已测试的打印机

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

生成收据

简单带样式的收据

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();
}

你可以在这里找到更多例子。

打印收据

import 'package:esc_pos_printer_th/esc_pos_printer_th.dart';

const PaperSize paper = PaperSize.mm80;
final profile = 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}');

完整的示例请查看example/example.dartexample/discover_printers

测试打印

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

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const HoweScreen(),
    );
  }
}

class HoweScreen extends StatefulWidget {
  const HoweScreen({super.key});

  [@override](/user/override)
  State<HoweScreen> createState() => _MyWidgetState();
}

class _MyWidgetState extends State<HoweScreen> {
  late NetworkPrinter printer;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return const Placeholder();
  }
}

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

1 回复

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


esc_pos_printer_th 是一个用于 Flutter 的热敏打印机控制插件,主要用于通过蓝牙或网络连接控制 ESC/POS 兼容的热敏打印机。它支持文本、图像、条形码、二维码等多种打印功能。

1. 安装插件

首先,你需要在 pubspec.yaml 文件中添加 esc_pos_printer_th 插件的依赖:

dependencies:
  esc_pos_printer_th: ^1.0.0  # 请检查最新版本

然后运行 flutter pub get 来安装插件。

2. 引入插件

在 Dart 文件中引入插件:

import 'package:esc_pos_printer_th/esc_pos_printer_th.dart';
import 'package:esc_pos_utils/esc_pos_utils.dart';

3. 初始化打印机

在使用插件之前,你需要初始化打印机并连接到设备。以下是一个简单的示例,展示如何通过蓝牙连接打印机:

final PrinterBluetoothManager printerManager = PrinterBluetoothManager();

void connectToPrinter() async {
  // 搜索蓝牙设备
  List<BluetoothDevice> devices = await printerManager.discover();

  // 选择第一个设备进行连接
  if (devices.isNotEmpty) {
    await printerManager.selectDevice(devices[0]);

    // 检查连接状态
    bool connected = await printerManager.isConnected();
    if (connected) {
      print('打印机连接成功');
    } else {
      print('打印机连接失败');
    }
  }
}

4. 打印内容

连接成功后,你可以开始打印内容。以下是一个简单的打印示例:

void printReceipt() async {
  // 创建打印纸
  final PaperSize paper = PaperSize.mm58;
  final profile = await CapabilityProfile.load();
  final generator = Generator(paper, profile);

  // 生成打印内容
  List<int> bytes = [];
  bytes += generator.text('Hello, World!');
  bytes += generator.text('欢迎使用热敏打印机');
  bytes += generator.feed(2);
  bytes += generator.cut();

  // 发送打印指令
  await printerManager.writeBytes(bytes);
}

5. 断开连接

打印完成后,你可以断开与打印机的连接:

void disconnectPrinter() async {
  await printerManager.disconnect();
}

6. 处理错误

在实际使用中,可能会遇到各种错误,如连接失败、打印失败等。你可以通过 try-catch 来捕获并处理这些错误:

void printReceipt() async {
  try {
    final PaperSize paper = PaperSize.mm58;
    final profile = await CapabilityProfile.load();
    final generator = Generator(paper, profile);

    List<int> bytes = [];
    bytes += generator.text('Hello, World!');
    bytes += generator.text('欢迎使用热敏打印机');
    bytes += generator.feed(2);
    bytes += generator.cut();

    await printerManager.writeBytes(bytes);
  } catch (e) {
    print('打印失败: $e');
  }
}
回到顶部