Impression ESC/POS base et code128

Voila comment imprimé en direct sur une imprimante à tickets un code barres de type code128 avec du texte formaté.

C’est un exemple en Windev mais il fonctionne avec tous les langages.

Pour commencer, on va reprendre les bases, le langage ESC/POS vient de chez Epson pour les POS (Point Of Sale -> Point De Vente) qui date de 1997. C’est de l’ASCII envoyé sur le port série, parallèle ou USB qui est analysé et imprimé directement par l’imprimante.
Je ne vais pas faire la liste de toutes les commandes qui existent, je vais simplement faire un tour des principales.
En règle générale est commencent par le caractère ESC(0x1B ou 27) ou GS(0x1D ou 29).

  • LF => line Feed ou saut de ligne (0x0A ou 10)
  • ESC + « – »   => Souligné
    • +  0 => Off
    • + 1 => On
    • + 2 => Double Lignes
  • ESC + « E »  => Gras
    • + 0 => Off
    • + 1 => On
  • GS + « B »  => Négatif
    • + 0 => Off
    • + 1 => On
  • ESC + « ! »  => Taille x 2
    • + 0 => Off
    • + 64 => x2
  • ESC + « M » => Police
    • + »0″ (ou 0) => Font A
    • + « 1 » = (ou 1) => Font B
  • ESC + « a » => Alignement
    • + « 0 » => Gauche
    • + « 1 » => Centré
    • + « 2 » => Droite
  • ESC + « R » => Charset
    • + 1 => France
  • ESC + « t » =>
    • + 6 => West  Europe (dépends parfois de l’imprimante)
  • ESC + « @ » => Reset
  • GS + « VA » => Feed et Cut

Code 128

  • GS + « w » + 2 => Largeur des barres, par défaut c’est 3
  • GS + « H » + 2  => Impression du code lisible en dessous
  • GS + « kI » => impression du code 128

Maintenant qu’on a les bases, il existe plusieurs type de code128. Le plus courant est le type B. Afin d’imprimé un code128 il faut ajouter 3 paramètres à la commande à envoyé à l’imprimante. Il s’agit du la taille du buffer, le type de code et la chaine à encoder. Le buffer est la concaténation du type de code et de la chaine à encoder. Voici un exemple brut dont les valeurs son données en décimal :
GS + « kI » + 20 + « {B » + « 1234567890AZERTYUI » + LF
20 est la taille du buffer, {B est un code128 de type B, 1234567890AZERTYUI est le contenu du code barres qui fait 18 caractères, LF valide la fin de la ligne et lance l’impression de la commande.

Constantes en Windev
gcLF est un caractère = Charact(0x0A)
gcGS est un caractère = Charact(0x1D)
gc0 est un caractère = Charact(0x00)
gc1 est un caractère = Charact(0x01)
gc2 est un caractère = Charact(0x02)


gsCharSetFR est une chaîne ANSI = ESC + "R" + Charact(1) + ESC + "t"+ Charact(6)
gsUnderlineOn est une chaîne ANSI = ESC + "-" + gc1
gsUnderlineOnx2 est une chaîne ANSI = ESC + "-" + gc2
gsUnderlineOff est une chaîne ANSI = ESC + "-" + gc0
gsBoldOn est une chaîne ANSI = ESC + "E" + gc1
gsBoldOff est une chaîne ANSI = ESC + "E" + gc0
gsNegatifOn est une chaîne ANSI = gcGS + "B" + gc1
gsNegatifOff est une chaîne ANSI = gcGS + "B" + gc0
gsFontSizeX2On est une chaîne ANSI = ESC + "!" + Charact(16+32+8)
gsFontSizeX2Off est une chaîne ANSI = ESC + "!" + gc0
gsFontA est une chaîne ANSI = ESC + "M0"
gsFontB est une chaîne ANSI = ESC + "M1"
gsReset est une chaîne ANSI = ESC + "@"
gsFeedCut est une chaîne ANSI = gcGS + "VA"
gsAlignLeft est une chaîne ANSI = ESC + "a0"
gsAlignCenter est une chaîne ANSI = ESC + "a1"
gsAlignRight est une chaîne ANSI = ESC + "a2"
Test WINDEV
iConfigure("POS-80C") // choisir votre imprimante
iDestination(iPrinter)

sMyString is string

sMyString = gsReset
iEscape(sMyString)

sMyString = gsCharSetFR
iEscape(sMyString)

sMyString = "TEST accents : azerty€é'(-è_çà" + gcLF
iEscape(sMyString)



sMyString = gsBoldOn + gsNegatifOn + gsFontSizeX2On +gsAlignCenter + "IMPRESSION CODE 128" + gcLF
iEscape(sMyString)

sMyString = gsReset + gsCharSetFR
iEscape(sMyString)

sMyString = gcGS+ "w" + Charact(2) + gcGS + "H" + Charact(2) + gcGS + "kI" + Charact(25) + "{BAaZer123456789/*-+01234" + gcLF
iEscape(sMyString)

sMyString = "23 caractère max size(2)" + gcLF

iEscape(sMyString)

iEndPrinting()

 

Finalement c’est très simple 🙂

1 Comment

Poster un Commentaire

Votre adresse de messagerie ne sera pas publiée.


*





Enter Captcha Here :