Flutter ESC/POS打印机控制插件yjy_esc_pos_printer的使用

Flutter ESC/POS打印机控制插件yjy_esc_pos_printer的使用

该库允许使用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/网络打印机蓝牙打印机
  • 测试并报告错误
  • 分享你对改进的看法(代码优化、新功能等)
  • 欢迎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);

  // 打印大小为200%的文本
  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 ESC/POS打印机控制插件yjy_esc_pos_printer的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


yjy_esc_pos_printer 是一个用于 Flutter 应用的 ESC/POS 打印机控制插件。它允许你通过蓝牙或网络连接 ESC/POS 兼容的打印机,并发送打印命令。以下是如何使用该插件的基本步骤:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 yjy_esc_pos_printer 依赖:

dependencies:
  flutter:
    sdk: flutter
  yjy_esc_pos_printer: ^0.0.1 # 请检查最新版本

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

2. 导入包

在需要使用打印功能的 Dart 文件中导入包:

import 'package:yjy_esc_pos_printer/yjy_esc_pos_printer.dart';

3. 初始化打印机

在使用打印机之前,需要初始化打印机。你可以通过蓝牙或网络连接打印机。

蓝牙连接

final printer = EscPosPrinter();
await printer.connectBluetooth(bluetoothDevice);

网络连接

final printer = EscPosPrinter();
await printer.connectNetwork(ipAddress, port);

4. 发送打印命令

连接打印机后,你可以发送各种打印命令,例如打印文本、图像、条码等。

打印文本

await printer.printText('Hello, World!');

打印图像

final image = await _getImage(); // 获取图像
await printer.printImage(image);

打印条码

await printer.printBarcode(BarcodeType.CODE128, '123456789');

5. 断开连接

打印完成后,记得断开打印机连接:

await printer.disconnect();

6. 处理异常

在实际使用中,可能会遇到各种异常情况,例如连接失败、打印失败等。建议在使用时进行异常处理:

try {
  await printer.connectBluetooth(bluetoothDevice);
  await printer.printText('Hello, World!');
  await printer.disconnect();
} catch (e) {
  print('Error: $e');
}

7. 示例代码

以下是一个完整的示例代码,展示了如何连接蓝牙打印机并打印文本:

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

class PrintPage extends StatefulWidget {
  [@override](/user/override)
  _PrintPageState createState() => _PrintPageState();
}

class _PrintPageState extends State<PrintPage> {
  final printer = EscPosPrinter();

  Future<void> printTest() async {
    try {
      // 假设你已经获取到了蓝牙设备
      final bluetoothDevice = ...;

      await printer.connectBluetooth(bluetoothDevice);
      await printer.printText('Hello, World!');
      await printer.disconnect();
    } catch (e) {
      print('Error: $e');
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Print Test'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: printTest,
          child: Text('Print'),
        ),
      ),
    );
  }
}
回到顶部