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,提问作者علي المرجاني
相关产品推荐
相关产品推荐

