Esempio n. 1
0
    def do_paged_render(self, outpath):
        from PyQt4.Qt import QSize, QPainter
        if self.paged_js is None:
            from calibre.utils.resources import compiled_coffeescript
            self.paged_js = compiled_coffeescript('ebooks.oeb.display.utils')
            self.paged_js += compiled_coffeescript('ebooks.oeb.display.paged')
        printer = get_pdf_printer(self.opts, output_file_name=outpath)
        painter = QPainter(printer)
        zoomx = printer.logicalDpiX()/self.view.logicalDpiX()
        zoomy = printer.logicalDpiY()/self.view.logicalDpiY()
        painter.scale(zoomx, zoomy)

        pr = printer.pageRect()
        evaljs = self.view.page().mainFrame().evaluateJavaScript
        evaljs(self.paged_js)
        self.view.page().setViewportSize(QSize(pr.width()/zoomx,
            pr.height()/zoomy))
        evaljs('''
        document.body.style.backgroundColor = "white";
        paged_display.set_geometry(1, 0, 0, 0);
        paged_display.layout();
        paged_display.fit_images();
        ''')
        mf = self.view.page().mainFrame()
        while True:
            mf.render(painter)
            nsl = evaljs('paged_display.next_screen_location()').toInt()
            if not nsl[1] or nsl[0] <= 0: break
            evaljs('window.scrollTo(%d, 0)'%nsl[0])
            printer.newPage()

        painter.end()
        printer.abort()
Esempio n. 2
0
 def load_js(self):
     if self.js is None:
         from calibre.utils.resources import compiled_coffeescript
         self.js = compiled_coffeescript('ebooks.oeb.display.utils')
         self.js += compiled_coffeescript('ebooks.oeb.polish.choose')
     self.mainFrame().addToJavaScriptWindowObject("py_bridge", self)
     self.evaljs(self.js)
Esempio n. 3
0
    def do_paged_render(self, outpath):
        from PyQt4.Qt import QSize, QPainter
        if self.paged_js is None:
            from calibre.utils.resources import compiled_coffeescript
            self.paged_js = compiled_coffeescript('ebooks.oeb.display.utils')
            self.paged_js += compiled_coffeescript('ebooks.oeb.display.paged')
        printer = get_pdf_printer(self.opts, output_file_name=outpath)
        painter = QPainter(printer)
        zoomx = printer.logicalDpiX() / self.view.logicalDpiX()
        zoomy = printer.logicalDpiY() / self.view.logicalDpiY()
        painter.scale(zoomx, zoomy)

        pr = printer.pageRect()
        evaljs = self.view.page().mainFrame().evaluateJavaScript
        evaljs(self.paged_js)
        self.view.page().setViewportSize(
            QSize(pr.width() / zoomx,
                  pr.height() / zoomy))
        evaljs('''
        document.body.style.backgroundColor = "white";
        paged_display.set_geometry(1, 0, 0, 0);
        paged_display.layout();
        paged_display.fit_images();
        ''')
        mf = self.view.page().mainFrame()
        while True:
            mf.render(painter)
            nsl = evaljs('paged_display.next_screen_location()').toInt()
            if not nsl[1] or nsl[0] <= 0: break
            evaljs('window.scrollTo(%d, 0)' % nsl[0])
            printer.newPage()

        painter.end()
        printer.abort()
Esempio n. 4
0
 def load_js(self):
     if self.js is None:
         from calibre.utils.resources import compiled_coffeescript
         self.js = compiled_coffeescript('ebooks.oeb.display.utils')
         self.js += compiled_coffeescript('ebooks.oeb.polish.choose')
     self.mainFrame().addToJavaScriptWindowObject("py_bridge", self)
     self.evaljs(self.js)
Esempio n. 5
0
    def do_paged_render(self):
        if self.paged_js is None:
            from calibre.utils.resources import compiled_coffeescript
            self.paged_js =  compiled_coffeescript('ebooks.oeb.display.utils')
            self.paged_js += compiled_coffeescript('ebooks.oeb.display.indexing')
            self.paged_js += compiled_coffeescript('ebooks.oeb.display.paged')

        self.view.page().mainFrame().addToJavaScriptWindowObject("py_bridge", self)
        evaljs = self.view.page().mainFrame().evaluateJavaScript
        evaljs(self.paged_js)
        evaljs('''
        py_bridge.__defineGetter__('value', function() {
            return JSON.parse(this._pass_json_value);
        });
        py_bridge.__defineSetter__('value', function(val) {
            this._pass_json_value = JSON.stringify(val);
        });

        document.body.style.backgroundColor = "white";
        paged_display.set_geometry(1, %d, %d, %d);
        paged_display.layout();
        paged_display.fit_images();
        py_bridge.value = book_indexing.all_links_and_anchors();
        '''%(self.margin_top, 0, self.margin_bottom))

        if self.header:
            self.bridge_value = self.header
            evaljs('paged_display.header_template = py_bridge.value')
        if self.footer:
            self.bridge_value = self.footer
            evaljs('paged_display.footer_template = py_bridge.value')
        if self.header or self.footer:
            evaljs('paged_display.create_header_footer();')

        amap = self.bridge_value
        if not isinstance(amap, dict):
            amap = {'links':[], 'anchors':{}} # Some javascript error occurred
        start_page = self.current_page_num

        mf = self.view.page().mainFrame()
        while True:
            self.doc.init_page()
            if self.header or self.footer:
                evaljs('paged_display.update_header_footer(%d)'%self.current_page_num)
            self.painter.save()
            mf.render(self.painter)
            self.painter.restore()
            nsl = evaljs('paged_display.next_screen_location()').toInt()
            self.doc.end_page()
            if not nsl[1] or nsl[0] <= 0:
                break
            evaljs('window.scrollTo(%d, 0); paged_display.position_header_footer();'%nsl[0])
            if self.doc.errors_occurred:
                break

        if not self.doc.errors_occurred:
            self.doc.add_links(self.current_item, start_page, amap['links'],
                            amap['anchors'])
Esempio n. 6
0
 def init_javascript(self):
     if not hasattr(self, 'js'):
         from calibre.utils.resources import compiled_coffeescript
         self.js = compiled_coffeescript('ebooks.oeb.display.utils', dynamic=False)
         self.js += compiled_coffeescript('ebooks.oeb.polish.preview', dynamic=False)
     self._line_numbers = None
     mf = self.mainFrame()
     mf.addToJavaScriptWindowObject("py_bridge", self)
     mf.evaluateJavaScript(self.js)
Esempio n. 7
0
 def init_javascript(self):
     if not hasattr(self, 'js'):
         from calibre.utils.resources import compiled_coffeescript
         self.js = compiled_coffeescript('ebooks.oeb.display.utils', dynamic=False)
         self.js += compiled_coffeescript('ebooks.oeb.polish.preview', dynamic=False)
     self._line_numbers = None
     mf = self.mainFrame()
     mf.addToJavaScriptWindowObject("py_bridge", self)
     mf.evaluateJavaScript(self.js)
Esempio n. 8
0
    def do_paged_render(self):
        if self.paged_js is None:
            from calibre.utils.resources import compiled_coffeescript
            self.paged_js = compiled_coffeescript('ebooks.oeb.display.utils')
            self.paged_js += compiled_coffeescript(
                'ebooks.oeb.display.indexing')
            self.paged_js += compiled_coffeescript('ebooks.oeb.display.paged')

        self.view.page().mainFrame().addToJavaScriptWindowObject(
            "py_bridge", self)
        evaljs = self.view.page().mainFrame().evaluateJavaScript
        evaljs(self.paged_js)
        evaljs('''
        py_bridge.__defineGetter__('value', function() {
            return JSON.parse(this._pass_json_value);
        });
        py_bridge.__defineSetter__('value', function(val) {
            this._pass_json_value = JSON.stringify(val);
        });

        document.body.style.backgroundColor = "white";
        paged_display.set_geometry(1, 0, 0, 0);
        paged_display.layout();
        paged_display.fit_images();
        ''')
        mf = self.view.page().mainFrame()
        start_page = self.current_page_num
        if not self.first_page:
            start_page += 1
        while True:
            if not self.first_page:
                if self.printer.newPage():
                    self.current_page_num += 1
            self.first_page = False
            mf.render(self.painter)
            try:
                nsl = int(evaljs('paged_display.next_screen_location()'))
            except (TypeError, ValueError):
                break
            if nsl <= 0:
                break
            evaljs('window.scrollTo(%d, 0)' % nsl)

        self.bridge_value = tuple(self.outline.anchor_map[self.current_item])
        evaljs(
            'py_bridge.value = book_indexing.anchor_positions(py_bridge.value)'
        )
        amap = self.bridge_value
        if not isinstance(amap, dict):
            amap = {}  # Some javascript error occurred
        self.outline.set_pos(self.current_item, None, start_page, 0)
        for anchor, x in amap.iteritems():
            pagenum, ypos = x
            self.outline.set_pos(self.current_item, anchor,
                                 start_page + pagenum, ypos)
Esempio n. 9
0
 def __init__(self, iterator, parent):
     QObject.__init__(self, parent)
     self.current_index = 0
     self.iterator = iterator
     self.view = QWebView(self.parent())
     self.mf = mf = self.view.page().mainFrame()
     for x in (Qt.Horizontal, Qt.Vertical):
         mf.setScrollBarPolicy(x, Qt.ScrollBarAlwaysOff)
     self.view.loadFinished.connect(self.load_finished)
     self.paged_js = compiled_coffeescript('ebooks.oeb.display.utils')
     self.paged_js += compiled_coffeescript('ebooks.oeb.display.paged')
Esempio n. 10
0
 def __init__(self, iterator, parent):
     QObject.__init__(self, parent)
     self.current_index = 0
     self.iterator = iterator
     self.view = QWebView(self.parent())
     self.mf = mf = self.view.page().mainFrame()
     for x in (Qt.Horizontal, Qt.Vertical):
         mf.setScrollBarPolicy(x, Qt.ScrollBarAlwaysOff)
     self.view.loadFinished.connect(self.load_finished)
     self.paged_js = compiled_coffeescript('ebooks.oeb.display.utils')
     self.paged_js += compiled_coffeescript('ebooks.oeb.display.paged')
Esempio n. 11
0
 def init_javascript(self):
     if not hasattr(self, 'js'):
         from calibre.utils.resources import compiled_coffeescript
         self.js = compiled_coffeescript('ebooks.oeb.display.utils', dynamic=False)
         self.js += P('csscolorparser.js', data=True, allow_user_override=False)
         self.js += compiled_coffeescript('ebooks.oeb.polish.preview', dynamic=False)
         if isinstance(self.js, bytes):
             self.js = self.js.decode('utf-8')
     self._line_numbers = None
     mf = self.mainFrame()
     mf.addToJavaScriptWindowObject("py_bridge", self)
     mf.evaluateJavaScript(self.js)
Esempio n. 12
0
    def do_paged_render(self):
        if self.paged_js is None:
            from calibre.utils.resources import compiled_coffeescript
            self.paged_js =  compiled_coffeescript('ebooks.oeb.display.utils')
            self.paged_js += compiled_coffeescript('ebooks.oeb.display.indexing')
            self.paged_js += compiled_coffeescript('ebooks.oeb.display.paged')

        self.view.page().mainFrame().addToJavaScriptWindowObject("py_bridge", self)
        evaljs = self.view.page().mainFrame().evaluateJavaScript
        evaljs(self.paged_js)
        evaljs('''
        py_bridge.__defineGetter__('value', function() {
            return JSON.parse(this._pass_json_value);
        });
        py_bridge.__defineSetter__('value', function(val) {
            this._pass_json_value = JSON.stringify(val);
        });

        document.body.style.backgroundColor = "white";
        paged_display.set_geometry(1, %d, %d, %d);
        paged_display.layout();
        paged_display.fit_images();
        '''%(self.margin_top, self.margin_size, self.margin_bottom))

        mf = self.view.page().mainFrame()
        start_page = self.current_page_num
        dx = 0
        while True:
            self.doc.init_page()
            self.painter.save()
            mf.render(self.painter)
            self.painter.restore()
            nsl = evaljs('paged_display.next_screen_location()').toInt()
            self.doc.end_page()
            if not nsl[1] or nsl[0] <= 0:
                break
            dx = nsl[0]
            evaljs('window.scrollTo(%d, 0)'%dx)
            if self.doc.errors_occurred:
                break

        self.bridge_value = tuple(self.outline.anchor_map[self.current_item])
        evaljs('py_bridge.value = book_indexing.anchor_positions(py_bridge.value)')
        amap = self.bridge_value
        if not isinstance(amap, dict):
            amap = {} # Some javascript error occurred
        self.outline.set_pos(self.current_item, None, start_page, 0)
        for anchor, x in amap.iteritems():
            pagenum, ypos = x
            self.outline.set_pos(self.current_item, anchor, start_page + pagenum, ypos)
Esempio n. 13
0
 def load_js(self):
     self.longjs_counter = 0
     if self.js is None:
         from calibre.utils.resources import compiled_coffeescript
         self.js = compiled_coffeescript('ebooks.oeb.display.utils')
         self.js += compiled_coffeescript('ebooks.oeb.polish.font_stats')
     self.mainFrame().addToJavaScriptWindowObject("py_bridge", self)
     self.evaljs(self.js)
     self.evaljs('''
     Object.defineProperty(py_bridge, 'value', {
            get : function() { return JSON.parse(this._pass_json_value); },
            set : function(val) { this._pass_json_value = JSON.stringify(val); }
     });
     ''')
Esempio n. 14
0
 def load_js(self):
     self.longjs_counter = 0
     if self.js is None:
         from calibre.utils.resources import compiled_coffeescript
         self.js = compiled_coffeescript('ebooks.oeb.display.utils')
         self.js += compiled_coffeescript('ebooks.oeb.polish.font_stats')
     self.mainFrame().addToJavaScriptWindowObject("py_bridge", self)
     self.evaljs(self.js)
     self.evaljs('''
     Object.defineProperty(py_bridge, 'value', {
            get : function() { return JSON.parse(this._pass_json_value); },
            set : function(val) { this._pass_json_value = JSON.stringify(val); }
     });
     ''')
Esempio n. 15
0
    def do_paged_render(self):
        if self.paged_js is None:
            from calibre.utils.resources import compiled_coffeescript
            self.paged_js = compiled_coffeescript('ebooks.oeb.display.utils')
            self.paged_js += compiled_coffeescript('ebooks.oeb.display.indexing')
            self.paged_js += compiled_coffeescript('ebooks.oeb.display.paged')

        self.view.page().mainFrame().addToJavaScriptWindowObject("py_bridge", self)
        evaljs = self.view.page().mainFrame().evaluateJavaScript
        evaljs(self.paged_js)
        evaljs('''
        py_bridge.__defineGetter__('value', function() {
            return JSON.parse(this._pass_json_value);
        });
        py_bridge.__defineSetter__('value', function(val) {
            this._pass_json_value = JSON.stringify(val);
        });

        document.body.style.backgroundColor = "white";
        paged_display.set_geometry(1, 0, 0, 0);
        paged_display.layout();
        paged_display.fit_images();
        ''')
        mf = self.view.page().mainFrame()
        start_page = self.current_page_num
        if not self.first_page:
            start_page += 1
        while True:
            if not self.first_page:
                if self.printer.newPage():
                    self.current_page_num += 1
            self.first_page = False
            mf.render(self.painter)
            try:
                nsl = int(evaljs('paged_display.next_screen_location()'))
            except (TypeError, ValueError):
                break
            if nsl <= 0:
                break
            evaljs('window.scrollTo(%d, 0)'%nsl)

        self.bridge_value = tuple(self.outline.anchor_map[self.current_item])
        evaljs('py_bridge.value = book_indexing.anchor_positions(py_bridge.value)')
        amap = self.bridge_value
        if not isinstance(amap, dict):
            amap = {}  # Some javascript error occurred
        self.outline.set_pos(self.current_item, None, start_page, 0)
        for anchor, x in amap.iteritems():
            pagenum, ypos = x
            self.outline.set_pos(self.current_item, anchor, start_page + pagenum, ypos)
Esempio n. 16
0
 def load_js(self):
     if self.js is None:
         from calibre.utils.resources import compiled_coffeescript
         self.js = compiled_coffeescript('ebooks.oeb.display.utils')
         self.js += compiled_coffeescript('ebooks.oeb.polish.font_stats')
     self.mainFrame().addToJavaScriptWindowObject("py_bridge", self)
     self.evaljs(self.js)
     self.evaljs('''
     py_bridge.__defineGetter__('value', function() {
         return JSON.parse(this._pass_json_value);
     });
     py_bridge.__defineSetter__('value', function(val) {
         this._pass_json_value = JSON.stringify(val);
     });
     ''')
Esempio n. 17
0
 def init_javascript(self):
     if not hasattr(self, 'js'):
         from calibre.utils.resources import compiled_coffeescript
         self.js = compiled_coffeescript('ebooks.oeb.display.utils',
                                         dynamic=False)
         self.js += P('csscolorparser.js',
                      data=True,
                      allow_user_override=False)
         self.js += compiled_coffeescript('ebooks.oeb.polish.preview',
                                          dynamic=False)
         if isinstance(self.js, bytes):
             self.js = self.js.decode('utf-8')
     self._line_numbers = None
     mf = self.mainFrame()
     mf.addToJavaScriptWindowObject("py_bridge", self)
     mf.evaluateJavaScript(self.js)
Esempio n. 18
0
    def get(self, name):
        ans = self._cache.get(name, None)
        if ans is None:
            src = self.CS.get(name, None)
            if src is None:
                src = self.JS.get(name, None)
                if src is None:
                    raise KeyError('No such resource: %s'%name)
                ans = P(src, data=True,
                        allow_user_override=False).decode('utf-8')
            else:
                dynamic = self._dynamic_coffeescript and calibre.__file__ and not calibre.__file__.endswith('.pyo') and os.path.exists(calibre.__file__)
                ans = compiled_coffeescript(src, dynamic=dynamic).decode('utf-8')
            self._cache[name] = ans

        return ans
Esempio n. 19
0
    def get(self, name):
        ans = self._cache.get(name, None)
        if ans is None:
            src = self.CS.get(name, None)
            if src is None:
                src = self.JS.get(name, None)
                if src is None:
                    raise KeyError('No such resource: %s' % name)
                ans = P(src, data=True,
                        allow_user_override=False).decode('utf-8')
            else:
                dynamic = (self._dynamic_coffeescript
                           and os.path.exists(calibre.__file__))
                ans = compiled_coffeescript(src,
                                            dynamic=dynamic).decode('utf-8')
            self._cache[name] = ans

        return ans