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 :

Générer un fichier PDF avec QPrint


Sujet :

Qt

  1. #1
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    276
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 276
    Points : 83
    Points
    83
    Par défaut Générer un fichier PDF avec QPrint
    Bonjour tout le monde,
    J'ai des données récupérées dans un QStringList que je veux mettre dans un fichier PDF. j'utilise le code suivant :
    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    if(pdfFile.isEmpty())
        return;
     
    int nbColonnes = header.size();
    int nbDonnees = donnees.size();
     
    QPrinter printer; //The QPrinter class is a paint device that paints on a printer
    printer.setOutputFormat(QPrinter::PdfFormat); 
    printer.setOrientation(QPrinter::Landscape); 
    printer.setPageSize(QPrinter::A4);
     
    //this can be also NativeFormat or PostScriptFormat
    //for details, read QPrinter class documentation
    printer.setOutputFileName(pdfFile);
    QPainter painter; //The QPainter class performs painting on widgets and other paint devices (such as QPrinter)
     
    //here we start painting to the printer
    if (!painter.begin(&printer))
    {
        QMessageBox::critical(this, NAME_APP, "Fichier pdf non crée");
         return;
    }
     
    int x = 0;
    int y = 0;  
     
    QRect r;
    for (int k=0; k<nbColonnes; k++)
    {
        // bilog-mh cf. TL-20819 : Paraméterer largeur des colonnes à afficher
        if (k==0)
            colonne_width = 70;
        else if (k==1)
            colonne_width = 130;
        else if (k==2)
            colonne_width = 150;
        else if (k==3)
            colonne_width = 700;
     
        QRect required = QRect(); //this represent the required rectangled size
        r = QRect(x, 0, colonne_width, 60); //this represent our calculated rectangle size
        painter.drawRect(r);
        //now we insert each string of the list into the rectangle
        QString text = header.at(k);
        //now we draw the text into the given rectangle, using word wrap option.
        //the last parameter indicates a rectangle in which the text should be enclosed         
        painter.drawText(r, Qt::AlignCenter | Qt::TextWordWrap, text, &required);
        //if the calculated height is not enought for drawing the text, we should redraw all rectangles
         x += colonne_width;              
    }
     
    x = 0;
    for (int k=0; k<nbDonnees; k++)
    {
        // bilog-mh cf. TL-20819 : Paraméterer largeur des colonnes à afficher
        switch ((k+1)%4)
        {
        case 1 :
                colonne_width = 70;
                break;
        case 2:
                colonne_width = 130;
                break;
        case 3 :
                colonne_width = 150;
                break;
        case 0 :
                colonne_width = 700;
                break;
        }
     
        if (k%nbColonnes == 0)
        {
            // bilog-mh cf. TL-20819 : si première ligne de données alors on retient le height de la ligne header
            if (k== 0)
                y += 60;
            else
                y += 200;
            x = 0;
        }
     
        QRect required = QRect(); //this represent the required rectangled size
        r = QRect(x, y, colonne_width, 200); //this represent our calculated rectangle size
        painter.drawRect(r);
        //now we insert each string of the list into the rectangle
        QString txt = donnees.at(k);        
        //now we draw the text into the given rectangle, using word wrap option.
        //the last parameter indicates a rectangle in which the text should be enclosed         
        painter.drawText(r, Qt::AlignJustify | Qt::TextWordWrap, txt, &required);
     
         x += colonne_width;         
     
        // bilog-mh cf. TL-20819 : si on atteint la fin de page, on insère un nouvelle page
        if (y > printer.height())
            printer.newPage();
    }
    painter.end();
    Le problème c'est que les données ne sont affichées que dans la 1ère page et les autres pages sont vides. Le printer.newPage() crée bien les pages mais elles sont vides.

    Est ce que quelqu'un pourrait m'aider à résoudre ce problème ?
    Merci d'avance pour votre collaboration
    Bien cordialement

  2. #2
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    276
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 276
    Points : 83
    Points
    83
    Par défaut
    La solution est de rajouter avant de créer la nouvelle page.

    Esprérant que ça pourrait aider quelqu'un d'autre.

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 20/09/2012, 13h13
  2. Comment générer un fichier pdf avec asp et c#
    Par Berenger Nana dans le forum C#
    Réponses: 3
    Dernier message: 30/06/2011, 11h49
  3. Générer plusieurs fichiers pdf avec pdflatex
    Par napo_lytech dans le forum Editeurs / Outils
    Réponses: 16
    Dernier message: 11/11/2010, 17h31
  4. Générer un fichier PDF avec gtPDFEngine
    Par Gwenou dans le forum Composants VCL
    Réponses: 2
    Dernier message: 18/02/2009, 14h10
  5. Générer un fichier pdf ou doc avec du pl/sql
    Par felosa dans le forum PL/SQL
    Réponses: 5
    Dernier message: 19/09/2008, 18h34

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