1. #1
    Candidat au Club
    Homme Profil pro
    Ouvrier
    Inscrit en
    août 2011
    Messages
    19
    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 : 19
    Points : 4
    Points
    4

    Par défaut Qt - > Impression d'un ticket de caisse - Problème de marges.

    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 : 54
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 averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mars 2015
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : mars 2015
    Messages : 222
    Points : 349
    Points
    349

    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
    Candidat au Club
    Homme Profil pro
    Ouvrier
    Inscrit en
    août 2011
    Messages
    19
    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 : 19
    Points : 4
    Points
    4

    Par défaut

    Merci je test de suite

  4. #4
    Candidat au Club
    Homme Profil pro
    Ouvrier
    Inscrit en
    août 2011
    Messages
    19
    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 : 19
    Points : 4
    Points
    4

    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 averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mars 2015
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : mars 2015
    Messages : 222
    Points : 349
    Points
    349

    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
    Candidat au Club
    Homme Profil pro
    Ouvrier
    Inscrit en
    août 2011
    Messages
    19
    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 : 19
    Points : 4
    Points
    4

    Par défaut

    Citation Envoyé par stephane78l Voir le message
    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"));

    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 averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mars 2015
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : mars 2015
    Messages : 222
    Points : 349
    Points
    349

    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
    Candidat au Club
    Homme Profil pro
    Ouvrier
    Inscrit en
    août 2011
    Messages
    19
    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 : 19
    Points : 4
    Points
    4

    Par défaut

    Citation Envoyé par stephane78l Voir le message
    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...
    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 averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mars 2015
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : mars 2015
    Messages : 222
    Points : 349
    Points
    349

    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....

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