2014-12-19 7 views
1

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

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

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

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

я затем преобразуется в массив байтов и попытался отправить его через поток DataOutput так:

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(

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

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

+0

никто не имеет информации по этой теме? вытягивая мои волосы здесь –

ответ

4

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

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 
+0

Большое спасибо ... однако у меня проблема, когда по требованию логотипы для компании уже хранятся на принтере. Поэтому мне нужно распечатать логотип, затем текст, затем еще один логотип, в коде C#, по-видимому, создается одна большая строка, добавляющая байты, например: 'StringBuilder sb; String logo1 = "x12/x52/x1b/x2c"; Строковый текст = "это тестовая строка"; Строка logo2 = "x12/x52/x1b/x2c"; sb.append (logo1); sb.append (текст); sb.append (logo2); 'Затем они отправляют строку на принтер. Это возможно в Java/Android? Или при попытке форматировать текст (embolden и т. Д.) –

+0

Вам нужно отправить массив байтов (или байт байтом, как мой пример), а не строку. Попробуйте отправить «x12/x52/x1b/x2c» как 0x12, 0x52, 0x1B, 0x2C и т. Д. Для получения дополнительной информации (список команд) попробуйте просмотреть руководства, например http://www.starmicronics.com/support/mannualfolder/escpos_cm_en .pdf – grig

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

  • Нет связанных вопросов^_^