Programmation Qt

Générer un fichier PDF

Objectif : Générer un fichier PDF sous Qt.

Pour cela, on va utiliser :

La classe QPrinter est utilisée normalement pour imprimer. Ici, elle va nous permettre de générer un fichier PDF en fixant le format QPrinter::PdfFormat avec la méthode setOutputFormat() :

QString nomFichier = QFileDialog::getSaveFileName(0, QString::fromUtf8("Générer PDF"), QCoreApplication::applicationDirPath(), "*.pdf");

if (!nomFichier.isEmpty())
{
    if (QFileInfo(nomFichier).suffix().isEmpty())
        nomFichier.append(".pdf");

    QPrinter printer(QPrinter::HighResolution);
    printer.setOutputFormat(QPrinter::PdfFormat);
    printer.setOutputFileName(nomFichier);
    printer.setOrientation(QPrinter::Portrait);
    printer.setPaperSize(QPrinter::A4);
    printer.setPageSize(QPrinter::A4);
    printer.setPageMargins(15,15,15,15,QPrinter::Millimeter);
    
    qDebug() << "Page px :" << printer.pageRect() << printer.paperRect();
    qDebug() << "Page mm :" << printer.pageRect(QPrinter::Millimeter) << printer.paperRect(QPrinter::Millimeter);
    qreal left, top, right, bottom;
    printer.getPageMargins(&left, &top, &right, &bottom, QPrinter::DevicePixel);
    qDebug() << "Marges px :" << left << top << right << bottom;
    printer.getPageMargins(&left, &top, &right, &bottom, QPrinter::Millimeter);
    qDebug() << "Marges mm :" << left << top << right << bottom;
    
    ...
}

Pour générer un contenu dans le fichier PDF, il suffit d’utiliser un objet QPainter, de l’associer à l’objet QPrinter et de dessiner à l’intérieur :

    ...
    
    QPainter painter(&printer);
    
    // Pour écrire du texte
    painter.drawText(0, printer.pageRect().y()*2, QString::fromUtf8("Ligne 1"));
    
    // Une nouvelle page
    printer.newPage();
    painter.drawText(0, printer.pageRect().y()*3, QString::fromUtf8("Ligne 2"));
}

Lire : Dessin sous Qt

Retour au sommaire