IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Delphi Discussion :

imprimer sur imprimante etiquette(code à barres)


Sujet :

Delphi

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 945
    Points : 123
    Points
    123
    Par défaut imprimer sur imprimante etiquette(code à barres)
    Bonjour à tous,
    j'ai une application de gestion de supperette et pour les besoins de l'utilisateur j'essaye d'imprimer le code à bar d'un produit qui marche trés bien sur une imprimante ticket ou toutes autres imprimantes. Sauf que j'arrive à imprimer sur une imprimante etiquette avec les démonsions(height=1.5 cm/width=2 cm).

  2. #2
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    Quelle est la question?
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 945
    Points : 123
    Points
    123
    Par défaut
    je m’excuse j'ai oublié le 'pas'. je repose ma question.

    voila,
    j'ai une application de gestion de supperette et pour les besoins de l'utilisateur j'essaye d'imprimer le code à bar d'un produit qui marche trés bien sur une imprimante ticket ou toutes autres imprimantes. Sauf que j'arrive pas à imprimer sur une imprimante etiquette avec les démonsions(height=1.5 cm/width=2 cm).

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Citation Envoyé par chekkal Voir le message
    Sauf que je n'arrive pas à imprimer sur une imprimante etiquette avec les démonsions(height=1.5 cm/width=2 cm).
    Il n'y a toujours pas de question mais l'on comprends mieux le sujet !
    J'ai justement bossé sur l'impression d'étiquette, il y a un tas de format de planche d'étiquette pré-découpée ou disposée en ruban

    Pourquoi ces dimensions te pose problème ?
    Quel outil utilises-tu ? QuickReport ? RaveReport ? Printer.Canvas ?
    Quel lib de CodeBarre ? une Font ? un dessin manuel ?

    Il faut savoir qu'un code barre a une taille minimale en fonction de la précision d'impression,
    cette taille s'exprime en pixel, c'est le nombre de barre noire et blanche pour composer la chaine plus les bordures
    2 cm = 0.787 inch
    à 300dpi -> 236 pixels possibles
    Par exemple pour du Code128C, on peut estimer la taille minimale
    cela fait 236-start-checksum-end = 201, à 11 pixel par caractère, cela fait une chaine au plus de 18 caractères !

    Evidemment, tu n'imprime pas sur toute la largeur en laissant un petit de marge,
    ce nombre se réduit probablement vers 16 caractères !
    Si tu as en plus du texte à mettre à côté, cela devient difficile
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 945
    Points : 123
    Points
    123
    Par défaut
    bonjour @shailetroll,

    j'imprime avec printer.canvas, j'ai testé avec imprimante ticket, il imprime bien en haut de la page (left=0,top=0), mais avec une imprimante étiquette il saut plusieurs étiquette avant d'imprimer et en plus le code à bar apparait à couper.

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    C'est probablement un mauvais calibrage de ton imprimante ou un mauvais choix de papier,
    une imprimante rouleau peut gérer des étiquettes en paysage ou en portrait, cela change énormément !
    Cela se traduit par une confusion largeur\longueur, par exemple, tu penses imprimer du 1,5x2 en paysage alors que ton imprimante est configuré pour du 2x5 en portrait, facile a reperer le code barre n'est pas dans le bon sens

    Pour ton calcul dans le Canvas, tu récupères bien via GetDeviceCaps les DPI horizontal ET vertical (LOGPIXELSX et LOGPIXELSY)
    Vérifie aussi les marges PHYSICALOFFSETX et PHYSICALOFFSETY

    Difficile de savoir, les imprimantes c'est bien l'un des trucs les plus capricieux qui se résout par tâtonnement
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 945
    Points : 123
    Points
    123
    Par défaut
    j'utilise ces deux fonctions pour récupérer les capacités de l'imprimante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function Rx(const aValue :Extended) :integer;
    begin
      Result := Trunc(aValue *
                      GetDeviceCaps(Printer.Handle, HORZRES) /
                      GetDeviceCaps(Printer.Handle, HORZSIZE));
    end;
     
    function Ry(const aValue :Extended) :integer;
    begin
      Result := Trunc(aValue *
                      GetDeviceCaps(Printer.Handle, VERTRES) /
                      GetDeviceCaps(Printer.Handle, VERTSIZE));
    end;
    mais je ne sais pas pourquoi il saute plusieurs étiquettes avant d'imprimer

  8. #8
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 664
    Points : 6 967
    Points
    6 967
    Par défaut
    Citation Envoyé par chekkal Voir le message
    mais je ne sais pas pourquoi il saute plusieurs étiquettes avant d'imprimer
    Il n'y a pas une doc avec cette imprimante ?
    Moi, je travaille avec des TEC, et j'ai une liste d'instructions que je peux lui envoyer pour lui dire de faire exactement ce que je veux.
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  9. #9
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 945
    Points : 123
    Points
    123
    Par défaut
    bonjour @lung et merci pour ta réponse,

    si tu peut me donner un exemple des instructions que tu utilise ça serait génial, mon problème c'est que l'impression ce fait sur la première étiquette mais sur la troisième ou la quatrième étiquette.

    imprimante: Aclas PPx7

  10. #10
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 664
    Points : 6 967
    Points
    6 967
    Par défaut
    Citation Envoyé par chekkal Voir le message
    si tu peut me donner un exemple des instructions que tu utilise ça serait génial, mon problème c'est que l'impression ce fait sur la première étiquette mais sur la troisième ou la quatrième étiquette.
    Je peux, mais ça ne te servira à rien vu que c'est des instructions spécifiques aux imprimantes TEC (et peut-être même à certains modèles). J'ai un collègue qui a travaillé avec des zebra, et c'était totalement différent.
    Voici un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    {DLONGUEUR,1200,LNGECH|}
    {AX;+000,+000,+00|}
    {AY;+00,0|}
    {C|}
    {XR;0010,0050,1350,0055,B|}
    {PC001;0190,0130,10,10,C,00,B|}{RC001;Groupe|}
    {PV01;0450,0140,0065,0060,A,00,B|}{RV01;PREPARATION|}
    {XR;0010,0160,1350,0165,B|}
    {PV02;0040,0265,0095,0100,A,00,B|}{RV02;MAD DATEMAD|}
    {PV03;0040,0335,0060,0060,A,00,B|}{RV03;ADR1|}
    {PV05;0040,0385,0030,0030,A,00,B|}{RV05;ADR2|}
    {PV06;0040,0460,0060,0060,A,00,B|}{RV06;ADR5|}
    {XR;0010,0480,1350,0482,B|}
    {PV09;0060,0580,0095,0085,A,00,B|}{RV09;NUMCDECLT|}
    {XR;0010,0610,1350,0612,B|}
    {PV08;0100,0840,0250,0250,A,00,B|}{RV08;FINITPEINT|}
    {PV10;0050,0960,0110,0110,A,00,B|}{RV10;COULEURLIGNE1|}
    {PV11;0050,1080,0110,0110,A,00,B|}{RV11;COULEURLIGNE2|}
    {XR;0010,1100,1350,1105,B|}
    {XB10;0130,1130,A,3,07,0,0400,+0000000000,000,1,00|}{RB10;>6a1234567890|}
    {XR;0010,1580,1350,1585,B|}
    {PV07;0080,1650,0055,0060,A,00,B|}{RV07;TITRE|}
    {PC003;0050,1705,10,10,Q,00,B|}{RC003;LIGNE1|}
    {PC004;0050,1745,10,10,Q,00,B|}{RC004;LIGNE2|}
    {PC005;0050,1785,10,10,Q,00,B|}{RC005;LIGNE3|}
    {PC006;0050,1825,10,10,Q,00,B|}{RC006;LIGNE4|}
    {PC007;0050,1865,10,10,Q,00,B|}{RC007;LIGNE5|}
    {LC;0690,1680,0690,1790,0,2,000|}
    {XR;0010,1890,1350,1895,B|}
    {PC025;0040,1925,10,10,Q,00,B|}{RC025;DATEHEUREOPEAT|}
    {PC026;0040,1965,10,10,Q,00,B|}{RC026;POIDS|}
    {XR;0010,1980,1350,1985,B|}
    DETAILPRODUITS
    {XS;I,0001,0010C5200|}
    {U1;0140|}
    Ce que je voulais dire, c'est qu'il faudrait regarder du côté du constructeur (sur son site, ou autre) pour voir s'il ne propose pas une documentation correspondante.
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  11. #11
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 945
    Points : 123
    Points
    123
    Par défaut
    rebonjour @lung,

    peut être j'ai raté une étape sur l'utilisation des 'canvas', mais je crois que si je fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     with printer do
    begin
            begindoc;
            canvas.textout(0,0,'lung est simpa');:mrgreen:
            endoc;       
     
    end;
    ça veut dire aller à la position left=0;top=0 est écrire le texte non?
    les coordonnées en pixel sont pareil pour n'importe qu'elle imprimante non?

    merci pour tout éclaircissement.

  12. #12
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 695
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 695
    Points : 13 131
    Points
    13 131
    Par défaut
    Comme l'a déjà dit Shai : problème de taille et d'orientation du papier, de marges ou autres.

    Citation Envoyé par chekkal Voir le message
    imprimante: Aclas PPx7
    Je vois pas trop comment tu veux imprimer des étiquettes sur une imprimante de caisse
    De plus, elles utilisent du papier thermique qui supporte très très mal la lumière. En quelques jours ton étiquette sera redevenue blanche/illisible

  13. #13
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 945
    Points : 123
    Points
    123
    Par défaut
    @ Andnotor
    je m'excuse le nom de l'imprimante est TSC.

    mais ça répond pas à ma question sur le canvas

  14. #14
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 695
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 695
    Points : 13 131
    Points
    13 131
    Par défaut
    Citation Envoyé par chekkal Voir le message
    mais ça répond pas à ma question sur le canvas
    Le point [0,0] est toujours en haut à gauche. Descendre sur la page est en positif en pixel mais en négatif en mm (MM_LOMETRIC, MM_HIMETRIC).

    Dommage que tu ne veuilles pas contrôler la configuration de l'imprimante, taille du papier et orientation. Plusieurs étiquettes vierges avant l'impression est pour moi typique d'une taille d'étiquette trop grande avec une impression tête en bas (180°).
    Quelle taille de papier est renvoyée par GetDeviceCaps ?

Discussions similaires

  1. Réponses: 0
    Dernier message: 03/04/2013, 19h34
  2. je n'arrive pas à imprimer sur imprimante reseau
    Par Dades dans le forum Administration
    Réponses: 2
    Dernier message: 16/09/2010, 12h41
  3. Réponses: 6
    Dernier message: 07/04/2008, 17h24
  4. Imprimer sur Imprimante ticket
    Par clo5000 dans le forum Access
    Réponses: 5
    Dernier message: 08/03/2008, 07h44
  5. bouton imprimer sur imprimante precise!
    Par NoobX dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 10/10/2005, 11h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo