2014-10-18 3 views
3

Так что я был писать Android приложение для принтера Bluetooth на некоторое время, и я понял, что это на самом деле ESC/POS стандарт: http://nicholas.piasecki.name/blog/wp-content/uploads/2009/12/ESC-POS-Command-Guide.pdfAndroid POS ESC принтера/POS

Теперь документ я использую для мой принтер ограниченное подмножество этих команд и их можно найти здесь: https://dl.dropboxusercontent.com/u/88265006/%E4%BA%A7%E5%93%81/Printer «s% 20user% 20manual/SP-MP-300-технический% 20Manual.pdf

 private void initPrinter() { 
      byte[] init = new byte[2]; 
      init[0] = 0x1B; 
      init[1] = 0x40; 
      mService.write(init); 
     } 

     private void printText(String message){ 
      byte[] send; 
      try{ 
       send = message.getBytes("UTF8"); 
      } 
      catch(UnsupportedEncodingException e){ 
       send = "Error".getBytes(); 
      } 
      initPrinter(); 
      mService.write(send); 
     } 

Я могу подключиться к принтеру, инициализируется он с командой «ESC @», и я могу писать с помощью приведенных выше команд, но я не могу получить никаких «визуальных» эффектов с точки зрения ЛЮБОГО вида штрих-кода. Это моя попытка для кода 1D EAN13 (0000000000000):

 byte[] height = new byte[3]; 
     height[0] = 0x1D; 
     height[1] = 0x68; 
     height[2] = (byte)30; 
     //height[3] = 0; 

     byte[] width = new byte[3]; 
     width[0] = 0x1D; 
     width[1] = 0x77; 
     width[2] = (byte)3; 

     byte[] textPos = new byte[3]; 
     textPos[0] = 0x1D; 
     textPos[1] = 0x48; 
     textPos[2] = (byte)2; 

     byte[] level = new byte[3]; 
     level[0] = 0x1D; 
     level[1] = 0x51; 
     level[2] = (byte)32; 

     byte[] code = new byte[18]; 
     code[0] = 0x1D; 
     code[1] = 0x6B; 
     code[2] = 0x02; 
     code[3] = 0x0D; 
     code[4] = 0x30;//1 
     code[5] = 0x30;//2 
     code[6] = 0x30;//3 
     code[7] = 0x30;//4 
     code[8] = 0x30;//5 
     code[9] = 0x30;//6 
     code[10] = 0x30;//7 
     code[11] = 0x30;//8 
     code[12] = 0x30;//9 
     code[13] = 0x30;//10 
     code[14] = 0x30;//11 
     code[15] = 0x30;//12 
     code[16] = 0x30;//13 

     code[17] = 0x00;//end 
     mService.write(height); 
     mService.write(width); 
     mService.write(textPos); 
     mService.write(level); 
     mService.write(code); 

Где mService фактически записывает данные. Лучший результат, который я получаю, - 0█0█0█0█0█0█0█0█0█0█0█0█0█0█ - после отправки данных много раз подряд.

Если я удаляю конечный конечный байт после нескольких отправлений, я получаю 14 0, и я также попытался добавить конец 0 в массивы height, width, textPosition и level, без каких-либо аффектов.

Я также посмотрел в следующих местах: http://www.manualslib.com/manual/689542/Axiohm-A795.html?page=91
http://pyramidacceptors.com/phoenix-printer/esc-pos-command-set/
http://www.vbforums.com/showthread.php?754493-RESOLVED-Printing-Barcode-with-ESC-POS-on-Epson-Printers
http://www.manualslib.com/manual/753647/Axiohm-A630.html?page=51
https://www.sparkfun.com/datasheets/Components/General/Driver%20board.pdf
Where can I find a "ESC/POS" Epson Barcode Test Program?

+1

Вы уверены, что правили правильно. Java имеет странный способ использования hex-байта (двоичное преобразование). Возможно, это и приводит к вашей проблеме. – SeahawksRdaBest

+0

Я закончил создание констант для удобства чтения, например. частный статический байт GS = 0x1d; Но представление байтов Java не было проблемой, но спасибо за попытку помочь :) –

ответ

3

Ok так получается, что в ESC/POS принтер фактически вычисляет некоторые данных для вас. Я не должен был помещать контрольный байт (последнюю цифру фактического штрих-кода) в данные, которые я отправлял на печать.

Конечно, это не помогло мне в моей документации отсутствует все знаки < =. Я закончил использовать этот документ для справки: http://content.epson.de/fileadmin/content/files/RSD/downloads/escpos.pdf

Я все еще работаю над печатью QR-кода, но я вполне уверен, что мои проблемы несколько схожи.

+0

Tnx за помощью, но вы можете поделиться рабочим кодом? У меня такая же проблема и удаление последней цифры (код [17] = 0x00; // end) не работает для меня ... возможно, я пропустил что-то еще. :( –

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