Flutter热敏打印机控制插件yjy_esc_pos_utils的使用
Flutter热敏打印机控制插件yjy_esc_pos_utils的使用
插件简介
yjy_esc_pos_utils 是一个用于生成 ESC/POS 命令的 Flutter/Dart 库。这些命令可以发送到热敏打印机以实现打印功能。
此库是以下两个打印库的基础:
- esc_pos_printer:支持通过 Wi-Fi 或以太网连接的打印机。
- esc_pos_bluetooth:支持通过蓝牙连接的打印机。
主要特性
- 支持 Wi-Fi 和以太网打印机的连接。
- 简单的文本打印功能。
- 表格打印功能。
- 文本样式设置(大小、对齐方式、加粗、反转、下划线等)。
- 图片打印。
- 条形码打印(支持多种条形码类型)。
- 支持纸张切割(部分切割、完全切割)。
- 支持蜂鸣器操作。
- 支持纸张进纸和反向进纸。
注意:您的打印机可能不支持所有上述功能。
示例代码
以下是一个完整的示例,展示如何使用 yjy_esc_pos_utils
插件来生成并打印一张简单的票据。
import 'package:image/image.dart';
import 'dart:typed_data';
import 'package:flutter/services.dart';
import 'package:yjy_esc_pos_utils/esc_pos_utils.dart';
Future<void> main() 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.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)),
]);
// 打印图片
final ByteData data = await rootBundle.load('assets/logo.png');
final Uint8List imgBytes = data.buffer.asUint8List();
final Image image = decodeImage(imgBytes)!;
bytes += generator.image(image);
// 打印条形码
final List<int> barData = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 4];
bytes += generator.barcode(Barcode.upcA(barData));
// 打印 QR Code
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());
bytes += generator.image(img!);
} catch (e) {
print(e);
}
// 打印换行并切割纸张
bytes += generator.feed(2);
bytes += generator.cut();
// 输出生成的 ESC/POS 命令
print(bytes);
}
代码详解
1. 初始化打印机配置
final profile = await CapabilityProfile.load();
final generator = Generator(PaperSize.mm80, profile);
CapabilityProfile.load()
:加载打印机配置文件。Generator
:创建生成器对象,指定纸张大小和配置文件。
2. 打印普通文本
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');
- 使用
generator.text
方法打印普通文本。
3. 设置文本样式
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);
PosStyles
:用于设置文本样式(加粗、反转、下划线等)。
4. 打印表格行
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)),
]);
- 使用
generator.row
方法打印表格行。 PosColumn
:定义列的宽度、文本内容和样式。
5. 打印图片
final ByteData data = await rootBundle.load('assets/logo.png');
final Uint8List imgBytes = data.buffer.asUint8List();
final Image image = decodeImage(imgBytes)!;
bytes += generator.image(image);
- 使用
generator.image
方法打印图片。
6. 打印条形码
final List<int> barData = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 4];
bytes += generator.barcode(Barcode.upcA(barData));
- 使用
generator.barcode
方法打印条形码。
7. 打印 QR Code
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());
bytes += generator.image(img!);
- 使用
QrPainter
生成 QR Code 图像,并将其转换为图片后打印。
8. 打印换行和切割纸张
bytes += generator.feed(2);
bytes += generator.cut();
更多关于Flutter热敏打印机控制插件yjy_esc_pos_utils的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复
更多关于Flutter热敏打印机控制插件yjy_esc_pos_utils的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
yjy_esc_pos_utils
是一个用于 Flutter 的热敏打印机控制插件,它允许你通过 ESC/POS 命令控制热敏打印机。这个插件支持多种打印机品牌和型号,并且可以生成 ESC/POS 命令来打印文本、图像、条形码等。
安装
首先,你需要在 pubspec.yaml
文件中添加 yjy_esc_pos_utils
依赖:
dependencies:
flutter:
sdk: flutter
yjy_esc_pos_utils: ^1.0.0
然后运行 flutter pub get
来安装依赖。
基本用法
1. 导入库
import 'package:yjy_esc_pos_utils/yjy_esc_pos_utils.dart';
2. 创建 Printer 对象
final Printer printer = Printer();
3. 生成 ESC/POS 命令
你可以使用 Printer
对象生成各种 ESC/POS 命令,例如打印文本、图像、条形码等。
final List<int> bytes = [];
// 初始化打印机
bytes += printer.reset();
// 设置对齐方式
bytes += printer.textAlign(TextAlign.center);
// 打印文本
bytes += printer.text('Hello, World!');
// 打印条形码
bytes += printer.barcode(Barcode.upcA('123456789012'));
// 打印图像
final ByteData data = await rootBundle.load('assets/logo.png');
final Uint8List imageBytes = data.buffer.asUint8List();
bytes += printer.image(imageBytes);
// 切纸
bytes += printer.cut();
4. 发送 ESC/POS 命令到打印机
你需要使用蓝牙或网络连接将生成的 ESC/POS 命令发送到打印机。这里假设你使用的是蓝牙连接:
import 'package:flutter_blue/flutter_blue.dart';
final FlutterBlue flutterBlue = FlutterBlue.instance;
void sendToPrinter(List<int> bytes) async {
// 搜索蓝牙设备
flutterBlue.startScan(timeout: Duration(seconds: 4));
// 监听扫描结果
flutterBlue.scanResults.listen((results) {
for (ScanResult result in results) {
if (result.device.name == 'Your Printer Name') {
// 停止扫描
flutterBlue.stopScan();
// 连接设备
result.device.connect().then((_) {
// 找到服务
result.device.discoverServices().then((services) {
for (BluetoothService service in services) {
if (service.uuid.toString() == '00001800-0000-1000-8000-00805f9b34fb') {
for (BluetoothCharacteristic characteristic in service.characteristics) {
if (characteristic.uuid.toString() == '00002a00-0000-1000-8000-00805f9b34fb') {
// 发送数据到打印机
characteristic.write(bytes);
}
}
}
}
});
});
}
}
});
}