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