Sur cette page

Widgets WebEngine Html2Pdf Exemple

Convertit des pages web en documents PDF à l'aide de Qt WebEngine.

Fenêtre de terminal montrant les commandes pour convertir une page web en PDF à l'aide du script html2pdf

Html2Pdf montre comment utiliser Qt WebEngine pour implémenter une application en ligne de commande permettant de convertir des pages web en documents PDF.

Exécution de l'exemple

Pour exécuter l'exemple à partir de Qt Creatorouvrez le mode Welcome et sélectionnez l'exemple à partir de Examples. Pour plus d'informations, voir Qt Creator: Tutoriel : Construire et exécuter.

Le processus de conversion

Pour convertir une page web en document PDF, nous devons :

  1. Créer une page QWebEngineView.
  2. Demander à QWebEngineView de commencer à charger l'URL cible et attendre la fin du chargement.
  3. Demander à QWebEngineView de commencer à convertir la page chargée en fichier PDF et attendre que cela se termine.
  4. Une fois la conversion terminée, quittez le programme.

Ce processus est encapsulé dans la classe Html2PdfConverter:

#include <QApplication>
#include <QCommandLineParser>
#include <QFile>
#include <QTextStream>
#include <QWebEngineView>

#include <functional>
#include <utility>

class Html2PdfConverter : public QObject
{
    Q_OBJECT
public:
    explicit Html2PdfConverter(QString inputPath, QString outputPath);
    int run();

private slots:
    void loadFinished(bool ok);
    void pdfPrintingFinished(const QString &filePath, bool success);

private:
    QString m_inputPath;
    QString m_outputPath;
    QScopedPointer<QWebEngineView> m_view;
};

Dans le constructeur, nous créons QWebEngineView et nous nous connectons à ses signaux QWebEngineView::loadFinished et QWebEngineView::pdfPrintingFinished:

Html2PdfConverter::Html2PdfConverter(QString inputPath, QString outputPath)
    : m_inputPath(std::move(inputPath))
    , m_outputPath(std::move(outputPath))
    , m_view(new QWebEngineView)
{
    connect(m_view.data(), &QWebEngineView::loadFinished,
            this, &Html2PdfConverter::loadFinished);
    connect(m_view.data(), &QWebEngineView::pdfPrintingFinished,
            this, &Html2PdfConverter::pdfPrintingFinished);
}

La méthode run() déclenchera le processus de conversion en demandant à QWebEnginePage de commencer à charger l'URL cible. Nous entrons ensuite dans la boucle d'événements principale :

int Html2PdfConverter::run()
{
    m_view->load(QUrl::fromUserInput(m_inputPath));
    return QApplication::exec();
}

Une fois le chargement terminé, nous commençons à générer le PDF. Nous demandons à la méthode QWebEnginePage::printToPdf d'écrire la sortie directement sur le disque :

void Html2PdfConverter::loadFinished(bool ok)
{
    if (!ok) {
        QTextStream(stderr)
            << tr("failed to load URL '%1'").arg(m_inputPath) << "\n";
        QCoreApplication::exit(1);
        return;
    }

    m_view->printToPdf(m_outputPath);
}

Une fois que nous avons reçu le signal indiquant que la conversion PDF est terminée, il ne nous reste plus qu'à signaler les erreurs éventuelles et à quitter le programme :

void Html2PdfConverter::pdfPrintingFinished(const QString &filePath, bool success)
{
    if (!success) {
        QTextStream(stderr)
            << tr("failed to print to output file '%1'").arg(filePath) << "\n";
        QCoreApplication::exit(1);
    } else {
        QCoreApplication::quit();
    }
}

La fonction principale

Notre fonction main est responsable de la mise en place d'une QApplication et de l'analyse des arguments de la ligne de commande :

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QCoreApplication::setOrganizationName("QtExamples");
    QCoreApplication::setApplicationName("html2pdf");
    QCoreApplication::setApplicationVersion(QT_VERSION_STR);

    QCommandLineParser parser;
    parser.setApplicationDescription(
        QCoreApplication::translate("main", "Converts the web page INPUT into the PDF file OUTPUT."));
    parser.addHelpOption();
    parser.addVersionOption();
    parser.addPositionalArgument(
        QCoreApplication::translate("main", "INPUT"),
        QCoreApplication::translate("main", "Input URL for PDF conversion."));
    parser.addPositionalArgument(
        QCoreApplication::translate("main", "OUTPUT"),
        QCoreApplication::translate("main", "Output file name for PDF conversion."));

    parser.process(QCoreApplication::arguments());

    const QStringList requiredArguments = parser.positionalArguments();
    if (requiredArguments.size() != 2)
        parser.showHelp(1);

    Html2PdfConverter converter(requiredArguments.at(0), requiredArguments.at(1));
    return converter.run();
}

Notez que pour utiliser les widgets Qt WebEngine, nous devons créer un QApplication et non un QCoreApplication, même s'il s'agit d'une application en ligne de commande.

Exemple de projet @ code.qt.io

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.