From 38c92339bb4f4a69429c4c6a2d1b8899ec51480d Mon Sep 17 00:00:00 2001 From: John Schember Date: Mon, 2 Feb 2009 19:07:57 -0500 Subject: [PATCH] Ebook Viewer: Support for printing entire book --- src/calibre/gui2/viewer/documentview.py | 68 ++++++++++++++++++------- 1 file changed, 51 insertions(+), 17 deletions(-) diff --git a/src/calibre/gui2/viewer/documentview.py b/src/calibre/gui2/viewer/documentview.py index 6ce7a39e9d..ac9cd1fe30 100644 --- a/src/calibre/gui2/viewer/documentview.py +++ b/src/calibre/gui2/viewer/documentview.py @@ -307,26 +307,60 @@ 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) + def all_content(self): + book_content = '' - previewDialog = QPrintPreviewDialog(printer, self) - - self.connect(previewDialog, SIGNAL('paintRequested(QPrinter *)'), self.print_) - previewDialog.exec_() - self.disconnect(previewDialog, SIGNAL('paintRequested(QPrinter *)'), self.print_) + if self.manager is not None: + for path in self.manager.iterator.spine: + html = open(path, 'rb').read().decode(path.encoding) + book_content += EntityDeclarationProcessor(html).processed_html + base_url = QUrl.fromLocalFile(self.manager.iterator.spine[0]) + else: + book_content = self.page().mainFrame().toHtml() + base_url = QUrl.fromLocalFile(self.path()) + + return (book_content, base_url) - def print_book(self): - printer = QPrinter(QPrinter.HighResolution) - printer.setPageMargins(1, 1, 1, 1, QPrinter.Inch) + def print_preview(self): + print_view = QWebView() + book_content, base_url = self.all_content() + print_view.setHtml(book_content, base_url) + print_view.setTextSizeMultiplier(self.textSizeMultiplier()) + + def finished(ok): + printer = QPrinter(QPrinter.HighResolution) + printer.setPageMargins(1, 1, 1, 1, QPrinter.Inch) + + previewDialog = QPrintPreviewDialog(printer, self) + + self.connect(previewDialog, SIGNAL('paintRequested(QPrinter *)'), print_view.print_) + previewDialog.exec_() + self.disconnect(previewDialog, SIGNAL('paintRequested(QPrinter *)'), print_view.print_) + + self.disconnect(print_view, SIGNAL('loadFinished(bool)'), finished) + + self.connect(print_view, SIGNAL('loadFinished(bool)'), finished) - printDialog = QPrintDialog(printer, self) - printDialog.setWindowTitle(_("Print eBook")) - - printDialog.exec_() - if printDialog.result() == QDialog.Accepted: - self.print_(printer) + def print_book(self): + print_view = QWebView() + book_content, base_url = self.all_content() + print_view.setHtml(book_content, base_url) + print_view.setTextSizeMultiplier(self.textSizeMultiplier()) + + def finished(ok): + 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: + print_view.print_(printer) + + self.disconnect(print_view, SIGNAL('loadFinished(bool)'), finished) + + self.connect(print_view, SIGNAL('loadFinished(bool)'), finished) def config(self, parent=None): self.document.do_config(parent)