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

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 :
- Créer une page QWebEngineView.
- Demander à QWebEngineView de commencer à charger l'URL cible et attendre la fin du chargement.
- Demander à QWebEngineView de commencer à convertir la page chargée en fichier PDF et attendre que cela se termine.
- 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.
© 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.