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

Flutter使用esc_pos_utils_plus库打印图片失败求助

解决方案

首先确认你的pubspec.yaml依赖和资源配置正确:

dependencies:
  flutter:
    sdk: flutter
  esc_pos_utils_plus: ^1.1.0
  image: ^4.0.17

flutter:
  assets:
    - image/new.png

然后替换你的打印代码为以下实现,解决图片打印失败的问题:

import 'package:flutter/services.dart';
import 'package:esc_pos_utils_plus/esc_pos_utils_plus.dart';
import 'package:image/image.dart' as img;

Future<void> printCountImage(Printer printer) async {
  // 初始化打印生成器,匹配你的打印机纸张尺寸(mm58对应58mm小票机,mm80对应80mm)
  final generator = Generator(PaperSize.mm58, await CapabilityProfile.load());
  List<int> printBytes = [];

  try {
    // 加载本地图片
    final ByteData byteData = await rootBundle.load('image/new.png');
    final Uint8List imgRawBytes = byteData.buffer.asUint8List();
    
    // 解码图片,处理解码失败的情况
    final img.Image? originalImg = img.decodeImage(imgRawBytes);
    if (originalImg == null) {
      print('图片解码失败,请检查图片格式或路径');
      return;
    }

    // 按打印机宽度等比例缩放图片,避免变形或超出打印范围
    final int maxPrintWidth = generator.maxCharsPerLine * 8; // 58mm打印机对应384像素宽度
    final img.Image resizedImg = img.copyResize(
      originalImg,
      width: maxPrintWidth,
      height: (originalImg.height * maxPrintWidth / originalImg.width).round(),
    );

    // 生成图片打印指令
    printBytes += generator.image(resizedImg);
    // 添加换行和切纸指令(根据需求调整)
    printBytes += generator.newLine();
    printBytes += generator.cut();

    // 发送打印指令到打印机
    await printer.send(printBytes);
  } catch (e) {
    print('打印出错: $e');
  }
}

关键修复点:

  • 明确指定打印机纸张尺寸,确保生成的图片指令适配打印机宽度
  • 增加图片解码失败的判断,避免空指针崩溃
  • 按打印机宽度等比例缩放图片,防止图片超出打印区域
  • 使用printer.send()发送完整打印指令(部分场景下add()仅累加指令,不触发打印)
  • 确保图片格式为PNG/JPG(image库对WebP等格式支持有限)

内容的提问来源于stack exchange,提问作者علي المرجاني

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 04:12:49