2016-01-28 22 views
8

sono stato in grado di stampare il testo, ma quando si tratta di barcode non è sempre mostrando o mostrando unico parametro numerocodice a barre di stampa utilizzando stampante termica Android

Qui è il mio codice sorgente

//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); 

ma il risultato codice a barre non è visibile, mi sto perdendo qualcosa

Please help me

EDIT

ho trovato il codice di ESC/POS:

GS km d1 ... dk NUL o GS kmn d1 ... dk

Ma ancora non funziona

+0

controllo se la stampante supporta la stampa del codice a barre o meno .. tra cui la stampante termica che si sta usando –

+0

Io uso il modello yongli: POS-5890H Larghezza della carta USB 58 mm, Ho visto su specifica il suo codice a barre di supporto –

risposta

3

Il codice POS GS k ha due versioni (come già scoperto):

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

Questa versione funziona solo per dati ASCII puri poiché utilizza 0x00 (NUL) come terminatore.

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

Questa versione utilizza una lunghezza byte aggiuntivo n per indicare la parte di dati (è inoltre adatto solo per alcune codifiche compreso CODE128).

Il codice ha un numero 0x0d nel byte di comando e potrebbe anche utilizzare il formato errato.

Se si prevede di stampare il formato dei dati ASCII puro il comando come questo:

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; 

o la versione più sicura dal momento che ha anche la lunghezza dei dati attesi:

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); 

Se dei due lavori, la stampante potrebbe semplicemente non supportare CODE128.

Il 5890 è una specifica abbastanza comune e ci sono un sacco di basso costo "drop-in" sostituti sul mercato che lasciano le più complesse implementazioni di codici a barre e solo comprendono codifiche semplici come EAN8, EAN13 ecc

+0

ok domani proverò il codice spero che funzioni , grazie comunque –

+0

Sono tornato al lavoro in poche ore - controllerò con le nostre funzioni CODE128 :) – Shirkrin

+1

OK, modifica secondaria: 's hex 0x49 (decimale 73) per la stampa CODE128. – Shirkrin

Problemi correlati