2016-11-20 1 views
1

Я использую термографический принтер Analogics для распечатки счёта с устройства Android. Они предоставили sdk для принтера, но нет никакой информации об выравнивании текста. I Centere Align, Right Align, по умолчанию работает Left Align.Термопринтер Android, не принимающий байты выравнивания

До сих пор я пытался ниже команду для печати:

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; 
} 

Я хотел напечатать команду, как название продукта следует оставить, количество + цена будет выровнена по правому краю.

public static String nameLeftValueRight(String leftValue, String rightValue) { 
    return applyParametersToPrinter(leftValue, DataConstants.ALIGN_LEFT) + 
      applyParametersToPrinter(rightValue, DataConstants.ALIGN_RIGHT); 
} 
public static String applyParametersToPrinter(String data, byte[] param) { 
    String s = new String(param); 
    return String.valueOf(s) + data; 
} 
+0

Chiru, вам удалось найти решение? –

+0

@NinjoeQuah Nope – chiru

ответ

0

Это документ с командами Epson - совместимых принтеров квитанций: http://www.aures-support.fr/DE/wp-content/uploads/2016/04/ESCPOS-command-manual20160428.pdf.

Это говорит о 1B 61:

Команда доступна только при обработке в начале строки в стандартном режиме.

Кроме того, я не совсем уверен, что преобразование байтов в строку и обратно действительно приводит к исходным байтам. Это можно проверить, записав байты, отправленные на принтер для регистрации.

Альтернативный подход для выравнивания - это вставка пробелов. Он работает до тех пор, пока символы имеют фиксированную ширину, и вы знаете количество символов в строке. Это не отличное решение, но может быть единственным способом для выравнивания чего-то слева и чего-то справа в той же строке. Я знаю приложение, которое делает это именно так.

+0

Я пробовал то же самое, 1B 61 тоже, но бесполезно. Я планирую то же самое с ручным выравниванием. Спасибо. – chiru

+0

Возможно, принтер не совместим с Epson. – mm759

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}; 

Я проверил эти команды на своем принтере. Я думаю, что принтер, который вы используете, несовместим с этими командами.

Смежные вопросы