mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
Render Html pages into a QWebView then print it using QPainter. the Printer::print() is called that prepare the HTML file to be rendered by the QWebView. Printer::render() will do the rendering task. Signed-off-by: Gehad elrobey <gehadelrobey@gmail.com> Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
48 lines
1.1 KiB
C++
48 lines
1.1 KiB
C++
#include "printer.h"
|
|
#include "templatelayout.h"
|
|
|
|
#include <QtWebKitWidgets>
|
|
#include <QPainter>
|
|
|
|
#define A4_300DPI_WIDTH 2480
|
|
#define A4_300DPI_HIGHT 3508
|
|
|
|
Printer::Printer(QPrinter *printer)
|
|
{
|
|
this->printer = printer;
|
|
|
|
//override these settings for now.
|
|
printer->setFullPage(true);
|
|
printer->setOrientation(QPrinter::Portrait);
|
|
printer->setPaperSize(QPrinter::A4);
|
|
printer->setPrintRange(QPrinter::AllPages);
|
|
printer->setResolution(300);
|
|
}
|
|
|
|
void Printer::render()
|
|
{
|
|
QPainter painter;
|
|
QSize size(A4_300DPI_WIDTH, A4_300DPI_HIGHT);
|
|
painter.begin(printer);
|
|
painter.setRenderHint(QPainter::Antialiasing);
|
|
painter.setRenderHint(QPainter::SmoothPixmapTransform);
|
|
|
|
webView->page()->setViewportSize(size);
|
|
|
|
int Pages = ceil((float)webView->page()->mainFrame()->contentsSize().rheight() / A4_300DPI_HIGHT);
|
|
for (int i = 0; i < Pages; i++) {
|
|
webView->page()->mainFrame()->render(&painter, QWebFrame::ContentsLayer);
|
|
webView->page()->mainFrame()->scroll(0, A4_300DPI_HIGHT);
|
|
if (i < Pages - 1)
|
|
printer->newPage();
|
|
}
|
|
painter.end();
|
|
}
|
|
|
|
void Printer::print()
|
|
{
|
|
TemplateLayout t;
|
|
webView = new QWebView();
|
|
webView->setHtml(t.generate());
|
|
render();
|
|
}
|