Отправить шестнадцатеричную команду на ESC / POS-принтер Android

Я работаю над приложением, которое необходимо печатать непосредственно на принтере ESC / POS. Печать нормальная, но при подаче команд на принтер они просто печатают !! Я пытаюсь преобразовать код С #, и команды, которые я пытаюсь отправить, представляют собой шестнадцатеричные строки следующим образом:

public static String PRINTLOGOCOMPANY = "\x1c\x70\x01\x30";

Конечно, я понимаю, что здесь есть недопустимые escape-символы, поэтому я изменил его на:

"\\x1c\\x70\\x01\\x30"

Затем я преобразовал в массив байтов и попытался отправить его через поток вывода данных следующим образом:

String WIDTH_1 ="\\x1d\\x57\\x120\\x01";

Log.i("Width String: ", WIDTH_1);
final byte [] width = WIDTH_1.getBytes();
final int portNo =  xxxx;
final String ipAddress = "xxx.xxx.x.xxx";

Thread thread = new Thread() {
    @Override
    public void run() {
        try {
            Socket sock = new Socket(ipAddress, portNo);
            DataOutputStream dOut = new DataOutputStream(sock.getOutputStream());
            dOut.writeInt(width.length);
            dOut.write(width);
            dOut.close();
            sock.close();
        } catch (UnknownHostException e) {

            e.printStackTrace();
            Log.i("Unknown Host Exception Error: ", String.valueOf(e));
        } catch (IOException e) {
            e.printStackTrace();
            Log.i("IO Exception Error: ", String.valueOf(e));
        }
    }
};
thread.start(

но он просто печатает это на другом конце;

Может ли кто-нибудь дать совет по этому поводу, я очень признателен.


person DJ-DOO    schedule 19.12.2014    source источник
comment
нет никакой информации по этой теме? выдергиваю мои волосы здесь   -  person DJ-DOO    schedule 22.12.2014


Ответы (1)


Если я понимаю вашу проблему, вы не можете отправлять команды на принтер, он просто печатает все ваши символы. Все, что вам нужно, это отправить байты. Например, чтобы открыть кассу, нужно сделать:

Socket mSocket = new Socket(PRINTER_IP, PRINTER_PORT);
OutputStream mPrinter = mSocket.getOutputStream();
mPrinter.write(0x1B);
mPrinter.write(0x70);
mPrinter.write(0);              
mPrinter.write(200);  // t1 
mPrinter.write(255);  // t2
person grig    schedule 23.12.2014
comment
Большое спасибо ... однако у меня проблема, когда по требованию логотипы компании уже хранятся на принтере. Поэтому мне нужно напечатать логотип, затем текст, затем еще один логотип, в коде C # кажется, что создается одна большая строка, добавляющая байты, например: StringBuilder sb; String logo1 = "x12/x52/x1b/x2c"; String text = "this is a test string"; String logo2 = "x12/x52/x1b/x2c"; sb.append(logo1);sb.append(text); sb.append(logo2); Затем они отправляют строку на принтер .. возможно ли это в Java / Android? Или при попытке отформатировать текст (жирный шрифт и т. Д.) - person DJ-DOO; 23.12.2014
comment
Вам нужно отправить байтовый массив (или побайтно, как в моем примере), а не строку. Попробуйте отправить x12 / x52 / x1b / x2c как 0x12, 0x52, 0x1B, 0x2C и т. Д. Для получения дополнительной информации (список команд) попробуйте просмотреть руководства, например starmicronics.com/support/mannualfolder/escpos_cm_en.pdf - person grig; 23.12.2014