Создайте снимок экрана всей страницы, используя QWebPage - PullRequest
7 голосов
/ 31 января 2012

Я использую Qt (необычный пример браузера с создателем Qt) для создания снимка экрана веб-страниц с использованием этого кода (взятого и преобразованного из здесь ):

QImage *image = new QImage(view->page()->mainFrame()->contentsSize(), QImage::Format_ARGB32);
QPainter *painter = new QPainter(image);

view->page()->mainFrame()->render(painter);

painter->end();
image->save(view->title() + "png");

Но он создает только снимок экрана видимой части страницы (порт просмотра).

Если я добавлю эту строку в начале, снимок экрана будет создан со всей страницы, но проблема в том,она добавляет новую полосу прокрутки каждый раз при загрузке страницы.

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

Есть идеи, как это исправить?

Ответы [ 2 ]

11 голосов
/ 13 июля 2012

Вам просто нужно отключить полосы прокрутки:

page()->mainFrame()->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOff);
page()->mainFrame()->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAlwaysOff);

Для полного примера используйте то, что я описал 3,5 года назад в Захват веб-страниц сообщение в блоге.Хранилище кода для этого было перемещено в http://qt.gitorious.org/qt-labs/graphics-dojo.

. Если вы обратите внимание на приведенный выше пример, создавать QWebView не нужно.Вы можете полностью работать только из экземпляра QWebPage.

4 голосов
/ 10 июля 2012

Похоже, что "wkhtmltopdf" ( "wkhtmltopdf" ) имеет правильную реализацию для этого - ищите "painter" в src / lib / imageconverter.cc.

...