如何使用Flutter esc_pos_printer库在热敏打印机上打印阿拉伯字母?

4

我正在使用打印机:EPSON TM-m30

目前我正在使用:

esc_pos_printer: ^4.0.3
esc_pos_utils: ^1.0.0

当我运行这段代码时
printDemoReceipt(NetworkPrinter printer) async {
    printer.text('ا ب ت ث ج ح خ د ذ ر ز س ش ص ض ف ق ك ل م ن ه و ي');
    printer.feed(2);
    printer.cut();
    printer.disconnect();
}

它导致了这个错误。

[ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: Invalid argument (string): Contains invalid characters.: "ا ب ت ث ج ح خ د ذ ر ز س ش ص ض ف ق ك ل م ن ه و ي"
_UnicodeSubsetEncoder.convert  (dart:convert/ascii.dart:88:9)

有人修复了这个问题吗?

谢谢。


我尝试使用 'CP720'、'ISO_8859-6'、'CP850',来自这里 https://github.com/andrey-ushakov/esc_pos_utils/blob/master/lib/resources/capabilities.json,但它打印出了非阿拉伯字符。 - xSuperMu
3个回答

2

实际上,我有同样的问题,我认为现在唯一的解决办法是创建一个PDF文件,然后将其转换为图像,然后你就可以打印它了。


1
尝试进行以下操作:
import 'dart:convert' show utf8;

printDemoReceipt(NetworkPrinter printer) async {

    final arabicText = utf8.encode('ا ب ت ث ج ح خ د ذ ر ز س ش ص ض ف ق ك ل م ن ه و ي');

    printer.textEncoded(arabicText);
    printer.feed(2);
    printer.cut();
    printer.disconnect();
}

1
请简要解释代码的作用。 - frankenapps

0

你需要找到打印机的字符表,并编写相应的命令,让打印机知道你正在打印多字节字符,例如阿拉伯字符。在我的情况下,我使用的是商米打印机,唯一有效的方法是找到它的字符表并编写命令,这样就可以很好地工作了。以下是文档中所说的内容的图片。 enter image description here

这就是我所做的,它完美地工作了。

const utf8Encoder = Utf8Encoder();
final encodedStr = utf8Encoder.convert(invoice.description);
bytes += generator.textEncoded(Uint8List.fromList([
  ...[0x1C, 0x26, 0x1C, 0x43, 0xFF],
  ...encodedStr
]));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接