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

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

简介

esc_pos_utils_plus_forked 是一个用于生成ESC/POS命令的Flutter/Dart库。这些命令可以发送到热敏打印机。

该库被用作以下项目的基库:

主要特性

  • 连接到Wi-Fi/以太网打印机
  • 使用text方法进行简单的文本打印
  • 使用row方法打印表格
  • 文本样式支持:
    • 大小、对齐方式、加粗、反向、下划线、不同字体、旋转90度
  • 打印图像
  • 打印条形码(支持UPC-A, UPC-E, JAN13 (EAN13), JAN8 (EAN8), CODE39, ITF (Interleaved 2 of 5), CODABAR (NW-7), CODE128)
  • 打印纸张切割(部分切割、全切割)
  • 发出蜂鸣声(不同持续时间)
  • 纸张进纸、反向进纸

注意:您的打印机可能不支持上述所有功能(某些样式、部分/全纸张切割、反向进纸、条形码等)。

生成票据

简单票据与样式
List<int> testTicket() {
  final List<int> bytes = [];
  // 使用默认配置文件
  final profile = await CapabilityProfile.load();
  final generator = Generator(PaperSize.mm80, profile);
  
  bytes += generator.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');
  bytes += generator.text('Special 1: àÀ èÈ éÉ ûÛ üÜ çÇ ôÔ',
      styles: PosStyles(codeTable: PosCodeTable.westEur));
  bytes += generator.text('Special 2: blåbærgrød',
      styles: PosStyles(codeTable: PosCodeTable.westEur));

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

  bytes += generator.text('Text size 200%',
      styles: PosStyles(
        height: PosTextSize.size2,
        width: PosTextSize.size2,
      ));

  bytes += generator.feed(2);
  bytes += generator.cut();
  return bytes;
}
打印表格行
generator.row([
    PosColumn(
      text: 'col3',
      width: 3,
      styles: PosStyles(align: PosAlign.center, underline: true),
    ),
    PosColumn(
      text: 'col6',
      width: 6,
      styles: PosStyles(align: PosAlign.center, underline: true),
    ),
    PosColumn(
      text: 'col3',
      width: 3,
      styles: PosStyles(align: PosAlign.center, underline: true),
    ),
  ]);
打印图像
import 'dart:io';
import 'package:image/image.dart';

final ByteData data = await rootBundle.load('assets/logo.png');
final Uint8List bytes = data.buffer.asUint8List();
final Image image = decodeImage(bytes);
// 使用 `ESC *`
generator.image(image);
// 使用 `GS v 0` (过时)
generator.imageRaster(image);
// 使用 `GS ( L`
generator.imageRaster(image);
打印条形码
final List<int> barData = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 4];
generator.barcode(Barcode.upcA(barData));
打印二维码
generator.qrcode('example.com');

如果您的打印机不支持原生命令,可以将二维码作为图像打印:

String qrData = "google.com";
const double qrSize = 200;
try {
  final uiImg = await QrPainter(
    data: qrData,
    version: QrVersions.auto,
    gapless: false,
  ).toImageData(qrSize);
  final dir = await getTemporaryDirectory();
  final pathName = '${dir.path}/qr_tmp.png';
  final qrFile = File(pathName);
  final imgFile = await qrFile.writeAsBytes(uiImg.buffer.asUint8List());
  final img = decodeImage(imgFile.readAsBytesSync());

  generator.image(img);
} catch (e) {
  print(e);
}

使用代码表

不同的打印机支持不同的代码表集。一些打印机型号在CapabilityProfile类中定义。因此,如果您想更改默认代码表,选择正确的配置文件很重要:

// Xprinter XP-N160I
final profile = await CapabilityProfile.load('XP-N160I');
final generator = Generator(PaperSize.mm80, profile);
bytes += generator.setGlobalCodeTable('CP1252');

获取所有可用配置文件的方法:

final profiles = await CapabilityProfile.getAvailableProfiles();

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

1 回复

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


在Flutter中,esc_pos_utils_plus_forked 是一个用于控制热敏打印机的插件,它基于 esc_pos_utils_plus 并提供了一些增强功能和修复。这个插件允许你通过 ESC/POS 命令集与热敏打印机进行通信。以下是一个简单的代码示例,展示如何使用 esc_pos_utils_plus_forked 来打印一些文本。

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

dependencies:
  flutter:
    sdk: flutter
  esc_pos_utils_plus_forked: ^x.y.z  # 请替换为实际的版本号

然后,运行 flutter pub get 来获取依赖。

接下来,你可以在你的 Flutter 项目中使用这个插件。以下是一个完整的示例,包括初始化蓝牙连接、配置打印机和打印文本:

import 'package:flutter/material.dart';
import 'package:esc_pos_utils_plus_forked/esc_pos_utils_plus_forked.dart';
import 'package:esc_pos_bluetooth/esc_pos_bluetooth.dart';
import 'package:esc_pos_printer_db/esc_pos_printer_db.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('ESC/POS Printer Example'),
        ),
        body: Center(
          child: PrintButton(),
        ),
      ),
    );
  }
}

class PrintButton extends StatefulWidget {
  @override
  _PrintButtonState createState() => _PrintButtonState();
}

class _PrintButtonState extends State<PrintButton> {
  late BluetoothEscPosPrinter printer;

  @override
  void initState() {
    super.initState();
    // 初始化打印机
    printer = BluetoothEscPosPrinter();
    printer.init();
  }

  @override
  Widget build(BuildContext context) {
    return ElevatedButton(
      onPressed: () async {
        // 搜索打印机(这里假设你已经知道打印机的设备地址)
        // var devices = await printer.devices();
        // var selectedDevice = devices.first;

        // 这里直接使用已知的打印机地址
        String deviceAddress = 'YOUR_PRINTER_ADDRESS_HERE';

        // 连接到打印机
        await printer.connect(deviceAddress);

        // 配置打印机
        await printer.setAlign(EscPosAlign.CENTER);
        await printer.setFontSize(2);
        await printer.setFontType(EscPosFontType.B);

        // 打印文本
        await printer.printText('Hello, ESC/POS Printer!\n');

        // 打印二维码(可选)
        var qrCodeData = 'https://example.com';
        await printer.printQrCode(qrCodeData, width: 3, height: 3);

        // 切纸
        await printer.cut();

        // 断开连接
        await printer.disconnect();
      },
      child: Text('Print'),
    );
  }
}

注意

  1. 你需要替换 'YOUR_PRINTER_ADDRESS_HERE' 为你的热敏打印机的实际蓝牙地址。
  2. 这个示例假设你已经开启了蓝牙权限,并且设备支持蓝牙通信。
  3. 插件的使用可能需要根据具体的打印机型号和蓝牙配置进行调整。
  4. 蓝牙连接和断开操作可能需要一些时间来处理,因此在实际应用中可能需要添加适当的错误处理和用户反馈。

这个示例演示了如何使用 esc_pos_utils_plus_forked 插件来初始化蓝牙连接、配置打印机、打印文本和二维码,并最终断开连接。根据你的具体需求,你可以进一步扩展和定制这个示例。

回到顶部