Как отправить символов в команду print и вывести их в одну строку? - PullRequest
0 голосов
/ 18 января 2019
public void printText(String text, int fontsize, boolean doubleW, boolean bold, boolean center) {

    if (this.mPrinterModule != null) {

        byte [] alignment = alignRight();
        byte [] alignment = alignCenter();
        byte [] line_space = setLineSpacing(10);
        byte [] font_size  = fontSizeSetBig(fontsize);
        byte [] left_margin = setLeftMargin(24,0);

        this.mPrinterModule.sendData(left_margin);
        this.mPrinterModule.sendData(font_type);
        this.mPrinterModule.sendData(line_space);
        this.mPrinterModule.sendData(font_size);
        this.mPrinterModule.sendData(alignment);

        PrinterModule printerModule = this.mPrinterModule;
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append(text);
        stringBuilder.append("\r\n");
        printerModule.sendMessage(stringBuilder.toString(), "GBK");
    }
}

Это метод печати, который я использую для печати текста на моем термопринтере. Вместо текста я хочу послать символ за символом с их собственным индивидуальным стилем формата. Все символы должны быть напечатаны в одну строку. Любая помощь будет принята с благодарностью. Заранее спасибо

public void sendMessage(String message, String charset) { 

    super.sendMessage(message, charset); 

    if (checkUsbPermission()) { 

        if (this.mConnected) { 

            this.mUsbCtrl.sendMsg(message, charset, this.mDevice); 

        } else { 

            this.mCallback.onError(ErrorCode.DEVICE_NOT_CONNECTED); 

        } 

    } 

} 



public synchronized void sendMsg(String msg, String charset, UsbDevice dev) { 

    if (msg.length() != 0) { 

        byte[] send; 

        try { 

            send = msg.getBytes(charset); 

        } catch (UnsupportedEncodingException e) { 

            send = msg.getBytes(); 

        } 

        sendByte(send, dev); 

        sendByte(new byte[]{(byte) 13, (byte) 10, (byte) 0}, dev); 
    } 
}

1 Ответ

0 голосов
/ 18 января 2019

В большинстве случаев метод sendMessage() модуля PrinterModule имеет методы print и moveToNextLine, реализованные в нем. Следовательно, символ печатается, и курсор перемещается на следующую строку сразу после вызова метода sendMessage().

Вам нужно будет внести изменения в реализацию метода sendMessage() модуля PrinterModule. Удалите вызовы print и newLine из метода sendMessage(). Затем вы можете отправить столько символов, сколько захотите, в outputStream. Если вы хотите окончательно распечатать, просто отправьте команду print на принтер.

UPDATE

Метод sendMessage() вызывает sendMsg(), который в конечном итоге выполняет оператор sendByte(new byte[]{(byte) 13, (byte) 10, (byte) 0}, dev);. Эта строка отвечает за печать после каждого sendMsg() вызова. byteArray содержит команду для печати и добавления newLine каждый раз, когда ему отправляется какое-либо сообщение. Удалите эту строку отсюда.

После этого продолжайте отправлять символы на принтер, используя sendMessage(). Когда вы, наконец, захотите распечатать весь оператор, отправьте только команду PrinterModule.sendByte(new byte[]{(byte) 13, (byte) 10, (byte) 0}, dev);. Все ваши символы будут напечатаны в одну строку, если будет достаточно места, в противном случае он будет перемещен на следующую строку.

ОБНОВЛЕНИЕ 2

Вот ссылка для UsbController . Вы можете напрямую добавить это как новый файл в свой проект (не нужно добавлять файлы SDK). Способ использования UsbController класса находится здесь в UsbFragment .

...