You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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. 连接打印机并执行打印

  1. 初始化连接:
import 'package:zebra_link_os/zebra_link_os.dart';

final zebraPrinter = ZebraLinkOS();

// 蓝牙连接
await zebraPrinter.connectBluetooth('打印机蓝牙名称');
// Wi-Fi连接
await zebraPrinter.connectWifi('打印机IP地址');
  1. 发送图片打印:
final pdfImages = await convertPdfToImages('你的PDF文件路径');
for (final imgBytes in pdfImages) {
  await zebraPrinter.printImage(imgBytes);
}

方式二:直接发送ZPL指令

如果需要更精细的打印控制,可将图片转为ZPL指令后发送:

  1. 用image_to_zpl插件转图片为ZPL代码:
import 'package:image_to_zpl/image_to_zpl.dart';

final zplCode = await ImageToZPL.imageToZPL(
  imageBytes: imgBytes,
  width: 300,
);
  1. 通过通信渠道发送指令:
// 蓝牙发送(基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 11:07:16