summaryrefslogtreecommitdiffstats
path: root/printer.cpp
diff options
context:
space:
mode:
authorGravatar Gehad elrobey <gehadelrobey@gmail.com>2015-04-21 18:05:20 +0200
committerGravatar Dirk Hohndel <dirk@hohndel.org>2015-06-04 10:07:35 -0700
commit6de5cfb7a400897e6644668ffa9d0d4926b74590 (patch)
treeb11159f2375dc2d91e44e38863b7aa28a31885a5 /printer.cpp
parente2ad38189eb81eda213f775302efb44d2ed70c85 (diff)
downloadsubsurface-6de5cfb7a400897e6644668ffa9d0d4926b74590.tar.gz
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>
Diffstat (limited to 'printer.cpp')
-rw-r--r--printer.cpp48
1 files changed, 48 insertions, 0 deletions
diff --git a/printer.cpp b/printer.cpp
new file mode 100644
index 000000000..01c1f5546
--- /dev/null
+++ b/printer.cpp
@@ -0,0 +1,48 @@
+#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();
+}