Tag Archives: webkit

web2img

It is really easy to save a website into a png using webkit and qt.
Alternatives:

  • wkhtmltopdf
  • webkit2pdf

My code:
Web2IMG.hpp

#include <QtWebKit>

class Web2IMG : public QWebPage {
        Q_OBJECT

        public:
                void print(QUrl &url, QString &ilename);
        private:
                QString filename;
        private slots:
                void loaded();


};

Web2IMG.cpp

#include <QApplication>
#include <QtWebKit>
#include <QtGui>
#include <QSvgGenerator>
#include <QPrinter>
#include <QTimer>
#include <QByteArray>
#include <QNetworkRequest>

#include "Web2IMG.hpp"

void Web2IMG::loaded()
{
        QImage image(mainFrame()->contentsSize(), QImage::Format_ARGB32);
        QPainter painter(&image);

        setViewportSize(mainFrame()->contentsSize());

        mainFrame()->render(&painter);

        painter.end();

        image.save(filename);

        QCoreApplication::exit();
}

void Web2IMG::print(QUrl &url, QString &filename)
{
        QNetworkRequest req;

        this->filename = filename;
        req.setUrl(url);

        mainFrame()->load(req, QNetworkAccessManager::GetOperation);

        connect(this, SIGNAL(loadFinished(bool)), this, SLOT(loaded()));
}


int main(int argc, char **argv)
{
        if (argc != 3)
        {
                qDebug() << "usage: web2img <url> <filename>";
                return -1;
        }

        QUrl url = QUrl::fromEncoded(argv[1]);
        QString file = argv[2];
        QApplication app(argc, argv, true);

        class Web2IMG w2i;

        w2i.print(url, file);

        return app.exec();
}


web2img.pro

QT       +=  webkit svg network
SOURCES   =  Web2IMG.cpp
HEADERS   =  Web2IMG.hpp
CONFIG   +=  qt console

contains(CONFIG, static): {
  QTPLUGIN += qjpeg qgif qsvg qmng qico qtiff
  DEFINES  += STATIC_PLUGINS
}


Build:

  1. qmake-qt4
  2. make