如何在Flutter/Dart中使用Zebra ZQ320打印机打印文件
实现Flutter应用打印PDF到Zebra ZQ320的步骤
1. 确认打印机连接方式
Zebra ZQ320支持蓝牙、Wi-Fi、USB三种连接方式,先根据你的使用场景完成设备配对/连接:
- 蓝牙:确保移动设备已和打印机完成蓝牙配对
- Wi-Fi:确认打印机与设备在同一局域网,记录打印机IP地址
- USB:通过OTG线将移动设备与打印机物理连接
2. 选择适配的Flutter插件
针对Zebra打印机的特性,优先选择支持ZPL指令或Link-OS SDK的插件:
zebra_link_os:封装Zebra官方Link-OS SDK,支持直接打印图片、文档esc_pos_printer:虽主打ESC/POS协议,但兼容ZPL模式,适合简单打印需求- 若需自定义控制,可使用
flutter_blue(蓝牙)、socket_io_client(网络)这类基础通信插件直接发送ZPL指令
3. 转换PDF为打印机兼容格式
Zebra热敏打印机对PDF直接支持有限,需先将PDF每页渲染为图片:
使用pdf_render插件完成PDF转图片,示例代码:
import 'package:pdf_render/pdf_render.dart'; import 'dart:typed_data'; Future<List<Uint8List>> convertPdfToImages(String pdfFilePath) async { final pdfDoc = await PdfRenderDocument.openFile(pdfFilePath); final imageList = <Uint8List>[]; for (int pageNum = 1; pageNum <= pdfDoc.pageCount; pageNum++) { final page = await pdfDoc.getPage(pageNum); final renderedImage = await page.render( width: 300, // 匹配ZQ320的300dpi打印宽度 height: page.height * (300 / page.width), format: PdfImageFormat.png, ); imageList.add(renderedImage!.bytes); await page.close(); } await pdfDoc.close(); return imageList; }
4. 连接打印机并执行打印
方式一:使用Zebra Link-OS插件
- 初始化连接:
import 'package:zebra_link_os/zebra_link_os.dart'; final zebraPrinter = ZebraLinkOS(); // 蓝牙连接 await zebraPrinter.connectBluetooth('打印机蓝牙名称'); // Wi-Fi连接 await zebraPrinter.connectWifi('打印机IP地址');
- 发送图片打印:
final pdfImages = await convertPdfToImages('你的PDF文件路径'); for (final imgBytes in pdfImages) { await zebraPrinter.printImage(imgBytes); }
方式二:直接发送ZPL指令
如果需要更精细的打印控制,可将图片转为ZPL指令后发送:
- 用
image_to_zpl插件转图片为ZPL代码:
import 'package:image_to_zpl/image_to_zpl.dart'; final zplCode = await ImageToZPL.imageToZPL( imageBytes: imgBytes, width: 300, );
- 通过通信渠道发送指令:
// 蓝牙发送(基于flutter_blue) final targetDevice = // 获取已配对的蓝牙设备实例 final services = await targetDevice.discoverServices(); final printCharacteristic = // 找到打印机的通信特征值 await printCharacteristic.write(utf8.encode(zplCode)); // Wi-Fi发送(基于Socket) final socket = await Socket.connect('打印机IP', 9100); // Zebra默认打印端口9100 socket.write(zplCode); await socket.close();
5. 测试与验证
- 确保打印机处于就绪状态(有纸、电量充足)
- 可先发送测试ZPL指令验证连接有效性:
const testZpl = '^XA^FO50,50^A0N,50,50^FD测试打印连接^FS^XZ'; // 通过上述方式发送该指令,若正常打印则连接无误
内容的提问来源于stack exchange,提问作者Abdullah
相关产品推荐
相关产品推荐

