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:
- qmake-qt4
- make