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

Flutter通过wifip2p连接打印机后如何发送URL/Assets的PDF数据打印

Flutter WiFi P2P连接打印机后打印PDF的实现步骤

1 前置操作:确认连接状态并获取打印机IP

连接打印机成功后,先通过WiFi P2P插件的状态监听和信息查询接口,拿到打印机的局域网IP:

// 监听WiFi P2P连接状态
WifiP2P.connectionChangeEvent.listen((isConnected) async {
  if (isConnected) {
    // 连接成功后获取已连接设备的信息,实际字段名以你使用的wifip2p插件定义为准
    final connectedDevice = await WifiP2P.getConnectedPeerInfo();
    final printerIp = connectedDevice.ip; // 部分插件字段名为groupOwnerAddress
    // 拿到IP后即可执行打印逻辑
    _startPrintTask(printerIp);
  }
});

2 加载PDF为字节流

根据你的PDF来源,选择对应方式读取PDF为Uint8List格式:

2.1 读取Assets目录内的PDF

import 'package:flutter/services.dart';

Future<Uint8List> loadPdfFromAssets(String assetPath) async {
  final byteData = await rootBundle.load(assetPath);
  return byteData.buffer.asUint8List();
}

2.2 读取网络URL的PDF

import 'package:http/http.dart' as http;

Future<Uint8List> loadPdfFromUrl(String pdfUrl) async {
  final response = await http.get(Uri.parse(pdfUrl));
  if (response.statusCode == 200) {
    return response.bodyBytes;
  }
  throw Exception('PDF文件下载失败');
}

3 发送PDF数据到打印机

绝大多数支持WiFi直连的打印机默认开放9100端口用于RAW打印,可直接通过Socket将PDF字节发送到该端口完成打印:

import 'dart:io';

Future<void> sendPdfToPrinter(Uint8List pdfBytes, String printerIp, {int port = 9100}) async {
  Socket? socket;
  try {
    // 建立Socket连接,超时时间可根据实际情况调整
    socket = await Socket.connect(printerIp, port, timeout: const Duration(seconds: 15));
    // 写入PDF字节流
    socket.add(pdfBytes);
    // 等待数据全部发送完成
    await socket.flush();
    print('打印任务已发送至打印机');
  } catch (e) {
    print('打印失败:$e');
  } finally {
    // 关闭Socket连接
    await socket?.close();
  }
}

最后在_startPrintTask方法中拼接逻辑即可:

Future<void> _startPrintTask(String printerIp) async {
  // 加载PDF,二选一即可
  final pdfBytes = await loadPdfFromAssets('assets/demo.pdf');
  // final pdfBytes = await loadPdfFromUrl('https://xxx.com/demo.pdf');
  
  // 发送打印
  await sendPdfToPrinter(pdfBytes, printerIp);
}

兼容方案

如果打印机打印乱码或无反应,说明该型号不支持直接解析PDF,可先通过pdf_render库将PDF逐页渲染为位图,再根据打印机支持的指令协议(常见为ESC/POS、PCL)将位图转换为对应打印指令流后发送即可。


内容的提问来源于stack exchange,提问作者Jungwon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:36:04