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

Qt Discussion :

Impression d'un ticket de caisse - marges incorrectes


Sujet :

Qt

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ouvrier
    Inscrit en
    Août 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ouvrier
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2011
    Messages : 20
    Points : 8
    Points
    8
    Par défaut Impression d'un ticket de caisse - marges incorrectes
    Bonjour,

    J'ai un problème avec Qt lors de l'impression d'un ticket de caisse. Impossible de supprimer les marges.

    Nom : Ticket.png
Affichages : 4182
Taille : 132,8 Ko

    Normalement, cela devrait sortir comme sur le ticket n°2. J'ai imprimé un test depuis un fichier texte le ticket n°3, pas de souci

    Mais avec mon programme Qt, c'est le ticket n°1 qui sort. Et c'est pas beau ... oui je sais ... Aucun paramètre de l'imprimante me permet de gérer ces marges. Je comprends pas pourquoi.

    Voici le morceau de prog :
    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
     
    QPrinter printer;
                QTextDocument doc;
                QString TE = ui->plainTextEdit_6->toPlainText();
                doc.setHtml(TE);
     
                 QPrintDialog *dialog = new QPrintDialog(&printer, this);
                 dialog->setWindowTitle("Print Document");
     
                 if (ui->plainTextEdit_6->textCursor().hasSelection())
                     dialog->addEnabledOption(QAbstractPrintDialog::PrintSelection);
     
                 if (dialog->exec() == QDialog::Accepted)
                     doc.print(&printer);
                     return;
    L'imprimante ticket peut avoir 48 caractères par ligne. ( 80mm )

    J'ai fait un autre code et c'est pareil. Le voici :
    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
    36
    37
    38
    39
    40
    41
    42
    43
     
    QTextStream stream3( &toPrint3, QIODevice::WriteOnly );
     
                    stream.setCodec(QTextCodec::codecForName("ISO-8859-1"));
                    stream
     
                    << "BAR / RESTAURATION RAPIDE"                                            << endl << endl
                    << "                CHEZ PAM'               "                                            << endl
                    << "            31, RUE GAMBETTA            "                                            << endl
                    << "            71230 ST VALLIER            "                                                                      << endl
                    << "       Telephone : 00.00.00.00.00       "                                                                    << endl << endl
     
                    << " Le " << date7 << " - " << temps7                                                                          << endl << endl
     
                    << " Ref : " << temps7C << date7B << temps7A << date7C << temps7B << date7A              << endl
                    << " Commande : " << ui->spinBox_28->text()                                      << endl << endl
                    << ui->plainTextEdit_6->toPlainText()                                                      << endl << endl;
                    << "  TOTAL COMMANDE : " << ui->doubleSpinBox->text()                                    << endl
                    << "           REGLE : " << ui->montantReglerEspeces->text()                             << endl
                    << "           RENDU : " << ui->totalRendu->text()                                       << endl << endl
     
                    << "       Ticket client a presenter        "                                            << endl
                    << "       Valable ce jour uniquement       "                                            << endl << endl
     
                    << "                CHEZ PAM'               "                                            << endl
                    << "        vous remercie, A bientot        "                                            << endl
                    << "             BON  APPETIT               "                                            << endl << endl;
     
            QPrinter printer3;
            printer3.setPageMargins(1, 1, 1, 1, QPrinter::Millimeter);
     
             QPrintDialog dialog3( &printer3, this );  // Phrase a retirer pour que l'impression se lance sans validation
     
             if( dialog3.exec() == QDialog::Accepted )// Phrase a retirer pour que l'impression se lance sans validation
              {                                     // Phrase a retirer pour que l'impression se lance sans validation
                    QTextDocument document3( toPrint3 );
                    QFont newFont3(document3.defaultFont());
                    newFont3.setFamily("Courier New");
                    newFont3.setPixelSize(12);
                    newFont3.setBold(30); //75
                    document3.setDefaultFont(newFont3);
                    document3.print( &printer3 );
              }                                     // Phrase a retirer pour que l'impression se lance sans validation

  2. #2
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2015
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Mars 2015
    Messages : 294
    Points : 558
    Points
    558
    Par défaut
    Bonjour, moi j'avais fait un petit logiciel qui imprime des factures et je n'avais pas fait comme toi:
    il faut declarer un QPainter et faire begin et des drawtext pour dessiner ton texte et finir par end(),par exemple comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    QPrinter printer;
    //init printer
     
    QPainter paint;
    paint.begin(&printer);
    paint.drawText(10,20,QString("BAR / RESTAURATION RAPIDE")); 
    //etc....
    paint.end();

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Ouvrier
    Inscrit en
    Août 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ouvrier
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2011
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    Merci je test de suite

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Ouvrier
    Inscrit en
    Août 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ouvrier
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2011
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par stephane78l Voir le message
    Bonjour, moi j'avais fait un petit logiciel qui imprime des factures et je n'avais pas fait comme toi:
    il faut declarer un QPainter et faire begin et des drawtext pour dessiner ton texte et finir par end(),par exemple comme ceci :
    Stephane78l . Ca fonctionne bien pour une ligne en effet, mais comment je fais pour plusieurs lignes car si j'en met plusieurs le teste se superpose sur le précédent
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
                     QPrinter printer;
                     //init printer
     
                     QPainter paint;
                     paint.begin(&printer);
                     paint.drawText(1,10,QString("BAR / RESTAURATION RAPIDE"));
                     paint.drawText(1,10,QString("123456789123456789123456"));
     
                     //etc....
                     paint.end();

  5. #5
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2015
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Mars 2015
    Messages : 294
    Points : 558
    Points
    558
    Par défaut
    Bonjour tu trouveras la documentation de toutes les classes de Qt sur doc.qt.io, et si tu fais une recherche sur la classe Qpainter tu vas voir le detail de la methode drawText, et donc le premier argument est x et le deuxieme y et ensuite le texte donc si tu veux mettre plusieurs lignes il faut mettre un y différent (les coordonnées sont x en abcisse et y en ordonnée) donc 10 pour la premiere ligne et par exemple 25 ou 20 pour la deuxieme donc ta deuxieme ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    paint.drawText(1,20,QString("123456789123456789123456"));

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Ouvrier
    Inscrit en
    Août 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ouvrier
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2011
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    Je suis d'accord avec toi mais si j'ai un plainTextEdit de plusieurs lignes ca ne fonctionne pas

    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
    QPrinter printer;
                     //init printer
     
                     QPainter paint;
                     paint.begin(&printer);
     
                                    paint.drawText(1, 10,QString("                      BAR / RESTAURATION RAPIDE"));
                                    paint.drawText(1, 25,QString("                                    CHEZ PAM'"));
                                    paint.drawText(1, 40,QString("                              31, RUE GAMBETTA"));
                                    paint.drawText(1, 55,QString("                               71230 ST VALLIER"));
                                    paint.drawText(1, 70,QString("                      TELEPHONE : 03.85.57.22.05"));
                                    paint.drawText(1, 85,QString(""));
                                    paint.drawText(1,100,QString(" Le " + date7 + " - " + temps7));
                                    paint.drawText(1,115,QString(""));
                                    paint.drawText(1,130,QString(" Ref : " + temps7C + date7B + temps7A + date7C + temps7B + date7A ));
                                    paint.drawText(1,145,QString(" Commande : " + ui->spinBox_28->text()));
                                    paint.drawText(1,160,QString(ui->plainTextEdit_2->toPlainText())); // Ici j'ai plusieurs lignes d'articles et cela s'arrête à la fin de la ligne
                                    paint.drawText(1,175,QString(""));
                                    paint.drawText(1,190,QString(""));
                                    paint.drawText(1,205,QString("  TOTAL COMMANDE : " + ui->doubleSpinBox->text()));
                                    paint.drawText(1,220,QString("           REGLE : " + ui->montantReglerEspeces->text()));
                                    paint.drawText(1,235,QString("           RENDU : " + ui->totalRendu->text()));
                                    paint.drawText(1,250,QString(""));
                                    paint.drawText(1,265,QString("                            TICKET CLIENT A PRESENTER"));
                                    paint.drawText(1,280,QString(""));
                                    paint.drawText(1,295,QString("                                    CHEZ PAM'"));
                                    paint.drawText(1,310,QString("                           VOUS REMERCIE, A BIENTOT "));
                                    paint.drawText(1,325,QString("                                   BON  APPETIT"));
     
                     //etc....
                     paint.end();

  7. #7
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2015
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Mars 2015
    Messages : 294
    Points : 558
    Points
    558
    Par défaut
    il faut utiliser la surcharge de drawText avec un QRect au lieu de la position x,y, je pense (regarde la documentation de QPainter sur doc.qt.io) pour dessiner plusieurs lignes...(pour ton plainTextedit)

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Ouvrier
    Inscrit en
    Août 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ouvrier
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2011
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    Je suis en train de la lire pour la comprendre, je ne l'ai jamais utiliser cette fonction, je l'étudie et je reviens vers vous, merci

  9. #9
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2015
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Mars 2015
    Messages : 294
    Points : 558
    Points
    558
    Par défaut
    mais tu as un nombre limité de lignes dans ton plaintextedit ? car cela risque de poser problèmes sinon (aussi car cela c'est pour imprimer une page et le multipage il faut rajouter des choses (jamais fait pour ma part)).sinon apres avoir mis dans toplaintext dans un QString,il faudrait verifier que chaque ligne contient un caractere de saut de ligne '\n' et faire un traitement pour mettre chaque ligne en enlevant le '\n' dans un QStringList et dessiner dans une boucle for ou while de drawText(x,y,QString) tes lignes de ton QStringList,car si tu utilises le drawtext avec un QRect,tu ne sauras peut etre pas combien de lignes tu vas mettre dans ton rectangle....

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Ouvrier
    Inscrit en
    Août 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ouvrier
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2011
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    J'ai trouvé la solution. Bon pas très orthodoxe je vous l'avoue mais elle fonctionne.

    Le principe est simple
    Je créé mes premières lignes d'entête. Chaque ligne est espacée de 15.
    Pour le contenu de la commande, dont le nombre de ligne peut varié selon le nombre d'article, je fais une boucle while de requête SQL
    A chaque ligne trouvée appartenant à la commande en question, j'incrémente 15 au compteur.
    Puis enfin, pour la fin de mon ticket ( Pied de page ) c'est le même principe

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
                     QPrinter printer;
     
                     QPainter paint;
                     paint.begin(&printer);
     
                     QFont f("Courier New");
                     f.setPixelSize(12);
                     f.setBold(75);
                     paint.setFont(f);
     
                     paint.drawText(0, 10,QString("       BAR / RESTAURATION RAPIDE       "));
                     paint.drawText(1, 25,QString("               CHEZ PAM'               "));
                     paint.drawText(1, 40,QString("            31 RUE GAMBETTA            "));
                     paint.drawText(1, 55,QString("           71230  ST VALLIER           "));
                     paint.drawText(1, 70,QString("       TELEPHONE : 03.85.57.22.05      "));
                     paint.drawText(1, 85,QString(""));
                     paint.drawText(1,100,QString(" LE " + date7 + " - " + temps7));
                     paint.drawText(1,115,QString(""));
                     paint.drawText(1,130,QString("      REF : " + temps7C + date7B + temps7A + date7C + temps7B + date7A ));
                     paint.drawText(1,145,QString(" COMMANDE : " + ui->spinBox_28->text()));
                     paint.drawText(1,160,QString(""));
     
                     ui->spinBox_29->setValue(175);
     
                     QSqlQuery query5A_2C;
                     query5A_2C.exec("SELECT * FROM `bd_ardoize`.`commande_en_cours` WHERE `numero_commande` = '0'");
     
                     while (query5A_2C.next())
                         {
                             QString Id = query5A_2C.value(0).toString();
                             QString Designation = query5A_2C.value(1).toString();
     
                             paint.drawText(1,ui->spinBox_29->value(),QString(Designation));
                             ui->spinBox_29->setValue(ui->spinBox_29->value() + 15);
                         }
     
                     ui->spinBox_29->setValue(ui->spinBox_29->value() + 15);
                     paint.drawText(1,ui->spinBox_29->value(),QString("")); // j'aurai pu mettre + 30 mais c'est volontairement que j'ai mis deux fois + 15
                     ui->spinBox_29->setValue(ui->spinBox_29->value() + 15);
                     paint.drawText(1,ui->spinBox_29->value(),QString("       TOTAL COMMANDE : " + ui->doubleSpinBox->text()));
                     ui->spinBox_29->setValue(ui->spinBox_29->value() + 15);
                     paint.drawText(1,ui->spinBox_29->value(),QString("                REGLE : " + ui->montantReglerEspeces->text()));
                     ui->spinBox_29->setValue(ui->spinBox_29->value() + 15);
                     paint.drawText(1,ui->spinBox_29->value(),QString("                RENDU : " + ui->totalRendu->text()));
                     ui->spinBox_29->setValue(ui->spinBox_29->value() + 15);
                     paint.drawText(1,ui->spinBox_29->value(),QString("")); // j'aurai pu mettre + 30 mais c'est volontairement que j'ai mis deux fois + 15
                     ui->spinBox_29->setValue(ui->spinBox_29->value() + 15);
                     paint.drawText(1,ui->spinBox_29->value(),QString("       TICKET CLIENT A PRESENTER       "));
                     ui->spinBox_29->setValue(ui->spinBox_29->value() + 15);
                     paint.drawText(1,ui->spinBox_29->value(),QString("")); // j'aurai pu mettre + 30 mais c'est volontairement que j'ai mis deux fois + 15
                     ui->spinBox_29->setValue(ui->spinBox_29->value() + 15);
                     paint.drawText(1,ui->spinBox_29->value(),QString("               CHEZ PAM'               "));
                     ui->spinBox_29->setValue(ui->spinBox_29->value() + 15);
                     paint.drawText(1,ui->spinBox_29->value(),QString("        VOUS REMERCIE, A BIENTOT       "));
                     ui->spinBox_29->setValue(ui->spinBox_29->value() + 15);
                     paint.drawText(1,ui->spinBox_29->value(),QString("              BON  APPETIT             "));
     
                     paint.end();

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD19] Impressions tickets de caisse
    Par Ravengan dans le forum WinDev
    Réponses: 3
    Dernier message: 09/04/2015, 20h45
  2. [Débutant] Impression de ticket de caisse c# avec imprimante de ticket thermique
    Par didifoot11 dans le forum Développement Windows
    Réponses: 2
    Dernier message: 02/03/2015, 15h10
  3. Impression page php en ticket de caisse
    Par david2511 dans le forum Langage
    Réponses: 4
    Dernier message: 10/09/2013, 21h50
  4. [PHP 5.3] Impression ticket de caisse php/javascript
    Par malamine19 dans le forum Langage
    Réponses: 2
    Dernier message: 12/06/2012, 16h08
  5. Impression avec une imprimante à ticket de caisse
    Par freud dans le forum Langage
    Réponses: 2
    Dernier message: 24/04/2008, 13h50

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