diff --git a/src/calibre/ebooks/conversion/plugins/pdf_output.py b/src/calibre/ebooks/conversion/plugins/pdf_output.py index 2e4b370d50..972631b5bd 100644 --- a/src/calibre/ebooks/conversion/plugins/pdf_output.py +++ b/src/calibre/ebooks/conversion/plugins/pdf_output.py @@ -215,6 +215,7 @@ class PDFOutput(OutputFormatPlugin): def write(self, Writer, items, toc): writer = Writer(self.opts, self.log, cover_data=self.cover_data, toc=toc) + writer.report_progress = self.report_progress close = False if not hasattr(self.output_path, 'write'): diff --git a/src/calibre/ebooks/pdf/render/from_html.py b/src/calibre/ebooks/pdf/render/from_html.py index 544eafe8a4..a2f452f58c 100644 --- a/src/calibre/ebooks/pdf/render/from_html.py +++ b/src/calibre/ebooks/pdf/render/from_html.py @@ -7,7 +7,7 @@ __license__ = 'GPL v3' __copyright__ = '2012, Kovid Goyal ' __docformat__ = 'restructuredtext en' -import json +import json, os from future_builtins import map from math import floor @@ -141,23 +141,25 @@ class PDFWriter(QObject): for x in (Qt.Horizontal, Qt.Vertical): self.view.page().mainFrame().setScrollBarPolicy(x, Qt.ScrollBarAlwaysOff) + self.report_progress = lambda x, y: x def dump(self, items, out_stream, pdf_metadata): opts = self.opts self.outline = Outline(self.toc, items) page_size = get_page_size(self.opts) - dpi = min(self.opts.input_profile.dpi, 150) + xdpi, ydpi = self.view.logicalDpiX(), self.view.logicalDpiY() ml, mr = opts.margin_left, opts.margin_right margin_side = min(ml, mr) ml, mr = ml - margin_side, mr - margin_side self.doc = PdfDevice(out_stream, page_size=page_size, left_margin=ml, top_margin=0, right_margin=mr, bottom_margin=0, - xdpi=dpi, ydpi=dpi, errors=self.log.error, + xdpi=xdpi, ydpi=ydpi, errors=self.log.error, debug=self.log.debug, compress=not opts.uncompressed_pdf) self.page.setViewportSize(QSize(self.doc.width(), self.doc.height())) self.render_queue = items + self.total_items = len(items) self.first_page = True # TODO: Test margins @@ -223,6 +225,9 @@ class PDFWriter(QObject): self.logger.error('Document cannot be rendered.') self.loop.exit(1) return + done = self.total_items - len(self.render_queue) + self.report_progress(done/self.total_items, + _('Rendered %s'%os.path.basename(self.current_item))) self.render_book() @property