Flutter热敏打印机控制插件esc_pos_printer_th的使用
Flutter热敏打印机控制插件esc_pos_printer_th的使用
该库允许使用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/网络打印机 或 蓝牙打印机
- 测试并报告错误
- 分享你对改进的看法(代码优化、新功能等)
- PRs欢迎!
已测试的打印机
以下是一些使用此库测试过的打印机。请添加你测试过的模型以维护和改进此库,并帮助他人选择合适的打印机。
生成收据
简单带样式的收据
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);
printer.text('Text size 200%',
styles: PosStyles(
height: PosTextSize.size2,
width: PosTextSize.size2,
));
printer.feed(2);
printer.cut();
}
你可以在这里找到更多例子。
打印收据
import 'package:esc_pos_printer_th/esc_pos_printer_th.dart';
const PaperSize paper = PaperSize.mm80;
final profile = 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}');
完整的示例请查看example/example.dart
和 example/discover_printers
。
测试打印
import 'package:esc_pos_printer_th/esc_pos_printer_th.dart';
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const HoweScreen(),
);
}
}
class HoweScreen extends StatefulWidget {
const HoweScreen({super.key});
[@override](/user/override)
State<HoweScreen> createState() => _MyWidgetState();
}
class _MyWidgetState extends State<HoweScreen> {
late NetworkPrinter printer;
[@override](/user/override)
Widget build(BuildContext context) {
return const Placeholder();
}
}
更多关于Flutter热敏打印机控制插件esc_pos_printer_th的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter热敏打印机控制插件esc_pos_printer_th的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
esc_pos_printer_th
是一个用于 Flutter 的热敏打印机控制插件,主要用于通过蓝牙或网络连接控制 ESC/POS 兼容的热敏打印机。它支持文本、图像、条形码、二维码等多种打印功能。
1. 安装插件
首先,你需要在 pubspec.yaml
文件中添加 esc_pos_printer_th
插件的依赖:
dependencies:
esc_pos_printer_th: ^1.0.0 # 请检查最新版本
然后运行 flutter pub get
来安装插件。
2. 引入插件
在 Dart 文件中引入插件:
import 'package:esc_pos_printer_th/esc_pos_printer_th.dart';
import 'package:esc_pos_utils/esc_pos_utils.dart';
3. 初始化打印机
在使用插件之前,你需要初始化打印机并连接到设备。以下是一个简单的示例,展示如何通过蓝牙连接打印机:
final PrinterBluetoothManager printerManager = PrinterBluetoothManager();
void connectToPrinter() async {
// 搜索蓝牙设备
List<BluetoothDevice> devices = await printerManager.discover();
// 选择第一个设备进行连接
if (devices.isNotEmpty) {
await printerManager.selectDevice(devices[0]);
// 检查连接状态
bool connected = await printerManager.isConnected();
if (connected) {
print('打印机连接成功');
} else {
print('打印机连接失败');
}
}
}
4. 打印内容
连接成功后,你可以开始打印内容。以下是一个简单的打印示例:
void printReceipt() async {
// 创建打印纸
final PaperSize paper = PaperSize.mm58;
final profile = await CapabilityProfile.load();
final generator = Generator(paper, profile);
// 生成打印内容
List<int> bytes = [];
bytes += generator.text('Hello, World!');
bytes += generator.text('欢迎使用热敏打印机');
bytes += generator.feed(2);
bytes += generator.cut();
// 发送打印指令
await printerManager.writeBytes(bytes);
}
5. 断开连接
打印完成后,你可以断开与打印机的连接:
void disconnectPrinter() async {
await printerManager.disconnect();
}
6. 处理错误
在实际使用中,可能会遇到各种错误,如连接失败、打印失败等。你可以通过 try-catch
来捕获并处理这些错误:
void printReceipt() async {
try {
final PaperSize paper = PaperSize.mm58;
final profile = await CapabilityProfile.load();
final generator = Generator(paper, profile);
List<int> bytes = [];
bytes += generator.text('Hello, World!');
bytes += generator.text('欢迎使用热敏打印机');
bytes += generator.feed(2);
bytes += generator.cut();
await printerManager.writeBytes(bytes);
} catch (e) {
print('打印失败: $e');
}
}