[RESOLU] Imprimer un ticket de caisse

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
omega
Messages : 626
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

[RESOLU] Imprimer un ticket de caisse

Message par omega »

Bonsoir,

Je viens juste de terminer un logiciel de vente au comptoir. Il fonctionne bien à part l'impression qui ne marche pas sur l'imprimante-caisse utilisant un rouleau de papier de 7cm de largeur. Par contre, sur A4, le ticket de caisse est bien imprimé mais sur le papier en rouleau, rien ne s'imprime. Quelqu'un a déjà utilisé une imprimante de caisse?

Merci
Dernière modification par omega le mer. 15/déc./2021 15:50, modifié 2 fois.
Win7 (x64) 64 bits Pb 5.72
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Imprimer un ticket de caisse

Message par falsam »

Quel est le constructeur et le type d'imprimante ?
Comment est elle connectée ?
Est elle visible dans les options d'impression ?

Tu vas peut être devoir utiliser des Esc commands pour gérer ton imprimante.
https://aures-support.com/DATA/drivers/ ... ESCPOS.pdf

Un début de réponse à ce propos est évoqué ici
viewtopic.php?p=207579#p207579
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
omega
Messages : 626
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Imprimer un ticket de caisse

Message par omega »

Merci Falsam pour ces infos utiles, mais j'avoue qu'il me faut au moins 3 mois pour étudier tout ça (Esc/Pos), or mon cas est très urgent car mon client est coincé à cause de l'impression. Je souhaiterais trouver une solution rapide (code source) qui me permettra d'avancer puis, je reviendrais sur lecours focément prochainement. Voici un échantillon du ticket que je souhaite imprimer: http://www.sarlminial.com/ticket.png

Merci beaucoup

à la limite, savoir au moins imprimer "Hello Word ! " pour commencer
Win7 (x64) 64 bits Pb 5.72
Avatar de l’utilisateur
omega
Messages : 626
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Imprimer un ticket de caisse

Message par omega »

Voici un code source en Windev découvert sur Internet (forum vb)

Code : Tout sélectionner

Début du code:

// Impression du ticket de caisse

I est un entier

nTotalGeneral est un réelSI

sOuvre(
PortImprimante,
256,
256) ALORS
// Ouverture du port parallèle

//Ouvre caisse

sEcrit(
PortImprimante,
ESC +
"p" +
Caract(
0)+
Caract(
10) +
Caract(
10))

// Impression de l'entete du ticketSI PAS

bImprimeLigne(
DebutGras+
" BOUTIQUE"+
FinGras) ALORS

Erreur(
"Erreur d'écriture sur le port n°"+
PortImprimante,...

"Vérifiez que l'imprimante est bien connectée et allumée.")

sFerme(
PortImprimante)RETOUR

FIN

//bImprimeLigne("----------------")

bImprimeLigne(
"")

bImprimeLigne(
DebutCompresse+
Répète(
"-",
38)+
FinCompresse)

bImprimeLigne(
DebutCompresse+
Complète(
"Désignation",
20)+
" !Qté! Prix!"+
FinCompresse)
// ! Total"+FinCompresse)

bImprimeLigne(
DebutCompresse+
Répète(
"-",
38)+
FinCompresse)

// Impression des lignes du ticketPOUR

I=
1 A
TableOccurrence(
"TABLE")SI

COL_TOTAL[
I]<>
0 ALORS
// Impression si ligne non vide

// Formatage de la ligne

bImprimeLigne(
DebutCompresse+
Complète(
COL_DESIGNATION[
I],
18)+
" !"+...

NumériqueVersChaine(
COL_QTE[
I],
"%2d")+
" ! "+...

NumériqueVersChaine(
COL_TOTAL[
I],
"%6.2f")+
"!"+
FinCompresse)

//NumériqueVersChaine(COL_TOTAL[I],"%6.2f")+FinCompresse)

// Cumul pour total

nTotalGeneral+=
COL_TOTAL[
I] FIN

FIN

bImprimeLigne(
DebutCompresse+
Répète(
"-",
38)+
FinCompresse)

// Ligne de total

bImprimeLigne(
DebutCompresse+
Complète(
"Total à régler: ",
30)+...

//NumeriqueVersChaine(nTotalGeneral)+FinCompresse)

NumériqueVersChaine(
nTotalGeneral,
"%6.2f")+
FinCompresse)

//bImprimeLigne("")

//bImprimeLigne("")

bImprimeLigne(
DebutCompresse+
"Réglé le :"+...

DateVersChaine(
DateSys())+
" "+...

Gauche(
HeureVersChaine(
HeureSys()),
5)+
FinCompresse)

// Impression du pied du ticket

bImprimeLigne(
DebutCompresse+
Répète(
"-",
38)+
FinCompresse)

bImprimeLigne(
DebutCompresse+
Complète(
"Espèces : ",
30)+...

//NumeriqueVersChaine(nTotalGeneral)+FinCompresse)

NumériqueVersChaine(
Saisie2,
"%6.2f")+
FinCompresse)

bImprimeLigne(
DebutCompresse+
Complète(
"Rendu : ",
30)+...

//NumeriqueVersChaine(nTotalGeneral)+FinCompresse)

NumériqueVersChaine(
Saisie3,
"%6.2f")+
FinCompresse)

bImprimeLigne(
DebutCompresse+
Répète(
"-",
38)+
FinCompresse)

bImprimeLigne(
" MERCI DE VOTRE VISITE")

bImprimeLigne(
" A BIENTOT")

bImprimeLigne(
DebutCompresse+
Répète(
"-",
38)+
FinCompresse)

bImprimeLigne(
"")

bImprimeLigne(
"")

bImprimeLigne(
"")

bImprimeLigne(
"")

bImprimeLigne(
"")

bImprimeLigne(
"")

bImprimeLigne(
"")

//Couper

sEcrit(
PortImprimante,
ESC +
"c0" +
Caract(
02) +
ESC +
"i")

sFerme(
PortImprimante)
// Fermeture du port parallèleSINON

Info(
"Erreur d'ouverture du port...!")
// Erreur d'ouverture du port parallèleFIN

Fin du code

Début procedure:
PROCEDURE

bImprimeLigne(
sLigne)
// avec un retour automatique à la ligne

SI

sEcrit(
PortImprimante,
AnsiVersOem(
Répète(
" ",
Marge)+
sLigne+
RC)) =
0 ALORSRENVOYER

FauxSINON

RENVOYER

VraiFIN

Fin procedure
Quelqu'un peut il traduire enPb?

Mereci
Win7 (x64) 64 bits Pb 5.72
julien
Messages : 846
Inscription : ven. 30/janv./2004 15:06
Contact :

Re: Imprimer un ticket de caisse

Message par julien »

Tu as des imprimantes usb de caisse qui se comporte comme une imprimante Windows ( comme la Star TSP.100)..
c'est + rapide que du ESC/POS
Tu as juste à adapter la largeur de ton papier + papier continue, et la découpe du papier dans la configuration d'impression (comme n'importe quelle imprimante)

J'avais bossé sur un projet de caisse (80% terminée) mais stoppé par la loi de finance 2016 fraude à la tva (NF525). Non rentable.
Tu es certifié nf525 ou auto certification ?

Edit: Tu es a Alger, donc pas emmerdé comme nous avec cette stupide loi, sauf si ton client est Français :P
Dernière modification par julien le ven. 03/déc./2021 21:24, modifié 1 fois.
Emjysoft, créateur de logiciels ! :)
Avatar de l’utilisateur
omega
Messages : 626
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Imprimer un ticket de caisse

Message par omega »

L'impression marche très bien sur papierA4, (j'ai justement adapté les dimensions du papier ) comme si c'était sous windows, seulement ça ne donne rien sur papier rouleau de la caisse. Voir échantillon ici: http://www.sarlminial.com/ticket.png

Malheureusement, l'imprimante ne porte aucune marque à part une étiquette écrite en chinois...
Win7 (x64) 64 bits Pb 5.72
Avatar de l’utilisateur
kernadec
Messages : 1594
Inscription : ven. 25/avr./2008 11:14

Re: Imprimer un ticket de caisse

Message par kernadec »

Bjr omega
je sais pas si ça va te convenir
pour ce petit exemple d'impression de papier millimétré
voici ce qu'il faut modifié dans ce code pour réduire la largeur d'impression.

changement du coef de 0.035 par 0.0035 pour les lignes de code suivantes.
la ligne 174 a été modifiée par la ligne 177
la ligne 181 a été modifiée par la ligne 184
ces deux changement suffisent pour modifié le résultat de largeur d' impression
ainsi tu pourras comparé ces deux resultats en pdf
Cordialement

Code : Tout sélectionner

;#####################################################################
;###     Rapporteur  par kernadec  pb4 OS windows  01/07/2008     ####           
;###      pour les amateurs de tracer précis avec le compas       ####                                                 
;###      mis a jour pour PB570LTS                                ####
;#####################################################################
Global cw.l,ch.l,rayon.l,rayonpixel.d,tfont.l,curseur.l,curseur1.l,x.d,y.d,x1.d,y1.d
Global wlargeur.l, whauteur.l,ImageNr,hdc,DC,r.RECT,rc,grille.d,grillepixel.d,u.d
Global Width.l,Color.l,wr.l,wb.l,cldm.l,clcm.l,clmm.l,wr,wb,wn

Declare init()
Declare ypage(x.f)
Declare xpage(x.f)
Declare papier(wr,wb,wn)
Declare dessin()
Declare fenetredessin()
Declare impression()
Declare MakeWinScreenshot(ImageNr,hwnd,Width,Height)
wlargeur=600
whauteur=600
rayonpixel=100 ;rayon du cercle en pixel 300 = rayon de 21cm /2 environ 
grillepixel=270

Procedure Ligne(x,y,x1,y1,Width,Color) 
  GetWindowRect_(WindowID(0),r.RECT)
  pen=CreatePen_(#PS_SOLID,Width,Color)  ; style : #Ps_dash, #Ps_dot,etc
  penOld=SelectObject_(DC,pen) 
  MoveToEx_(DC,x,y,0):LineTo_(DC,x1,y1) 
  DeleteObject_(pen) 
  DeleteObject_(penOld) 
EndProcedure  

Procedure Cercle(x,y,x1,y1,Width,Color) 
  GetWindowRect_(WindowID(0),r.RECT)
  pen=CreatePen_(#PS_DASH,Width,Color)    ;style : #Ps_dash, #Ps_dot, etc
  penOld=SelectObject_(DC,pen) 
  Ellipse_(DC,x,y,x1,y1)
  DeleteObject_(pen) 
  DeleteObject_(penOld) 
EndProcedure 

Procedure DrawRText(DC.l,x,y,Text.s,fFont.s,fangle.l,fHeight) 
  ;#####################################################################
  ; Procedure DrawRText  Author: Andreas
  ; Date: 14. June 2003
  ;#####################################################################
  Font = CreateFont_(fHeight,0,fangle*10,0,0,0,0,0,0,0,0,0,0,fFont) 
  GetWindowRect_(WindowID(0),r.RECT) 
  OldFont = SelectObject_(DC,Font) 
  SetTextAlign_(DC,#TA_BASELINE) 
  SetBkMode_(DC,#TRANSPARENT) 
  SetTextColor_(DC,RGB(0,0,255))
  ExtTextOut_(DC, x,y,0 ,r,Text,Len(Text),0 ) 
  SelectObject_(DC,OldFont) 
  DeleteObject_(Font) 
EndProcedure

init()   ; depart et boucle recursive

End
Procedure init()
  If OpenWindow(1, 710, 50, 260,200, "taille du tracer",#PB_Window_SystemMenu)
    cw=300
    ch=300  
    grille=grillepixel
    rayon=rayonpixel 
    tfont=rayonpixel/35
    
    StartDrawing(WindowOutput(1))
    ButtonGadget(0, 40, 10, 70, 25, "Imprimer")
    ButtonGadget(3, 150, 10, 70, 25, "Quitter")
    TrackBarGadget(1, 10, 70, 240, 20, 0,300, #PB_TrackBar_Ticks)
    SetGadgetState(1, 286)
    TrackBarGadget(6, 10, 120, 240, 20, 0,300, #PB_TrackBar_Ticks)
    SetGadgetState(6, 286)
    CheckBoxGadget(8, 50, 155, 80, 20, "Rapporteur")
    SetGadgetState(8, 0)
    CheckBoxGadget(9, 140, 155, 80, 20, "Quadrillage")
    SetGadgetState(9, 1)
    DrawText(15, 50,"Dimension du Rapporteur :",RGB(0,0,0),RGB(224,223,227))
    curseur=GetGadgetState(1)
    rayonpixel=curseur
    rayon=rayonpixel 
    DrawText(15, 50,"Dimension du Rapporteur :"+StrD((rayonpixel*0.035)*2,2)+"cm",RGB(0,0,0),RGB(224,223,227))
    DrawText(15, 100,"Dimension du Cadrillage :",RGB(0,0,0),RGB(224,223,227))
    curseur1=GetGadgetState(6)
    grillepixel=curseur1:
    grille=grillepixel
    DrawText(15, 100,"Dimension du Cadrillage :"+StrD((grillepixel*0.035001)*2,2)+"cm",RGB(0,0,0),RGB(224,223,227))
    StopDrawing() 
    
    OpenWindow(0, 100, 50, wlargeur,whauteur, "Rapporteur    -    Kernadec", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget) 
    DC=StartDrawing(WindowOutput(0))
    If DC
      DrawingMode(1)
      If GetGadgetState(8)=1
        dessin()               
      EndIf
      If GetGadgetState(9)=1
        papier(2,2,1)               
      EndIf
      StopDrawing() 
      hShotWindow = FindWindow_(0,"Rapporteur    -    Kernadec")   
      If hShotWindow 
        hWinBmp  = MakeWinScreenshot(0,hShotWindow, wlargeur, whauteur) 
        ImageGadget(20,0,0, wlargeur, whauteur, hWinBmp) 
      EndIf 
    EndIf 
    Repeat
      EventID = WaitWindowEvent() 
      Select EventID 
        Case #PB_Event_Gadget 
          Select EventGadget() 
            Case 0  
              impression()
              init()
            Case 1  
              StartDrawing(WindowOutput(1)) 
              curseur=GetGadgetState(1)
              rayonpixel=curseur
              rayon=rayonpixel 
              DrawText(15, 50,"Dimension du Rapporteur :"+StrD((rayonpixel*0.035)*2,2)+"cm",RGB(0,0,0),RGB(224,223,227))
              StopDrawing()
            Case 3  
              CloseWindow(0)
              CloseWindow(1)
              End
            Case 6
              StartDrawing(WindowOutput(1))
              curseur1=GetGadgetState(6)
              grillepixel=curseur1:
              grille=grillepixel
              DrawText(15, 100,"Dimension du Cadrillage :"+StrD((grillepixel*0.035)*2,2)+"cm",RGB(0,0,0),RGB(224,223,227))
              StopDrawing()
            Case #PB_Event_CloseWindow
              CloseWindow(0)
              CloseWindow(1)
              End
          EndSelect 
          tfont=rayonpixel/35
          DC=StartDrawing(WindowOutput(0))
          If DC
            Box(0,0,600,600,RGB(255,255,255))
            If GetGadgetState(8)=1
              dessin()               
            EndIf
            If GetGadgetState(9)=1
              papier(2,2,1)
            EndIf
            StopDrawing()
            hShotWindow = FindWindow_(0,"Rapporteur    -    Kernadec")   
            If hShotWindow 
              hWinBmp  = MakeWinScreenshot(0,hShotWindow, wlargeur, whauteur) 
              ImageGadget(20,0,0, wlargeur, whauteur, hWinBmp) 
            EndIf
          EndIf
      EndSelect 
    Until EventID = #PB_Event_CloseWindow
  EndIf
EndProcedure


Procedure impression()
  If PrintRequester()
    If StartPrinting("Rapporteur")
      hDCl = StartDrawing(PrinterOutput()) 
      w = GetDeviceCaps_ (hDCl, #HORZRES ) 
      h = GetDeviceCaps_ (hDCl, #VERTRES ) 
      If w/h > h/w                    ;definir otientation
        rc=2                          ;rapport page avec la racine de 2 
      Else 
        rc=1
      EndIf 
      StopDrawing()
      cw=xpage(300*0.0035)                ; =21cm /2 
      
      ;-{ci dessous coef page largeur divisée par 10 : 
      cw=xpage(300*0.0035)                ; =21cm /2 
      
      ch=ypage(425*0.035)                ; =29.7cm /2 
      rayon=xpage((rayonpixel*0.035)/Sqr(rc))      ;rayon en cm
      grille=xpage((grillepixel*0.0035)/Sqr(rc))
      
      ;-{ci dessous coef dessin grille page divisée par 10 : 
      grille=xpage((grillepixel*0.0035)/Sqr(rc))
      
      tfont=rayon/37  ;taille police proportionelle a l'echelle de la page a imprimer
      DC = StartDrawing(PrinterOutput()) 
      If DC   
        DrawingMode(#PB_2DDrawing_Outlined | #PB_2DDrawing_XOr)
        DrawingMode(4|1)
        If GetGadgetState(8)=1
          dessin()               
        EndIf
        If GetGadgetState(9)=1
          papier(4,3,2)              
        EndIf
        StopDrawing()
      EndIf
    EndIf
    StopPrinting()
  EndIf
EndProcedure
Procedure papier(wr,wb,wn)
  x=cw:y=ch
  x1=cw*2:y1=ch*2
  u=0
  cldm=RGB(175,125,5)  ;  RGB(255,0,0)
  clcm=RGB(175,125,5)  ;  RGB(0,0,255)
  clmm=RGB(175,125,5)  ;  jaune  
  Ligne(x,y1, x,0-y1,wr,cldm)     ;axe v
  Ligne(x1,y, 0-x1,y,wr,cldm)     ;axe h
  For i=1 To cw 
    u=u+(grille/100)
    If i=0 Or i-Int(i/50)*50=0 Or i-Int(i/100)*100=0 Or i-Int(i/150)*150=0 Or i-Int(i/200)*200=0
      Ligne(x+u,y, x+u,y1,wr,cldm)     
      Ligne(x,y+u, x1,y+u,wr,cldm)     
      Ligne(x-u,y, x-u,y1,wr,cldm)     
      Ligne(x,y+u, 0-x1,y+u,wr,cldm)   
      Ligne(x+u,y, x+u,0-y1,wr,cldm)   
      Ligne(x,y-u, x1,y-u,wr,cldm)     
      Ligne(x-u,y, x-u,0-y1,wr,cldm)   
      Ligne(x,y-u, 0-x1,y-u,wr,cldm)   
    ElseIf i-Int(i/10)*10=0 
      Ligne(x+u,y, x+u,y1,wb,clcm)    
      Ligne(x,y+u, x1,y+u,wb,clcm)    
      Ligne(x-u,y, x-u,y1,wb,clcm)    
      Ligne(x,y+u, 0-x1,y+u,wb,clcm)  
      Ligne(x+u,y, x+u,0-y1,wb,clcm)  
      Ligne(x,y-u, x1,y-u,wb,clcm)    
      Ligne(x-u,y, x-u,0-y1,wb,clcm)  
      Ligne(x,y-u, 0-x1,y-u,wb,clcm)  
    ElseIf i-Int(i/5)*5=0 
      Ligne(x+u,y, x+u,y1,wn,clcm)    
      Ligne(x,y+u, x1,y+u,wn,clcm)    
      Ligne(x-u,y, x-u,y1,wn,clcm)    
      Ligne(x,y+u, 0-x1,y+u,wn,clcm)  
      Ligne(x+u,y, x+u,0-y1,wn,clcm)  
      Ligne(x,y-u, x1,y-u,wn,clcm)    
      Ligne(x-u,y, x-u,0-y1,wn,clcm)  
      Ligne(x,y-u, 0-x1,y-u,wn,clcm) 
    Else
      Ligne(x+u,y, x+u,y1,0,clmm)    
      Ligne(x,y+u, x1,y+u,0,clmm)    
      Ligne(x-u,y, x-u,y1,0,clmm)    
      Ligne(x,y+u, 0-x1,y+u,0,clmm)  
      Ligne(x+u,y, x+u,0-y1,0,clmm)  
      Ligne(x,y-u, x1,y-u,0,clmm)    
      Ligne(x-u,y, x-u,0-y1,0,clmm)  
      Ligne(x,y-u, 0-x1,y-u,0,clmm)  
    EndIf
  Next
EndProcedure
Procedure dessin()
  FillArea(0,0,RGB(255,255,255), RGB(255,255,255))
  DrawingMode(1)
  FrontColor(RGB(255, 255, 255))
  For n =0 To 355 Step 5 
    If n>95   ; n+90(Depart du 0) et 1.1 calage graduation avec et les nombres 
      x = cw + (rayon-tfont*3) * Sin(((n+90)+1.1) / 180 * #PI)
      y = ch + (rayon-tfont*3) * Cos(((n+90)+1.1) / 180 * #PI)
    Else
      x = cw + (rayon-tfont*3) * Sin(((n+90)+0.55) / 180 * #PI)
      y = ch + (rayon-tfont*3) * Cos(((n+90)+0.55) / 180 * #PI)
    EndIf
    DrawRText(DC,x,y,Str(n),"Arial",n+270,tfont) ; 
  Next n 
  For o = 0 To 359 Step 30
    x = cw+ rayon * Sin(o / 180 * #PI)
    y = ch+ rayon * Cos(o / 180 * #PI)
    xx = cw+ (rayon-rayon/17) * Sin(o / 180 * #PI)
    yy = ch+ (rayon-rayon/17) * Cos(o / 180 * #PI)
    LineXY(xx, yy , x, y,RGB(0, 0, 0))
    x = cw+ (rayon-rayon/11) * Sin(o / 180 * #PI)
    y = ch+ (rayon-rayon/11) * Cos(o / 180 * #PI)
    xx = cw+ (rayon-rayon/3.414213562) * Sin(o / 180 * #PI)
    yy = ch+ (rayon-rayon/3.414213562) * Cos(o / 180 * #PI)
    LineXY(xx, yy , x, y,RGB(0, 0, 0))
    For i = 1 To 29
      If  i = 5 Or  i = 15 Or i = 25
        x = cw+ rayon * Sin((i + o) / 180 * #PI)
        y =ch+ rayon * Cos((i + o) / 180 * #PI)
        xx = cw + (rayon-rayon/22) * Sin((i + o) / 180 * #PI)
        yy = ch + (rayon-rayon/22) * Cos((i + o) / 180 * #PI)
        LineXY(x, y , xx, yy, RGB(0, 0, 0))
      ElseIf  i = 10 Or i = 20
        x = cw + rayon * Sin((i + o) / 180 * #PI)
        y = ch+ rayon * Cos((i + o) / 180 * #PI)
        xx = cw+ (rayon - rayon/16) * Sin((i + o) / 180 * #PI)
        yy = ch+ (rayon - rayon/16) * Cos((i + o) / 180 * #PI)
        LineXY(xx, yy , x, y,RGB(0, 0, 0))
      Else
        x = cw+rayon * Sin((i + o) / 180 * #PI)
        y = ch+rayon * Cos((i + o) / 180 * #PI)
        xx = cw+(rayon - rayon/33) * Sin((i + o) / 180 * #PI)
        yy = ch+(rayon - rayon/33) * Cos((i + o) / 180 * #PI)
        LineXY(xx, yy , x, y,RGB(0, 0, 0))
      EndIf
    Next i
  Next o
  LineXY(cw-rayon/20, ch , cw+rayon/20, ch,RGB(0, 0, 0))
  LineXY(cw, ch-rayon/20 , cw, ch+rayon/20,RGB(0, 0, 0))
  DrawingMode(4)
  Ellipse(cw,ch, rayon, rayon, RGB(0,0,0))
  Ellipse(cw,ch, rayon/Sqr(2), rayon/Sqr(2), RGB(0,0,0))
EndProcedure

Procedure MakeWinScreenshot(ImageNr,hwnd,Width,Height) 
  ;######  appel place  en amont pour l' utilisation de       ######################
  ;######  la routine de sauvegarde du contenu de la fenetre  ######################
  ; hShotWindow = FindWindow_(0,"Rapporteur")   ; enter the right name here!
  ; If hShotWindow 
  ; hWinBmp  = MakeWinScreenshot(0,hShotWindow, wlargeur, whauteur) 
  ; ImageGadget(2,0,0, wlargeur, whauteur, hWinBmp) 
  ; EndIf 
  ;#####realisee par l'auteur cd dessous a qui j'adresse aussi mes remerciements ###
  ; Auteur: Danilo (updated for PB 4.00 by Andre)
  ; Date: 22. April 2003
  hImage = CreateImage(ImageNr,Width,Height) 
  hdc = StartDrawing(ImageOutput(ImageNr)) 
  BitBlt_(hdc,0,0,Width,Height,GetDC_(hwnd),0,0,#SRCCOPY) 
  StopDrawing() 
  ProcedureReturn hImage 
EndProcedure 



Procedure xpage(x.f)
  x = x * (PrinterPageWidth()/21) ; 21cm A4
  ProcedureReturn x
EndProcedure


Procedure ypage(x.f)
  x = x * (PrinterPageHeight()/29.7) ; 29,7cm A4
  ProcedureReturn x
EndProcedure

Avatar de l’utilisateur
omega
Messages : 626
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Imprimer un ticket de caisse

Message par omega »

Bonjour Kernadec

Merci pour ce code, mais j'avoue que je n'ai pas bien compris, est-ce que ce code permet d'imprimer un ticket de caisse? est-ce que vous pouvez me montrer comment imprimer juste une ligne de texte sur ce type d'imprimante? comme par exemple: " Hello Word!"?

J'ai exécuté le code et j'ai obtenu un carré (box vertical coloré) imprimé sur fichier PDF en mémoire... mais pas de texte. J'aurais souhaité voir du texte aligné colonne1 colonne2 etc comme par exemple:

en col1: DESIGNATION col2: Qté col3:Pu col4: Mnt

(2ou 3lignes) +la ligne Total mnt voir échantillon ici: http://www.sarlminial.com/ticket.png

Je n'ai pas l'imprimante caisse pour l'instant, mon client va me la ramener cet après midi, donc, pour l'instant je fais des tests en mémoire (pdf)


Merci
Win7 (x64) 64 bits Pb 5.72
Avatar de l’utilisateur
kernadec
Messages : 1594
Inscription : ven. 25/avr./2008 11:14

Re: Imprimer un ticket de caisse

Message par kernadec »

c' est vrai pardon, c'est ma cuisine :oops:
mais bon ca devrait le faire, j'ai pas fait de modif pour l'affichage fenêtre pour le coup :mrgreen:

dans le code mise en commentaires ligne 195 ; papier(4,3,2)
juste après tu ajoute ce bout de code

Code : Tout sélectionner

 ; papier(4,3,2) 
          For i=150 To 3000 Step 150
            DrawRText(DC,150 , i  ," alpha omega  alpha omega " ,"Arial",n,tfont) ; 
          Next i  
Cordialement
Avatar de l’utilisateur
omega
Messages : 626
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Imprimer un ticket de caisse

Message par omega »

Merci encore Kernadec

ça avance bien mais...il y a un MAIS:

1. Comment faire pour supprimer le rapporteur (ainsi que le bouton Rapporteur)?
2. Comment faire pour supprimer le Box coloré??

J'ai essayé mais j'ai pas trouvé comment les supprimer

Merci beaucoup Kernadec, c'est vraiment très gentil
Win7 (x64) 64 bits Pb 5.72
Avatar de l’utilisateur
kernadec
Messages : 1594
Inscription : ven. 25/avr./2008 11:14

Re: Imprimer un ticket de caisse

Message par kernadec »

désolé @omega j'ai pas le temps pour écrire ce que tu aimerais bien sur je t'ai fait ça à l'arrache
c'est pour cela que j'ai pris ce vieux code pour ne pas avoir a en faire un :mrgreen:
je t'ai épargné le calcul de l' échelle d' impression qu 'il te faudra gérer j'ai mis dans la boucle une hauteur de 3000
avec un step de 150 il faut gérer cela avec le format de page impression c'est dans la doc à "Printer index"

maintenant en l'étudiant tu devrais t'en sortir
dans ce code tu récupère les procédures dont tu as besoin pour gérer ton impression
après récupère également la déclaration des variables

à toi de faire la fenêtre de gestion de ton ticket de caisse
après un appel à la procédure impression avec un ptit bouton et le tour est joué :wink:

Global cw.l,ch.l,rayon.l,rayonpixel.d,tfont.l,curseur.l,curseur1.l,x.d,y.d,x1.d,y1.d
Global wlargeur.l, whauteur.l,ImageNr,hdc,DC,r.RECT,rc,grille.d,grillepixel.d,u.d
Global Width.l,Color.l,wr.l,wb.l,cldm.l,clcm.l,clmm.l,wr,wb,wn


impression()
DrawRText(DC.l,x,y,Text.s,fFont.s,fangle.l,fHeight) il faudras lui ajouter une variable couleur en parametre
ypage(x.f)
xpage(x.f)

cordialement

ps: il y un moment je voulais me faire un programme pour les ticket de stationnement
mais il faut une imprimante thermique avec un type de papier donc j'ai laissé tomber
car l'idée malhonnête m'avait tenté de faire des économies de parcmètres :mrgreen: :mrgreen:
Marc56
Messages : 2147
Inscription : sam. 08/févr./2014 15:19

Re: Imprimer un ticket de caisse

Message par Marc56 »

Pas certain que tu puisses utiliser les fonctions d'impression de PB pour une imprimante de caisse. En effet, celle-ci utilisent souvent l'impression ligne par ligne en direct (pour des raisons légales: chaque article doit être enregistré à son passage. Si on se trompe, on fait alors une transaction inverse sur l'article).
Les fonctions PB envoient tout le texte une fois la commande StopPrinting()
L'impression ligne par ligne se faisait très facilement avec les anciennes versions de Basic (commande LPRINT)
La plupart des imprimantes de caisse utilisent le mode Epson ESC/POS (voir post Falsam).
Ce n'est pas très difficile, il suffit juste d'insérer les codes ESC/POS dans les chaines.
Enfin, tu verra quand tu recevra l'imprimante.
:wink:
Avatar de l’utilisateur
omega
Messages : 626
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Imprimer un ticket de caisse

Message par omega »

Merci Kernadec.

Bonjour Marc56

Justement, c'est ce que je cherche à savoir, comment utiliser les commandes Esc/Pos? J'ai cherché partout, y compris des tutos, mais maheureusement aucun exemple n'est proposé. Il me faut d'abords la syntaxe qui permet d'imprimer du text positionné (col,ligne) ( à savoir largeur du papier=58mm)

Tout simplement

je cherche juste un exemple

merci
Win7 (x64) 64 bits Pb 5.72
Marc56
Messages : 2147
Inscription : sam. 08/févr./2014 15:19

Re: Imprimer un ticket de caisse

Message par Marc56 »

Bonjour,

Il faudra que tu commences par regarder comment est configurée l'imprimante (et ne pas la changer)
Pour cela, il faut lui faire sortir sa page de configuration. cela se fait en général en tenant le bouton FF (form feed (= éjection page)) ou LF ou n'importe quel autre bouton principal pendant qu'on l'allume.

Si elle est configurée en ESC-POS alors tu l'utiliseras le plus souvent (une fois le driver installé) comme un périphérique série en utilisant la lib serial de PB et en intercalant chaque commande ESC en début de ligne. (OpenSerial ..., WriteSerialPortString ... CloseSerial)

Une commande ESC est le caractère Chr(27) suivi d'un caractère à prendre dans le tableau.
Ces codes servent par exemple à changer de taille, à éjecter, à couper le ticket etc
Donc tes lignes seront du type: WriteSerialPortString(0, Chr(27) + Chr(...) + "Total = ")

À la base, il suffit d'utiliser une fonte non-proportionnelle pour aligner le texte.
Pour imprimer des codes barre, il faut se référer à la doc.

(je n'ai pas ce type d'imprimante, donc c'est juste le principe théorique. On doit pouvoir tester en utilisant un driver d'imprimante caisse + un redirecteur de port serie + une sortie virtuelle (fineprint))
:wink:
Avatar de l’utilisateur
omega
Messages : 626
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Imprimer un ticket de caisse

Message par omega »

J'ai paramétré l'imprimante, j'ai utilisé la méthode graphique classique, et finalement ça marche, mais j'aurais quand même préféré utiliser (ou du moins savoir) utiliser les commandes Esc/Pos...

Merci à tous
Win7 (x64) 64 bits Pb 5.72
Répondre