Flutter打印管理插件esc_pos_utils的使用

发布于 1周前 作者 vueper 来自 Flutter

Flutter打印管理插件esc_pos_utils的使用

esc_pos_utils 是一个用于ESC/POS热敏打印机的基础Flutter/Dart库。它可以帮助你生成并发送ESC/POS命令到打印机,实现文本、表格、图像、条形码等多种打印功能。

主要特性

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

注意:您的打印机可能不支持某些功能(如某些样式、部分/全纸切割、倒退进纸、条形码等)。

示例代码

创建简单的票据

import 'package:esc_pos_utils/esc_pos_utils.dart';

Future<List<int>> testTicket() async {
  final profile = await CapabilityProfile.load();
  final generator = Generator(PaperSize.mm80, profile);
  List<int> bytes = [];

  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: 'CP1252'));
  bytes += generator.text('Special 2: blåbærgrød',
      styles: PosStyles(codeTable: 'CP1252'));

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

打印表格行

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:typed_data';
import 'package:image/image.dart' as img;

final ByteData data = await rootBundle.load('assets/logo.png');
final Uint8List imgBytes = data.buffer.asUint8List();
final img.Image image = img.decodeImage(imgBytes)!;
bytes += generator.image(image);
// Print image using an alternative (obsolete) command
// bytes += generator.imageRaster(image);

打印条形码

final List<int> barData = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 4];
bytes += generator.barcode(Barcode.upcA(barData));

打印二维码

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 = img.decodeImage(imgFile.readAsBytesSync());

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

使用代码表

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

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打印功能。请根据您的具体需求和打印机型号进行相应的调整。


更多关于Flutter打印管理插件esc_pos_utils的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter打印管理插件esc_pos_utils的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,关于如何在Flutter项目中使用esc_pos_utils插件进行打印管理,下面是一个详细的代码示例。这个插件主要用于通过蓝牙、USB或网络连接到ESC/POS打印机进行票据打印。

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

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

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

接下来,以下是一个完整的示例,展示如何使用esc_pos_utils插件连接到打印机并发送打印命令:

import 'package:flutter/material.dart';
import 'package:esc_pos_utils/esc_pos_utils.dart';
import 'package:esc_pos_bluetooth/esc_pos_bluetooth.dart';
import 'package:esc_pos_printer/esc_pos_printer.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter ESC/POS Print Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: PrintPage(),
    );
  }
}

class PrintPage extends StatefulWidget {
  @override
  _PrintPageState createState() => _PrintPageState();
}

class _PrintPageState extends State<PrintPage> {
  EscPosBluetooth? _bluetooth;
  EscPosPrinter? _printer;

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

  Future<void> initPrinter() async {
    _bluetooth = EscPosBluetooth();
    _bluetooth!.setDeviceName('Your_Printer_Name'); // 设置打印机的蓝牙名称
    _bluetooth!.setDeviceAddress('Your_Printer_Address'); // 设置打印机的蓝牙地址

    bool isConnected = await _bluetooth!.connect();
    if (isConnected) {
      _printer = EscPosPrinter(_bluetooth!.printer!);
      print('Printer connected!');
    } else {
      print('Failed to connect to printer.');
    }
  }

  Future<void> printReceipt() async {
    if (_printer == null) return;

    await _printer!.alignCenter();
    await _printer!.text('Hello, ESC/POS Printer!\n');
    await _printer!.text('This is a test receipt.\n');
    await _printer!.cut();

    print('Receipt printed!');
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('ESC/POS Print Example'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: printReceipt,
          child: Text('Print Receipt'),
        ),
      ),
    );
  }

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

注意事项:

  1. 蓝牙连接:上面的代码示例中使用了蓝牙连接。如果你的打印机支持USB或网络连接,你需要使用相应的esc_pos包(如esc_pos_usbesc_pos_network)并进行相应的配置。

  2. 依赖包:确保你安装了所有必要的依赖包,比如esc_pos_bluetooth(如果使用蓝牙连接)。

  3. 权限:在Android上,你可能需要在AndroidManifest.xml中添加蓝牙权限。对于iOS,你可能需要在Info.plist中添加相应的蓝牙使用描述。

  4. 设备名称和地址:将Your_Printer_NameYour_Printer_Address替换为你的实际打印机的蓝牙名称和地址。

  5. 打印机指令esc_pos_utils提供了丰富的API来发送各种ESC/POS指令,比如对齐、换行、条形码、二维码等,你可以根据需求进行配置。

这个示例展示了一个基本的打印流程,包括初始化打印机、发送打印命令和切断连接。根据你的具体需求,你可能需要调整代码以适应不同的打印机型号和连接类型。

回到顶部