Flutter打印机控制插件esc_pos_utils_updated的使用
Flutter打印机控制插件esc_pos_utils_updated的使用
标题
esc_pos_utils
内容
Base Flutter/Dart classes for ESC/POS printing. Generator
class generates ESC/POS commands that can be sent to a thermal printer.
This is the “base” library that useded for:
- Flutter WiFi/Ethernet printing: esc_pos_printer
- Flutter Bluetooth printing: esc_pos_bluetooth
主要功能
- 连接到Wi-Fi / Ethernet打印机
- 使用
text
方法简单文本打印 - 使用
row
方法打印表格 - 文本样式:
- 大小,对齐方式,粗体,反向,下划线,不同字体,旋转90°
- 打印图像
- 打印条形码
- UPC-A, UPC-E, JAN13 (EAN13), JAN8 (EAN8), CODE39, ITF (Interleaved 2of 5), CODABAR (NW-7), CODE128
- 纸张裁剪(部分、全)
- 发出蜂鸣声(不同持续时间)
- 纸张进纸,反转进纸
Note: 您的打印机可能不支持上述所有功能(某些样式、部分/全纸张裁剪、反转进纸、条形码…)。
生成一张票
简单带有样式的票
List<int> testTicket() {
final List<int> bytes = [];
// 使用默认配置
final profile = await CapabilityProfile.load();
final generator = Generator(PaperSize.mm80, profile);
List<int> bytes = [];
bytes += generator.text(
'Regular: aA bB cC dD eD 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: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, imageFn: PosImageFn.graphics);
打印条形码
final List<int> barData = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 4];
generator.barcode(Barcode.upcA(barData));
打印二维码
String qrData = "example.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);
}
使用代码表
不同的打印机支持不同的代码表。 如果您想更改默认代码表,选择正确的配置文件很重要:
// 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();
如何帮助
- 添加一个配置文件以支持您的打印机型号。
- 测试您的打印机并添加到表中:[WiFi/网络打印机]((https://github.com/andrey-ushakov/esc_pos_printer/blob/master/printers.md) 或 Bluetooth打印机
- 测试和报告错误
- 分享关于改进的想法(代码优化,新功能等)
示例代码
更多关于Flutter打印机控制插件esc_pos_utils_updated的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter打印机控制插件esc_pos_utils_updated的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用esc_pos_utils_updated
插件来控制ESC/POS打印机的示例代码。esc_pos_utils_updated
插件允许你通过蓝牙、USB、网络等接口发送ESC/POS命令来控制打印机。
1. 添加依赖
首先,在你的pubspec.yaml
文件中添加esc_pos_utils_updated
依赖:
dependencies:
flutter:
sdk: flutter
esc_pos_utils_updated: ^x.y.z # 请替换为最新版本号
然后运行flutter pub get
来获取依赖。
2. 导入插件
在你的Dart文件中导入插件:
import 'package:esc_pos_utils_updated/esc_pos_utils_updated.dart';
import 'package:esc_pos_bluetooth/esc_pos_bluetooth.dart'; // 如果你使用蓝牙连接
import 'package:esc_pos_printer/esc_pos_printer.dart'; // 通用接口
3. 初始化打印机
这里以蓝牙打印机为例。首先,你需要扫描并连接到蓝牙打印机:
EscPosBluetooth bluetooth = EscPosBluetooth();
EscPosPrinter printer = EscPosPrinter();
// 扫描蓝牙设备
Future<void> scanDevices() async {
List<EscPosBluetoothDevice> devices = await bluetooth.scanDevices();
print("Found devices: $devices");
// 你可以让用户选择一个设备并进行连接
}
// 连接到蓝牙打印机
Future<void> connectToPrinter(EscPosBluetoothDevice device) async {
bool isConnected = await bluetooth.connect(device.address);
if (isConnected) {
printer.bluetoothAdapter = bluetooth;
printer.open();
print("Connected to printer");
} else {
print("Failed to connect to printer");
}
}
4. 发送打印命令
一旦连接成功,你可以发送ESC/POS命令来打印内容:
Future<void> printReceipt() async {
if (printer.isConnected()) {
await printer.text('Hello, ESC/POS!\n');
await printer.text('This is a receipt.\n');
await printer.cut();
printer.close();
} else {
print("Printer is not connected");
}
}
5. 完整示例
以下是一个完整的示例,包括扫描、连接和打印:
import 'package:flutter/material.dart';
import 'package:esc_pos_utils_updated/esc_pos_utils_updated.dart';
import 'package:esc_pos_bluetooth/esc_pos_bluetooth.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
EscPosBluetooth bluetooth = EscPosBluetooth();
EscPosPrinter printer = EscPosPrinter();
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('ESC/POS Printer Control'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: scanDevices,
child: Text('Scan Devices'),
),
// 假设你已经选择了一个设备并存储在某个变量中
// EscPosBluetoothDevice selectedDevice;
// ElevatedButton(
// onPressed: () async => await connectToPrinter(selectedDevice),
// child: Text('Connect to Printer'),
// ),
ElevatedButton(
onPressed: printReceipt,
child: Text('Print Receipt'),
),
],
),
),
),
);
}
Future<void> scanDevices() async {
List<EscPosBluetoothDevice> devices = await bluetooth.scanDevices();
print("Found devices: $devices");
// 显示设备列表让用户选择,这里省略
}
// connectToPrinter 方法同上
Future<void> printReceipt() async {
if (printer.isConnected()) {
await printer.text('Hello, ESC/POS!\n');
await printer.text('This is a receipt.\n');
await printer.cut();
printer.close();
} else {
print("Printer is not connected");
// 显示提示信息给用户,这里省略
}
}
}
注意:这个示例省略了用户选择蓝牙设备的界面部分,你需要根据实际需求实现设备选择逻辑。
希望这个示例能帮助你更好地理解如何在Flutter项目中使用esc_pos_utils_updated
插件来控制ESC/POS打印机。