diff --git a/src/calibre/gui2/images/document-print-preview.svg b/src/calibre/gui2/images/document-print-preview.svg
new file mode 100644
index 0000000000..6ffe4fafa8
--- /dev/null
+++ b/src/calibre/gui2/images/document-print-preview.svg
@@ -0,0 +1,14298 @@
+
+
+
diff --git a/src/calibre/gui2/images/document-print.svg b/src/calibre/gui2/images/document-print.svg
new file mode 100644
index 0000000000..dffa8b94ba
--- /dev/null
+++ b/src/calibre/gui2/images/document-print.svg
@@ -0,0 +1,14229 @@
+
+
+
diff --git a/src/calibre/gui2/viewer/documentview.py b/src/calibre/gui2/viewer/documentview.py
index 6c1eca0061..6ce7a39e9d 100644
--- a/src/calibre/gui2/viewer/documentview.py
+++ b/src/calibre/gui2/viewer/documentview.py
@@ -8,7 +8,8 @@ __docformat__ = 'restructuredtext en'
import os, math, re
from PyQt4.Qt import QWidget, QSize, QSizePolicy, QUrl, SIGNAL, Qt, QTimer, \
QPainter, QPalette, QBrush, QFontDatabase, QDialog, \
- QByteArray, QColor, QWheelEvent, QPoint, QImage, QRegion, QFont
+ QByteArray, QColor, QWheelEvent, QPoint, QImage, QRegion, \
+ QFont, QPrinter, QPrintPreviewDialog, QPrintDialog
from PyQt4.QtWebKit import QWebPage, QWebView, QWebSettings
from calibre.utils.config import Config, StringConfig
@@ -305,6 +306,27 @@ class DocumentView(QWebView):
def goto_bookmark(self, bm):
self.document.goto_bookmark(bm)
+
+ def print_preview(self):
+ printer = QPrinter(QPrinter.HighResolution)
+ printer.setPageMargins(1, 1, 1, 1, QPrinter.Inch)
+
+ previewDialog = QPrintPreviewDialog(printer, self)
+
+ self.connect(previewDialog, SIGNAL('paintRequested(QPrinter *)'), self.print_)
+ previewDialog.exec_()
+ self.disconnect(previewDialog, SIGNAL('paintRequested(QPrinter *)'), self.print_)
+
+ def print_book(self):
+ printer = QPrinter(QPrinter.HighResolution)
+ printer.setPageMargins(1, 1, 1, 1, QPrinter.Inch)
+
+ printDialog = QPrintDialog(printer, self)
+ printDialog.setWindowTitle(_("Print eBook"))
+
+ printDialog.exec_()
+ if printDialog.result() == QDialog.Accepted:
+ self.print_(printer)
def config(self, parent=None):
self.document.do_config(parent)
@@ -552,4 +574,4 @@ class DocumentView(QWebView):
self.manager.scrolled(self.scroll_fraction)
return ret
-
\ No newline at end of file
+
diff --git a/src/calibre/gui2/viewer/main.py b/src/calibre/gui2/viewer/main.py
index fedebc66d7..3b9c0fca1e 100644
--- a/src/calibre/gui2/viewer/main.py
+++ b/src/calibre/gui2/viewer/main.py
@@ -248,6 +248,8 @@ class EbookViewer(MainWindow, Ui_EbookViewer):
self.connect(self.action_back, SIGNAL('triggered(bool)'), self.back)
self.connect(self.action_bookmark, SIGNAL('triggered(bool)'), self.bookmark)
self.connect(self.action_forward, SIGNAL('triggered(bool)'), self.forward)
+ self.connect(self.action_print_preview, SIGNAL('triggered()'), self.view.print_preview)
+ self.connect(self.action_print, SIGNAL('triggered()'), self.view.print_book)
self.connect(self.action_preferences, SIGNAL('triggered(bool)'), lambda x: self.view.config(self))
self.connect(self.pos, SIGNAL('valueChanged(double)'), self.goto_page)
self.connect(self.vertical_scrollbar, SIGNAL('valueChanged(int)'),
diff --git a/src/calibre/gui2/viewer/main.ui b/src/calibre/gui2/viewer/main.ui
index 59f813b2bd..122993d528 100644
--- a/src/calibre/gui2/viewer/main.ui
+++ b/src/calibre/gui2/viewer/main.ui
@@ -27,8 +27,8 @@
-
-
-
+
+
about:blank
@@ -87,6 +87,9 @@
+
+
+
@@ -234,6 +237,24 @@
Toggle full screen
+
+
+
+ :/images/document-print.svg:/images/document-print.svg
+
+
+ Print
+
+
+
+
+
+ :/images/document-print-preview.svg:/images/document-print-preview.svg
+
+
+ Print Preview
+
+