如何将Unicode(Bangla字体)打印到热敏打印机?

时间:2017-11-12 12:52:23

标签: java android printing thermal-printer

我想打印Bangla文字赞"আপনিকিডাটাসংরক্ষনষনরতেতোন"从我的Android应用程序。但我每次都得到错误的结果。这是我的输出:

enter image description here

我的代码就在这里:

   String memo = "আপনি কি ডাটা সংরক্ষন করতে চান" + "\n" +
            "\n" +
            "\n" +
            "\n" +
            "\n" +
            "\n";

    byte[] buffer = memo.getBytes(Charset.forName("UTF-8"));


    try {
        Toast.makeText(getApplicationContext(), "Starting...", Toast.LENGTH_LONG).show();

        Thread.sleep(1000);
        byte[] printformat = {27, 33, 01};
        mmOutputStream.write(printformat);
        mmOutputStream.write(buffer);
        mmOutputStream.write(0x0B);
        mmOutputStream.write(0x0B);
        mmOutputStream.write(0x0B);
        mmOutputStream.flush();

        mmOutputStream.close();
        mmSocket.close();
        Toast.makeText(getApplicationContext(), "Completed", Toast.LENGTH_LONG).show();
        mmOutputStream.close();
        mmSocket.close();
    } catch (Exception ex) {
        Toast.makeText(getApplicationContext(),
                "Excep IntentPrint", Toast.LENGTH_SHORT).show();
  }

4 个答案:

答案 0 :(得分:2)

首先请检查打印机是否支持bangla字体。如果没有,那么你可以打印另一种方式。你需要捕获具有孟加拉文本作为图像(位图)的布局,然后使用打印机位图打印api。我对阿拉伯语文本有同样的问题。我用这种技术解决了这个问题。谢谢。

答案 1 :(得分:0)

这假设打印机可以处理UTF-8的多字节序列。 同时写入打印机特定的控制字节。我认为打印机只有一个有限的特定ASCII(8位)字符集。

所以试试吧:

byte[] buffer = new byte[128];
for (int i = 0; i < 128; ++i) {
    buffer[i] = (byte)(-128 + i);
}

如果找不到某些文档,则需要手动映射。

然后你需要将像"\u098F\u09AC\u0982"这样的字符串中的字符映射到它们的字节值。

Map<Character, Byte> charsToByte;
charsToByte.put('\u088F', (byte)129); // Or such.

答案 2 :(得分:0)

如果您的热敏打印机附有文档,请搜索代码页。 热敏打印机的ascii值包含256个字符!前128个字符是固定的并且按原样打印,而最后128个字符是可编辑的,您可以通过从Unicode设置代码页来选择。如果您不能拥有代码页,则必须设置自定义字符集。 以下是我的打印机设置:  **

   [Name] Select character code table
   [Format] ASCII ESC t n
   Hex 1B 74 n
   Decimal 27 116 n
   [Range] 0≤ n≤ 5,16≤ n≤ 19,n=255
   [Description]Selects a page n from the character code table.
   [Defaults]n=0
   [Reference]Character Code Table    
     **
   [Name]Select/cancel user-defined character set
   [Format] ASCIIESC % n
   Hex 1B 25 n
   Decimal 27 37 n
   [Range] 0≤ n≤ 255
   [Description]Selects or cancels the user-defined character set.
   • When the LSB of n is 0, the user-defined character set is canceled.
   •When the LSB of n is 1, the user-defined character set is selected.
   [Note]When the user-defined character set is canceled,the internal character set is
   automatically selected
   • n is available only for the least significant bit.
   [Defaults] n=0
   [Reference] ESC&,ESC?
 **

答案 3 :(得分:0)

在打印机的数据表中进行检查。

例如,我的打印机 HOP-E200 58mm迷你便携式热敏打印机数据表说

enter image description here