PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile 2024 → Imprimer signature Zebra RW420
Imprimer signature Zebra RW420
Débuté par Multipass, 08 jan. 2016 09:14 - 6 réponses
Membre enregistré
103 messages
Popularité : +4 (4 votes)
Posté le 08 janvier 2016 - 09:14
Bonjour à tous,

J'ai besoin de votre aide sur un projet WM21 pour Windows Mobile.
Je cherche à intégrer une signature client lors de l'édition d'un ticket de réception.

Concernant le ticket, le code d’impression est construit dans une chaine :
(le langage utilisé est le CPCL)
sCodeImp est un chaîne
////////////////////////////////////////
// DEBUT DE DOCUMENT + Logo
////////////////////////////////////////
sCodeImp = "! 0 200 200 %Hauteur% 1"+RC // maj à la fin
sCodeImp += "IN-MILLIMETERS"+RC
sCodeImp += "COUNTRY FRANCE"+RC
sCodeImp += "CENTER"+RC
sCodeImp += "PCX 0 0 !<LOGO.PCX"+RC
////////////////////////////////////////
// HAUT DE PAGE : Info ticket
////////////////////////////////////////
sCodeImp += "LEFT"+RC
sCodeImp += "TEXT 7 0 4 28 CLIENT :"+RC
sCodeImp += "TEXT 7 0 23 28 "+FACTURES.nom_client+RC
sCodeImp += "TEXT 7 0 4 32 CODE :"+RC
sCodeImp += "TEXT 7 0 23 32 "+FACTURES.code_client+RC
sCodeImp += "TEXT 7 0 53 32 DATE :"+RC
// …
////////////////////////////////////////
// TRANSFERT IMPRIMANTE BLUETOOTH
////////////////////////////////////////
gbufMasque est un Buffer = sCodeImp
// …
sEcrit(8,UnicodeVersAnsi(gbufMasque))
// …

Concernant l’image de la signature, voici la syntaxe attendue par l’imprimante :
Command width height x y data

- Width correspond à la largeur de l'image en points (dots).
Cette valeur, qui doit être un multiple de 8, devra être divisée par 8 pour la convertir en bytes.
Exemple pour une image de 16 dots de large : 16/8 = 2.

- Height correspond à la hauteur de l'image en points (dots).
Exemple pour une image de 16 dots de haut : 16.

- data correspond à la conversion hexadécimale des données binaires de l'image.
Exemple avec le contour d'un carré de 16x16 points :
FFFF80018001800180018001800180018001800180018001800180018001FFFF

soit :
FFFF 1111111111111111
8001 1000000000000001
8001 1000000000000001
8001 1000000000000001
8001 1000000000000001
8001 1000000000000001
8001 1000000000000001
8001 1000000000000001
8001 1000000000000001
8001 1000000000000001
8001 1000000000000001
8001 1000000000000001
8001 1000000000000001
8001 1000000000000001
8001 1000000000000001
FFFF 1111111111111111

Et si j’intègre l’exemple dans le code d’impression du ticket, j’ai bien un carré de 16x16 :
////////////////////////////////////////
// SIGNATURE CLIENT
//////////////////////////////////////
sCodeImp += "LEFT"+RC
sCodeImp += "TEXT 7 0 4 "+nPosY+" TEST CARRE 16X16"+RC
// …
sCodeImp += "EG 2 16 10 "+nPosY+RC
sCodeImp += "FFFF80018001800180018001800180018001800180018001800180018001FFFF"+RC
// …

Mais lorsqu’il s’agit d’imprimer le dessin/signature du client, ce n’est pas la même histoire…

Je bute tout d’abord sur la conversion pixels/points : j’ai lu sur le net qu’1 pixel vaut 0.75 point mais certains autour de moi pensent qu’1 pixel vaut 1 point…

Je bute également sur la conversion binaire/hexa : j’ai attendu avec impatience la dispo de la fonction BufferVersHexa() sous Windows Mobile et j’ai essayé plusieurs méthodes dont voici la plus simple :
sCodeImp += "LEFT"+RC
sCodeImp += "TEXT 7 0 4 "+nPosY+" SIGNATURE CLIENT"+RC
// …
BufferImg est un Buffer = FACTURES.sign_liv // rubrique mémo binaire image
sCodeImp += BufferVersHexa(BufferImg)+RC
// …

Au final j’ai un peu tout essayé en jonglant avec les options de BufferVersHexa sur le nb octets par mot et/ou par ligne… voire en supprimant les RC et les espaces… j’ai bien quelque chose qui s’imprime mais rien qui ressemble à ma signature de départ.

Alors si vous avez des réponses ou des pistes sur les conversions pixel/point et binaire/hexa, je suis preneur.

D’avance, Merci…
Posté le 23 février 2016 - 10:11
Bonjour,

j'ai trouvé votre post sur ce forum, j'ai une imprimante bluetooth zebra j'aurai aimé savoir comment vous avez procédé pour vous y connecter et lancer une impression depuis une appli windev mobile ?

Merci de votre aide.
Membre enregistré
103 messages
Popularité : +4 (4 votes)
Posté le 23 février 2016 - 21:58
Bonjour Nico,

Il faut d'abord appairer le terminal avec l'imprimante (et définir le port de connexion).
Côté WM, regarde les fonctions "s" : sOuvre() et sEcrit().

Par exemple et pour l'envoi de l'impression :
gbufMasque est un Buffer = sCodeImp
SI sOuvre(8, 2000, 2000) = Vrai ALORS
sFixeParamètre(8, 19200, 1, 8, 0)
sEcrit(8,UnicodeVersAnsi(gbufMasque))
TANTQUE sDansFileSortie(8) > 0
Multitâche(1)
FIN
Multitâche(1)
// Fermeture du port
sFerme(8)
Multitâche(1)
FIN


A+
Posté le 24 février 2016 - 08:54
Merci pour votre réponse mais ces fonctions ne sont pas supportées pour Android :-(
Posté le 28 décembre 2018 - 15:01
Bonjour,
je n'arrive plus d'imprimer par la langage CPCl. je suis avec Android ==> Zebra
sCodeImp += "PCX 0 0 !<LOGO.PCX"+RC

l'image LOGO c'est une image dans l'application mobile ou stocké dans l'imprimante?
comment vous faite l'appel à une image de type Jpg ?

J'ai essayé de mettre dans un buffer et la convertir en hexa dans la commande GRAPHIC mais ça donne une bonde noir.
quelqu'un peut m'aider SVP. voici mon code.
ImprimeImage(bufF est un Buffer)
sMessage is chaîne

sMessage += "! 0 200 200 210 1"+RC
sMessage += "EG 50 150 90 45 "+BufferVersHexa(bufF,1)+RC
sMessage += "FORM"+RC
sMessage += "PRINT"+RC

bufMessage est un Buffer = sMessage
SocketEcrit("SocketName",sMessage)
Membre enregistré
125 messages
Popularité : +5 (5 votes)
Posté le 28 décembre 2018 - 22:40
Bonjour Kaisso,

Le logo est effectivement stocké dans l'imprimante.

Nous sommes passés par les utilitaires « Zebra Setup Utilities » et « Zebra Font Downloader » disponibles sur le CD-Rom livré avec l’imprimante pour formater la zone mémoire et enregistrer le logo.

Le logo a été converti en PCX car si je me souviens bien, c'était le seul format accepté par l'imprimante.

Bon dèv.
A+
Posté le 31 décembre 2018 - 09:01
Bonjour,
Multipass merci pour votre réponse,
j'ai bien compris que l'image doit être enregistrée dans l'imprimante. Mais pour imprimer une image non enregistrée comme une signature de client par exemple, comment je pourrais faire ? Avez vous une idée svp ?
j'ai trouvé une piste, c'est de convertir l'image en Hexa et le passer par socket. C'est faisable ou pas ?
Merci.