Как отформатировать текст для принтера Bluetooth? - PullRequest
0 голосов
/ 16 октября 2018

Я думаю, как отформатировать текст по центру и сделать его больше.Я много тестировал и понятия не имею, как это работает ...

Вот мой код

 byte[] center = new byte[]{0x1B, 'a', 0x01};
 byte[] bold = new byte[]{0x1B,0x21,0x08};

И я применил их здесь

                outputStream.write(center);
                outputStream.write(header1.getBytes());
                outputStream.write(header2.getBytes());
                outputStream.write(header3.getBytes());
                outputStream.write(header4.getBytes());

                outputStream.write(bold);
                outputStream.write(dot.getBytes());
                outputStream.write(txnNo.getBytes());
                outputStream.write(name.getBytes());
                outputStream.write(amount.getBytes());
                outputStream.write(Date.getBytes());
                outputStream.write(Users.getBytes());

                outputStream.write(center);
                outputStream.write(company.getBytes());
                outputStream.write(space.getBytes());
                outputStream.write(space.getBytes());

На самом деле я хочу, чтобы заголовок был больше обычного текста и выровнялся по центру.Но я продолжаю изменять этот пример {0x1B, 0x21,0x08}.Это дает мне много разных результатов ... Нужна помощь ... Заранее спасибо, ценю ...

1 Ответ

0 голосов
/ 11 апреля 2019

Извините, мой ответ опоздал.Однако это может помочь другим позже.Я использовал эту библиотеку Мне было немного сложно получить правильные настройки для выравнивания текста, размера и стиля.Наконец-то я смог в этом разобраться.Я создал два метода ниже, чтобы напечатать и добавить новую строку соответственно.

protected void printConfig(String bill, int size, int style, int align)
{
   //size 1 = large, size 2 = medium, size 3 = small
    //style 1 = Regular, style 2 = Bold
    //align 0 = left, align 1 = center, align 2 = right

    try{

        byte[] format = new byte[]{27,33, 0};
        byte[] change = new byte[]{27,33, 0};

        outputStream.write(format);

        //different sizes, same style Regular
        if (size==1 && style==1)  //large
        {
            change[2] = (byte) (0x10); //large
            outputStream.write(change);
        }else if(size==2 && style==1) //medium
        {
            //nothing to change, uses the default settings
        }else if(size==3 && style==1) //small
        {
            change[2] = (byte) (0x3); //small
            outputStream.write(change);
        }

        //different sizes, same style Bold
        if (size==1 && style==2)  //large
        {
            change[2] = (byte) (0x10 | 0x8); //large
            outputStream.write(change);
        }else if(size==2 && style==2) //medium
        {
            change[2] = (byte) (0x8);
            outputStream.write(change);
        }else if(size==3 && style==2) //small
        {
            change[2] = (byte) (0x3 | 0x8); //small
            outputStream.write(change);
        }


        switch (align) {
            case 0:
                //left align
                outputStream.write(PrinterCommands.ESC_ALIGN_LEFT);
                break;
            case 1:
                //center align
                outputStream.write(PrinterCommands.ESC_ALIGN_CENTER);
                break;
            case 2:
                //right align
                outputStream.write(PrinterCommands.ESC_ALIGN_RIGHT);
                break;
        }
        outputStream.write(bill.getBytes());
        outputStream.write(PrinterCommands.LF);
    }catch(Exception ex){
        Log.e("error", ex.toString());
    }
}
 protected void printNewLine() {
    try {
        outputStream.write(PrinterCommands.FEED_LINE);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

Класс PrinterCommands ниже - только краткая часть, которая относится к методам выше.

public class PrinterCommands {
public static final byte LF = 0x0A;
public static byte[] FEED_LINE = {10};

public static final byte[] ESC_ALIGN_LEFT = new byte[] { 0x1b, 'a', 0x00 };
public static final byte[] ESC_ALIGN_RIGHT = new byte[] { 0x1b, 'a', 0x02 };
public static final byte[] ESC_ALIGN_CENTER = new byte[] { 0x1b, 'a', 0x01 };
public static final byte[] ESC_CANCEL_BOLD = new byte[] { 0x1B, 0x45, 0 };

}

Чтобы напечатать большое, жирное и по центру, вызовите метод printConfig, как в примере ниже

printConfig(header1.getBytes(),1,2,1);
...