From 01c21e3a2ba06810917ca39e8d215e74a0aa5238 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 2 Sep 2016 14:45:56 +0530 Subject: [PATCH] PDF Output: Turn off font hinting in WebKit Requires a patched Qt WebKit, which will be available in the calibre 3 binary builds. --- .../ebooks/conversion/plugins/pdf_output.py | 47 ++++++++++--------- 1 file changed, 26 insertions(+), 21 deletions(-) diff --git a/src/calibre/ebooks/conversion/plugins/pdf_output.py b/src/calibre/ebooks/conversion/plugins/pdf_output.py index c6ead0502e..ad97995c37 100644 --- a/src/calibre/ebooks/conversion/plugins/pdf_output.py +++ b/src/calibre/ebooks/conversion/plugins/pdf_output.py @@ -120,29 +120,34 @@ class PDFOutput(OutputFormatPlugin): def convert(self, oeb_book, output_path, input_plugin, opts, log): from calibre.gui2 import must_use_qt, load_builtin_fonts - must_use_qt() - load_builtin_fonts() + # Turn off hinting in WebKit (requires a patched build of QtWebKit) + os.environ['CALIBRE_WEBKIT_NO_HINTING'] = '1' + try: + must_use_qt() + load_builtin_fonts() - self.oeb = oeb_book - self.input_plugin, self.opts, self.log = input_plugin, opts, log - self.output_path = output_path - from calibre.ebooks.oeb.base import OPF, OPF2_NS - from lxml import etree - from io import BytesIO - package = etree.Element(OPF('package'), - attrib={'version': '2.0', 'unique-identifier': 'dummy'}, - nsmap={None: OPF2_NS}) - from calibre.ebooks.metadata.opf2 import OPF - self.oeb.metadata.to_opf2(package) - self.metadata = OPF(BytesIO(etree.tostring(package))).to_book_metadata() - self.cover_data = None + self.oeb = oeb_book + self.input_plugin, self.opts, self.log = input_plugin, opts, log + self.output_path = output_path + from calibre.ebooks.oeb.base import OPF, OPF2_NS + from lxml import etree + from io import BytesIO + package = etree.Element(OPF('package'), + attrib={'version': '2.0', 'unique-identifier': 'dummy'}, + nsmap={None: OPF2_NS}) + from calibre.ebooks.metadata.opf2 import OPF + self.oeb.metadata.to_opf2(package) + self.metadata = OPF(BytesIO(etree.tostring(package))).to_book_metadata() + self.cover_data = None - if input_plugin.is_image_collection: - log.debug('Converting input as an image collection...') - self.convert_images(input_plugin.get_images()) - else: - log.debug('Converting input as a text based book...') - self.convert_text(oeb_book) + if input_plugin.is_image_collection: + log.debug('Converting input as an image collection...') + self.convert_images(input_plugin.get_images()) + else: + log.debug('Converting input as a text based book...') + self.convert_text(oeb_book) + finally: + os.environ.pop('CALIBRE_WEBKIT_NO_HINTING', None) def convert_images(self, images): from calibre.ebooks.pdf.writer import ImagePDFWriter