WebEngine Widgets Html2Pdf Example▲

Image non disponible

Html2Pdf demonstrates how to use Qt WebEngine to implement a command-line application for converting web pages into PDF documents.

Running the Example▲

To run the example from Qt Creator, open the Welcome mode and select the example from Examples. For more information, visit Building and Running an Example.

The Conversion Process▲

In order to convert a web page into a PDF document we need to:

  1. Create a QWebEnginePage.

  2. Tell the QWebEnginePage to begin loading the target URL and wait for it to finish.

  3. Tell the QWebEnginePage to begin converting the loaded page into a PDF file and again wait for it to finish.

  4. Once the conversion is finished, exit the program.

This process is encapsulated in the Html2PdfConverter class:

 
Sélectionnez
#include <QApplication>
#include <QCommandLineParser>
#include <QFile>
#include <QTextStream>
#include <QWebEnginePage>

#include <functional>

using namespace std;
using namespace std::placeholders;

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<QWebEnginePage> m_page;
};

In the constructor we create the QWebEnginePage and connect to its QWebEnginePage::loadFinished and QWebEnginePage::pdfPrintingFinished signals:

 
Sélectionnez
Html2PdfConverter::Html2PdfConverter(QString inputPath, QString outputPath)
    : m_inputPath(move(inputPath))
    , m_outputPath(move(outputPath))
    , m_page(new QWebEnginePage)
{
    connect(m_page.data(), &QWebEnginePage::loadFinished,
            this, &Html2PdfConverter::loadFinished);
    connect(m_page.data(), &QWebEnginePage::pdfPrintingFinished,
            this, &Html2PdfConverter::pdfPrintingFinished);
}

The run() method will trigger the conversion process by asking QWebEnginePage to start loading the target URL. We then enter the main event loop:

 
Sélectionnez
int Html2PdfConverter::run()
{
    m_page->load(QUrl::fromUserInput(m_inputPath));
    return QApplication::exec();
}

After the loading is finished we begin PDF generation. We ask the QWebEnginePage::printToPdf method to write the output directly to disk:

 
Sélectionnez
void Html2PdfConverter::loadFinished(bool ok)
{
    if (!ok) {
        QTextStream(stderr)
            << tr("failed to load URL '%1'").arg(m_inputPath) <<