Android热敏打印机不接受对齐字节

时间:2016-11-20 12:53:46

标签: android bluetooth thermal-printer

我正在使用Analogics热敏打印机从Android设备打印账单收据。他们为打印机提供了sdk,但没有任何关于文本对齐的信息,例如中心对齐,右对齐,默认情况下左对齐正在工作。

到目前为止,我已尝试使用以下命令进行打印:

factory

private static final byte[] ALIGN_LEFT = {0x1B, 0x61, 0};
private static final byte[] ALIGN_CENTER = {0x1B, 0x61, 1};
private static final byte[] ALIGN_RIGHT = {0x1B, 0x61, 2};

我的打印命令如下:

public static final byte[] ALIGN_LEFT = new byte[]{27, 97, 0};
public static final byte[] ALIGN_CENTER = new byte[]{27, 97, 1};
public static final byte[] ALIGN_RIGHT = new byte[]{27, 97, 2};

我想打印产品名称应该保留命令,数量+价格要对齐。

public boolean printData(byte[] msg) {
    boolean flag = false;
    try {
        this.mmOutputStream.write(msg);
        flag = true;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return flag;
}

public boolean printData(String msg) {
    boolean flag = false;
    try {
        this.mmOutputStream.write(msg.getBytes());
        this.mmOutputStream.flush();
        flag = true;
    } catch (IOException e) {
        e.printStackTrace();
    }
    return flag;
}

4 个答案:

答案 0 :(得分:0)

这是一个包含Epson兼容收据打印机命令的文档:http://www.aures-support.fr/DE/wp-content/uploads/2016/04/ESCPOS-command-manual20160428.pdf

它说的是1B 61

  

仅当在标准模式下在行的开头处理时才启用该命令。

此外,我不完全确定将字节转换为字符串和返回是否真的导致原始字节。您可以通过写入发送到打印机的字节来检查这些内容。

对齐的另一种方法是插入空格。只要字符具有固定宽度并且您知道一行中的字符数,它就可以工作。这不是一个很好的解决方案,但可能是在左侧对齐某些东西并在同一行中对齐右边的东西的唯一方法。我知道一个应用程序就是这样做的。

答案 1 :(得分:0)

private static final byte[] ALIGN_LEFT = {0x1B, 0x61, 0};
private static final byte[] ALIGN_CENTER = {0x1B, 0x61, 1};
public static final byte[] ALIGN_RIGHT = new byte[]{27, 97, 2};

我在打印机上测试了这些命令。 我认为您使用的打印机与这些命令不兼容。

答案 2 :(得分:0)

使用下面的命令在热敏打印机中设置对齐。

public static final byte[] PRINT_ALIGN_LEFT = new byte[] { 0x1b, 'a', 0x00 };
public static final byte[] PRINT_ALIGN_RIGHT = new byte[] { 0x1b, 'a', 0x02 };
public static final byte[] PRINT_ALIGN_CENTER = new byte[] { 0x1b, 'a', 0x01 };

答案 3 :(得分:0)

在上面的字节上打印以进行特定对齐,然后打印要对齐的字节:

byte[] PRINT_ALIGN_LEFT = new byte[] { 0x1b, 'a', 0x00 };
byte[] PRINT_ALIGN_RIGHT = new byte[] { 0x1b, 'a', 0x02 }; 
byte[] PRINT_ALIGN_CENTER = new byte[] { 0x1b, 'a', 0x01 };