mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
PDF Output: Add support for converting documents with math typesetting, as described here: http://manual.calibre-ebook.com/typesetting_math.html
This commit is contained in:
parent
d9b75ef819
commit
ab9b0e8380
@ -16,6 +16,7 @@ from PyQt4.Qt import (QObject, QPainter, Qt, QSize, QString, QTimer,
|
|||||||
from PyQt4.QtWebKit import QWebView, QWebPage, QWebSettings
|
from PyQt4.QtWebKit import QWebView, QWebPage, QWebSettings
|
||||||
|
|
||||||
from calibre import fit_image
|
from calibre import fit_image
|
||||||
|
from calibre.constants import iswindows
|
||||||
from calibre.ebooks.oeb.display.webview import load_html
|
from calibre.ebooks.oeb.display.webview import load_html
|
||||||
from calibre.ebooks.pdf.render.common import (inch, cm, mm, pica, cicero,
|
from calibre.ebooks.pdf.render.common import (inch, cm, mm, pica, cicero,
|
||||||
didot, PAPER_SIZES)
|
didot, PAPER_SIZES)
|
||||||
@ -251,16 +252,33 @@ class PDFWriter(QObject):
|
|||||||
def current_page_num(self):
|
def current_page_num(self):
|
||||||
return self.doc.current_page_num
|
return self.doc.current_page_num
|
||||||
|
|
||||||
|
def load_mathjax(self):
|
||||||
|
evaljs = self.view.page().mainFrame().evaluateJavaScript
|
||||||
|
mjpath = P(u'viewer/mathjax').replace(os.sep, '/')
|
||||||
|
if iswindows:
|
||||||
|
mjpath = u'/' + mjpath
|
||||||
|
if evaljs('''
|
||||||
|
window.mathjax.base = %s;
|
||||||
|
mathjax.check_for_math(); mathjax.math_present
|
||||||
|
'''%(json.dumps(mjpath, ensure_ascii=False))).toBool():
|
||||||
|
self.log.debug('Math present, loading MathJax')
|
||||||
|
while not evaljs('mathjax.math_loaded').toBool():
|
||||||
|
self.loop.processEvents(self.loop.ExcludeUserInputEvents)
|
||||||
|
evaljs('document.getElementById("MathJax_Message").style.display="none";')
|
||||||
|
|
||||||
def do_paged_render(self):
|
def do_paged_render(self):
|
||||||
if self.paged_js is None:
|
if self.paged_js is None:
|
||||||
from calibre.utils.resources import compiled_coffeescript
|
from calibre.utils.resources import compiled_coffeescript
|
||||||
self.paged_js = compiled_coffeescript('ebooks.oeb.display.utils')
|
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.indexing')
|
||||||
self.paged_js += compiled_coffeescript('ebooks.oeb.display.paged')
|
self.paged_js += compiled_coffeescript('ebooks.oeb.display.paged')
|
||||||
|
self.paged_js += compiled_coffeescript('ebooks.oeb.display.mathjax')
|
||||||
|
|
||||||
self.view.page().mainFrame().addToJavaScriptWindowObject("py_bridge", self)
|
self.view.page().mainFrame().addToJavaScriptWindowObject("py_bridge", self)
|
||||||
evaljs = self.view.page().mainFrame().evaluateJavaScript
|
evaljs = self.view.page().mainFrame().evaluateJavaScript
|
||||||
evaljs(self.paged_js)
|
evaljs(self.paged_js)
|
||||||
|
self.load_mathjax()
|
||||||
|
|
||||||
evaljs('''
|
evaljs('''
|
||||||
py_bridge.__defineGetter__('value', function() {
|
py_bridge.__defineGetter__('value', function() {
|
||||||
return JSON.parse(this._pass_json_value);
|
return JSON.parse(this._pass_json_value);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user