Italian [b4a] ci risiamo

giannimaione

Well-Known Member
Licensed User
Longtime User
la repubblica popolare del bangladesh "গণপ্রজাতন্ত্রী বাংলাদেশ" è uno stato simpaticissimo, se non fosse per questa sorta di groviglio nella scrittura :mad:

problema:
ho una stampante esc/pos "printer receipt"; ok!
è connessa nella rete locale tramite wifi; ok!
è configurata in windows tramite driver proprietari; ok!
riesco a stampare anche testo in bengali "ওহে বিশ্ব" ; ok!

per stampare con B4A inizializzo un Socket con IP e Porta della stampante (quindi NON ho nessun driver o software installato) e faccio qualcosa tipo
B4X:
Dim OutputStream1 As OutputStream
OutputStream1 = socket1.OutputStream
Dim dataToSend As String 
dataToSend = "Testo da stampare"
'oppure dataToSend = "ওহে বিশ্ব"
OutputStream1.WriteBytes(dataToSend.GetBytes("UTF8"), 0, dataToSend.Length)
Sleep (500)
OutputStream1.Close
Socket1.Close
ho creato una app B4A, e stampo utilizzando il "linguaggio" esc/pos; ottengo il BOLD / ITALICO ,
ma non riesco ad ottenere il testo in lingua bengali, nel senso che quando invio ওহে বিশ্ব la stampante si incasina;
i comandi esc/pos inviati successivamente NON rispondo correttamente (esempio taglio carta/taglierino)

in rete, in diversi forum, viene consigliato di creare una bitmap da inviare poi alla stampante;
ok, mi adeguo ... ma come ?

premessa:
devo stampare una sorta di "scontrino"
আলু 1,25
পেঁয়াজ 3,29
quindi la "lunghezza" dello scontrino non è sempre uguale

come convertire il tutto in una bitmap per poi inviare i dati alla stampante?
attenzione: vorrei evitare azioni da parte dell'operatore per ottenere la stampa (esempio generare un PDF per poi stamparlo con altro software/utility)

forse utilizzando un CANVAS?
un aiuto / suggerimento ?
 

Sagenut

Expert
Licensed User
Longtime User
Premesso che non conosco assolutamente queste stampanti....
Se possibile, prepara tutto lo scontrino su un panel (magari già a dimensione della carta di stampa) dichiarato come B4XView e poi usa
B4X:
Panel.Snapshot
per ottenerne il contenuto in forma di immagine.
 

giannimaione

Well-Known Member
Licensed User
Longtime User
qualcosa tipo ?
B4X:
    Dim p As B4XView = xui.CreatePanel("")
    Dim btm As B4XBitmap = p.Snapshot
 

Sagenut

Expert
Licensed User
Longtime User

sirjo66

Well-Known Member
Licensed User
Longtime User
ma non riesco ad ottenere il testo in lingua bengali, nel senso che quando invio ওহে বিশ্ব la stampante si incasina;

il protocollo ESC/POS prevede delle sequenze di byte per dare i comandi alla stampante.
normalmente queste sequenze iniziano con il codice del tasto ESCAPE (cioè decimale 27 o hex 1B) oppure con il codice GS (0x1D)
Se la stringa "ওহে বিশ্ব", codificandola in UTF-8 avrà al suo interno il codice 0x1B o il 0x1D la stampante non lo interpreta come testo da stampare ma come un comando.
Il comando ovviamente non sarà corretto e tutta le sequenza successiva va a farsi friggere, ecco perchè poi la stampante non risponde più.
Comunque mi sembra strano che la stampante abbia tutti i caratteri codificabili in UTF-8, secondo me mancano proprio i caratteri del font, per cui sì, meglio se costruisci una immagine e poi stampi quella.
 

giannimaione

Well-Known Member
Licensed User
Longtime User
provando con diversi CharSet
B4X:
OutputStream1.WriteBytes(dataToSend.GetBytes("UTF8"), 0, dataToSend.Length)
IBM00858 / IBM437 ... la stampante non si "inceppa", ma la stringa NON viene stampata;
forse giocando con un charset e il setup (c'è un tool della stampante) ... chissà

li provo tutti ?

e poi ?
 

sirjo66

Well-Known Member
Licensed User
Longtime User
La tabella che hai segnalato è interessante.
Se ho capito bene mostra la lista dei charset supportati.
Se guardi bene vedrai che sul UTF-8 c'è scritto "default", che quindi (secondo me) non è la tabella completa dei caratteri che supporta UTF-8.
Sappiamo che gli ISO-8859-X sono tabelle di 256 caratteri normalmente dei paesi latini.
Potresti provare con UTF-16 o UTF-32 che dovrebbero comprendere tutto (visto che non c'è scritto "default") ma comunque la trovo un po' dura.
 

Xfood

Expert
Licensed User
Buon pomeriggio,
Non so se a suo tempo hai acquistato questo:

Praticamente crea la bitmap di ogni riga e manda in stampa , quindi puoi avere 100 righe, genera la bitmpa della 1 riga, la manda in stampa, poi la seconda, e cosi via, dico da prendere come esempio
 
Last edited:

giannimaione

Well-Known Member
Licensed User
Longtime User
ciao @Xfood , grazie per il tuo intervento;

se non ho capito male, l'app "portable warehouse" fa riferimento ad una stampante BT, mentre ho l'esigenza di stampare tramite wifi;
intanto ho iniziato a sbirciare il tuo esempio ticket, quello del "è il tuo turno";

la tua indicazione è da prendere in considerazione, cioè una riga e poi stampa, altra riga e poi stampa,
 

Xfood

Expert
Licensed User
ciao @Xfood , grazie per il tuo intervento;

se non ho capito male, l'app "portable warehouse" fa riferimento ad una stampante BT, mentre ho l'esigenza di stampare tramite wifi;
intanto ho iniziato a sbirciare il tuo esempio ticket, quello del "è il tuo turno";

la tua indicazione è da prendere in considerazione, cioè una riga e poi stampa, altra riga e poi stampa,
Il fatto che sia bluetooth oppure Wifi, cambia poco, i comandi da mandare sono sempre quelli.
 
Top