Flutter打印机控制插件sunmi_printer的使用

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

Flutter打印机控制插件sunmi_printer的使用

安装

flutter pub add sunmi_printer

测试设备

  • Sunmi V2 Pro
  • Sunmi V2 Pro (Label Version)

初始化

import 'package:sunmi_printer/sunmi_printer.dart';

await SunmiPrinter.bindingPrinter(); // 必须绑定打印机。更多示例,请参阅示例标签。

常用功能列表

Method Function Type (Future) Description Support Devices
bindingPrinter() void 绑定Sunmi内嵌打印机服务,仅初始化一次。 Sunmi v2 pro, Sunmi v2 Pro (label version)
unbindingPrinter() void 根据您的使用场景可以解绑打印机。 Sunmi v2 pro, Sunmi v2 Pro (label version)
initPrinter() bool 打印机初始化。注意:重置逻辑程序(如设置、粗体等)但不会清除缓冲区中的数据。因此,在重置后打印未完成的任务将继续进行。如果初始化成功,将返回true值。 Sunmi v2 pro, Sunmi v2 Pro (label version)
getPrinterStatus() enum PrinterStatus 返回枚举状态,例如:PrinterStatus.NORMAL, PrinterStatus.ERROR等… Refer to this list of status Sunmi v2 pro, Sunmi v2 Pro (label version)
getPrinterStatusWithVerbose() String 返回附加详细信息或文本解释。例如:‘Something went wrong.’ (ERROR), ‘Works normally’ (NORMAL)等… Refer to this list of status Sunmi v2 pro, Sunmi v2 Pro (label version)
getPrinterMode() enum PrinterMode 获取打印机模式。注意:如果要打印标签,请将打印机模式更改为标签模式,但标签模式仅支持V2 Pro标签版本。Refer to this list of mode Sunmi v2 pro, Sunmi v2 Pro (label version)
lineWrap(int lines) void 在纸上实施n个换行符。注意:强制换行。在内容打印后在纸上实施n个换行符。 Sunmi v2 pro, Sunmi v2 Pro (label version)
printText(String text) void 需要打印的文字。根据文档从Sunmi…我们需要在字符串末尾添加\n,但我已经在字符串末尾附加上了\n,所以您不需要手动添加\n Sunmi v2 pro, Sunmi v2 Pro (label version)
setAlignment(PrintAlign alignment) void 下一行方法的对齐方式。可用的对齐方式:PrintAlign.LEFT, PrintAlign.CENTER 和 PrintAlign.RIGHT Sunmi v2 pro, Sunmi v2 Pro (label version)
printImage(Uint8List img) void 将图像转换为Uint8List格式以传递给参数。注意:图像分辨率应在2M以内,并且宽度应与纸张规格一致(58: 384 Pixel, 80: 576 Pixel)。超出纸张宽度则无法显示。 Sunmi v2 pro, Sunmi v2 Pro (label version)

交易功能列表

Method Function Type (Future) Description Support Devices
startTransactionPrint([bool clear = false]) void 进入交易模式。如果向函数传递参数true,它将打印交易队列中的所有内容。如果传递参数false,它将不打印交易队列中的内容,并将其保存并提交下次。默认值为false。有关详情,请参阅Sunmi文档。 Sunmi v2 pro, Sunmi v2 Pro (label version)
submitTransactionPrint() void 提交交易打印 Sunmi v2 pro, Sunmi v2 Pro (label version)
exitTransactionPrint([bool clear = true]) void 退出交易打印模式。如果向函数传递参数true,它将打印缓冲区中的所有内容。如果传递参数false,它将不打印交易队列中的内容并将其保存以供下次提交。默认值为true。有关详情,请参阅Sunmi文档。 Sunmi v2 pro, Sunmi v2 Pro (label version)

示例代码 - 用于交易打印

// 进入交易模式
await SunmiPrinter.startTransactionPrint();
// 设置任何所需的对齐方式
await SunmiPrinter.setAlignment(PrintAlign.CENTER);
await SunmiPrinter.printImage(img); // 注意:img变量必须先转换为Uint8List格式
await SunmiPrinter.printText('hello sunmi');
await SunmiPrinter.lineWrap(2);
await SunmiPrinter.printText('test');
await SunmiPrinter.setAlignment(PrintAlign.RIGHT);
await SunmiPrinter.printText('printer');
await SunmiPrinter.lineWrap(1);
await SunmiPrinter.setAlignment(PrintAlign.LEFT);
await SunmiPrinter.printText('end');
// 可以在此处添加其他打印相关的方法...
// 最后添加提交打印
await SunmiPrinter.submitTransactionPrint(); // 提交并开始打印,您可以保持提交以循环
// 记得在完成后退出交易模式。
await SunmiPrinter.exitTransactionPrint();

标签打印功能列表

注意事项:

  • 使用标签打印功能前,请确保已打开设置->内置打印->打印模式选择并选择标签热敏模式。您的选择将被记录并使设备变为标签打印机时打印标签。请参阅Sunmi文档。
  • 如果是第一次使用或更换了不同类型的标签纸,请打开设置->内置打印->标签学习并点击学习标签纸按钮。请参阅Sunmi文档。
Method Function Type (Future) Description Support Devices
startLabelPrint() void 开始标签打印 Sunmi v2 Pro (label version)
exitLabelPrint() void 退出标签打印。如果您在同一时间打印多个标签,请只在列表中最后一个项/索引处运行此函数。Refer to this example Sunmi v2 pro, Sunmi v2 Pro (label version)

示例代码 - 用于标签打印

// 进入标签模式
await SunmiPrinter.startLabelPrint();
// 设置任何所需的对齐方式
await SunmiPrinter.setAlignment(PrintAlign.CENTER);
await SunmiPrinter.printImage(img); // 注意:img变量必须先转换为Uint8List格式
// 记得在完成后退出标签模式。
await SunmiPrinter.exitLabelPrint();

示例代码 - 用于标签打印(多于一个)

// 获取最后一个索引
int lastIndex = imgURLList.length - 1;

await Future.forEach(imgURLList, (String url) async {
  // 进入标签模式
  await SunmiPrinter.startLabelPrint();

  // 开始标签内容
  int index = imgURLList.indexOf(url);
  // 示例图片来自互联网
  String url = 'https://pngimg.com/uploads/nike/small/nike_PNG18.png';
  // 转换图像为Uint8List格式
  Uint8List byte = (await NetworkAssetBundle(Uri.parse(url)).load(url)).buffer.asUint8List();

  await SunmiPrinter.printImage(byte);
  // 结束标签内容

  // 检查是否为最后一个项目
  if (index == lastIndex) {
    // 只有在打印最后一个标签时才运行此函数
    await SunmiPrinter.exitLabelPrint();
  }
});

枚举列表

  • PrinterStatus

    enum PrinterStatus {
      ERROR,
      NORMAL,
      ABNORMAL_COMMUNICATION,
      OUT_OF_PAPER,
      PREPARING,
      OVERHEATED,
      OPEN_THE_LID,
      PAPER_CUTTER_ABNORMAL,
      PAPER_CUTTER_RECOVERED,
      NO_BLACK_MARK,
      NO_PRINTER_DETECTED,
      FAILED_TO_UPGRADE_FIRMWARE,
      EXCEPTION
    }
    
  • PrinterVerboseStatus

    {
      'ERROR': 'Something went wrong.',
      'NORMAL': 'Works normally',
      'ABNORMAL_COMMUNICATION': 'Abnormal communication',
      'OUT_OF_PAPER': 'Out of paper',
      'PREPARING': 'Preparing printer',
      'OVERHEATED': 'Overheated',
      'OPEN_the_lid': 'Open the lid',
      'PAPER_CUTTER_ABNORMAL': 'The paper cutter is abnormal',
      'PAPER_CUTTER_RECOVERED': 'The paper cutter has been recovered',
      'NO_BLACK_MARK': 'No black mark had been detected',
      'NO_PRINTER_DETECTED': 'No printer had been detected',
      'FAILED_TO_UPGRADE_FIRMWARE': 'Failed to upgrade firmware',
      'EXCEPTION': 'Unknown Error code',
    }
    
  • PrinterMode

    enum PrinterMode {
      NORMAL_MODE,
      BLACK_LABEL_MODE,
      LABEL_MODE
    }
    

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

1 回复

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


当然,以下是一个关于如何在Flutter项目中使用sunmi_printer插件来控制Sunmi打印机的示例代码。这个插件允许你通过Flutter应用直接与Sunmi的内置打印机进行交互。

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

dependencies:
  flutter:
    sdk: flutter
  sunmi_printer: ^最新版本号 # 请替换为实际的最新版本号

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

接下来,在你的Flutter项目中,你可以按照以下方式使用sunmi_printer插件:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Sunmi Printer Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Sunmi Printer Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              onPressed: _printText,
              child: Text('Print Text'),
            ),
            ElevatedButton(
              onPressed: _printBarcode,
              child: Text('Print Barcode'),
            ),
          ],
        ),
      ),
    );
  }

  Future<void> _printText() async {
    try {
      // 初始化打印机
      await SunmiPrinter.initPrinter();
      
      // 设置打印内容
      String textToPrint = "Hello, Sunmi Printer!";
      
      // 打印文本
      await SunmiPrinter.printText(textToPrint);
      
      ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text('Text printed successfully')));
    } catch (e) {
      print("Error printing text: $e");
      ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text('Failed to print text')));
    }
  }

  Future<void> _printBarcode() async {
    try {
      // 初始化打印机
      await SunmiPrinter.initPrinter();
      
      // 设置条码内容
      String barcodeData = "123456789012";
      
      // 打印条码
      await SunmiPrinter.printBarcode(barcodeData, width: 3, height: 100, barcodeType: BarcodeType.CODE128);
      
      ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text('Barcode printed successfully')));
    } catch (e) {
      print("Error printing barcode: $e");
      ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text('Failed to print barcode')));
    }
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,其中包含两个按钮:一个用于打印文本,另一个用于打印条码。_printText函数用于打印简单的文本,而_printBarcode函数则用于打印条码。

注意:

  • SunmiPrinter.initPrinter()用于初始化打印机。
  • SunmiPrinter.printText(String text)用于打印文本。
  • SunmiPrinter.printBarcode(String data, {double width, double height, BarcodeType type})用于打印条码,其中widthheight是条码的宽度和高度,type是条码的类型(如CODE128)。

请确保你的设备是Sunmi设备,并且已经正确连接了打印机,否则这些功能可能无法正常工作。此外,根据sunmi_printer插件的文档,可能会有更多的功能和参数可供选择,建议查阅最新的官方文档以获取更多信息。

回到顶部