2016-01-28 13 views
8

udało mi się wydrukować tekst, ale kiedy przychodzi do kodów kreskowych, że nie zawsze jest pokazywanie lub pokazując tylko parametr numerycznydruku kodów kreskowych przy użyciu drukarki termicznej Android

Oto mój kod źródłowy

//barcode 128 
       byte[] formats = {(byte) 0x1d, (byte) 0x6b, (byte) 0x73,(byte) 0x0d}; 
       byte[] contents = content.getBytes(); 

       byte[] bytes = new byte[formats.length + contents.length]; 

       System.arraycopy(formats, 0, bytes, 0, formats.length); 
       System.arraycopy(contents, 0, bytes, formats.length, contents.length); 


       usbCtrl.sendByte(bytes, dev); 

       usbCtrl.sendByte(LineFeed(), dev); 

ale wynik kod kreskowy nie jest wyświetlane, jestem I brakuje czegoś

Proszę mi pomóc

EDIT

znalazłem kodu ESC/POS:

GS km d1 ... dk NUL lub GS KMN d1 ... dk

Ale nadal nie pracuje

+0

sprawdzić, czy twoja drukarka obsługuje drukowanie kodów kreskowych, czy nie ... między którymi drukarka termiczna używasz –

+0

Używam modelu yongli: POS-5890H Szerokość papieru USB 58 mm, Widziałem na specyfikacji jego kod kreskowy wsparcia –

Odpowiedz

3

Kod POS GS k ma dwie wersje (jak już odkryto):

GS k - print one dimensional barcode 
    m - barcode mode selector 
    [d]k - data bytes 
    NUL - terminator 

Ta wersja działa tylko dla czystych danych ASCII, ponieważ używa terminatora 0x00 (NUL).

GS k - print one dimensional barcode 
    m - barcode mode selector 
    n - content length in bytes 
    [d]k - data bytes 

Ta wersja wykorzystuje dodatkowy bajt długości n wskazać część danych (jest to również nadaje się tylko do niektórych kodowania w tym CODE128).

Twój kod ma zabłąkane 0x0d w bajtach polecenia i może również używać niewłaściwego formatu.

Jeśli zamierzasz wydrukować czysty format danych ASCII polecenie tak:

byte[] formats = {(byte) 0x1d, (byte) 0x6b, (byte) 0x49}; 
byte[] contents = content.getBytes(); 

byte[] bytes = new byte[formats.length + contents.length + 1]; 

System.arraycopy(formats, 0, bytes, 0, formats.length); 
System.arraycopy(contents, 0, bytes, formats.length, contents.length); 

// add a terminating NULL 
bytes[formats.length + contents.length] = (byte) 0x00; 

lub bardziej bezpiecznej wersji, ponieważ ma również oczekiwaną długość danych:

byte[] contents = content.getBytes(); 
// include the content length after the mode selector (0x49) 
byte[] formats = {(byte) 0x1d, (byte) 0x6b, (byte) 0x49, (byte)content.length}; 

byte[] bytes = new byte[formats.length + contents.length]; 

System.arraycopy(formats, 0, bytes, 0, formats.length); 
System.arraycopy(contents, 0, bytes, formats.length, contents.length); 

Jeśli ani z dwóch prac, a następnie drukarka może po prostu nie obsługiwać CODE128.

5890 jest na tyle powszechne specyfikacja i istnieje wiele taniej „drop-in” zamienników na rynku, które opuszczają się bardziej kompleksowe wdrożenia kodów kreskowych i tylko obejmują proste codings jak EAN8, EAN13 itp

+0

ok jutro jutro spróbuję twojego kodu mam nadzieję, że działa , i tak dziękuję –

+0

Wracam do pracy za kilka godzin - sprawdzę dwa razy z naszymi własnymi funkcjami CODE128 :) – Shirkrin

+1

OK, drobne zmiany: to Jest to szesnastkowo 0x49 (dziesiętny 73) dla wydruku CODE128. – Shirkrin

Powiązane problemy