subsurface/printer.cpp
Gehad elrobey 6de5cfb7a4 Printing: Add Printer class that holds the rendering logic.
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>
2015-06-04 10:07:35 -07:00

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();
}