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

Flutter中使用esc_pos_printer v4.1.0打印马拉地语文本报错求解决方案

Flutter打印马拉地语文本的解决办法

你遇到的错误是因为默认热敏打印库仅支持ASCII或有限字符集,马拉地语属于Devanagari复杂脚本,无法被直接识别。以下是几种可行的解决方法:

方法一:切换打印机字符编码(需打印机支持)

部分热敏打印机支持Devanagari字符集,可通过切换代码页实现文本打印:

  1. 查阅打印机手册,确认支持的Devanagari代码页编号(常见为163)
  2. 在生成文本前发送代码页切换指令:
Future<void> printMarathiText() async {
  final profile = await CapabilityProfile.load();
  final printer = NetworkPrinter(PaperSize.mm80, profile);
  List<int> bytes = [];
  final generator = Generator(PaperSize.mm80, profile);
  await connectToPrinter();

  // 切换到Devanagari支持的代码页
  bytes += generator.setCodePage(163); 
  bytes += generator.text('मराठी मध्ये टेक्स्ट प्रिंट करणारा प्रिंटर',
      styles: const PosStyles(
        align: PosAlign.center,
        height: PosTextSize.size1,
        width: PosTextSize.size1,
      ),
      linesAfter: 1);

  printer.send(bytes); // 原代码缺失的关键步骤:发送打印指令
  printer.cut();
  printer.disconnect();
}

方法二:将文本转为图片打印(兼容性最优)

复杂脚本语言用图片打印是最可靠的方案,步骤如下:

  1. 添加支持马拉地语的字体(如Noto Sans Devanagari)到项目的fonts目录,并在pubspec.yaml中配置
  2. 使用文本转图片库生成图片,再打印图片:
import 'package:flutter_image_from_text/flutter_image_from_text.dart';
import 'package:flutter/material.dart';

Future<void> printMarathiText() async {
  final profile = await CapabilityProfile.load();
  final printer = NetworkPrinter(PaperSize.mm80, profile);
  List<int> bytes = [];
  final generator = Generator(PaperSize.mm80, profile);
  await connectToPrinter();

  // 将马拉地语文本转为适配80mm纸宽的图片
  final image = await generateImageFromText(
    text: 'मराठी मध्ये टेक्स्ट प्रिंट करणारा प्रिंटर',
    textStyle: TextStyle(
      fontSize: 16,
      fontFamily: 'NotoSansDevanagari', // 对应pubspec中配置的字体名称
      color: Colors.black,
    ),
    backgroundColor: Colors.white,
    width: 280, // 80mm纸宽约对应280像素
  );

  // 打印图片
  bytes += generator.image(image, align: PosAlign.center);
  bytes += generator.lines(1);

  printer.send(bytes);
  printer.cut();
  printer.disconnect();
}

注意:原代码未调用printer.send(bytes)发送打印数据,这是必须补充的步骤。

方法三:使用支持UTF-8的打印库

如果使用的是esc_pos_printer系列库,可升级到支持UTF-8的版本(如esc_pos_printer_plus),并启用UTF-8模式:

final generator = Generator(PaperSize.mm80, profile, useUtf8: true);
bytes += generator.text('मराठी मध्ये टेक्स्ट प्रिंट करणारा प्रिंटर', ...);

此方法需要打印机本身支持UTF-8打印,否则会出现乱码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 23:25:30