mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Fix broken PDF output on OS X
This commit is contained in:
commit
5130763728
@ -11,6 +11,7 @@ Write content to PDF.
|
|||||||
import os
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
|
|
||||||
|
from calibre import isosx
|
||||||
from calibre.ptempfile import PersistentTemporaryDirectory
|
from calibre.ptempfile import PersistentTemporaryDirectory
|
||||||
from calibre.ebooks.pdf.pageoptions import unit, paper_size, \
|
from calibre.ebooks.pdf.pageoptions import unit, paper_size, \
|
||||||
orientation
|
orientation
|
||||||
@ -164,6 +165,12 @@ class PDFWriter(QObject): # {{{
|
|||||||
self.logger.debug('\tRendering item %s as %i.pdf' % (os.path.basename(str(self.view.url().toLocalFile())), len(self.combine_queue)))
|
self.logger.debug('\tRendering item %s as %i.pdf' % (os.path.basename(str(self.view.url().toLocalFile())), len(self.combine_queue)))
|
||||||
printer = get_pdf_printer(self.opts)
|
printer = get_pdf_printer(self.opts)
|
||||||
printer.setOutputFileName(item_path)
|
printer.setOutputFileName(item_path)
|
||||||
|
# We have to set the engine to Native on OS X after the call to set
|
||||||
|
# filename. Setting a filename with .pdf as the extension causes
|
||||||
|
# Qt to set the format to use Qt's PDF engine even if native was
|
||||||
|
# previously set on the printer.
|
||||||
|
if isosx:
|
||||||
|
printer.setOutputFormat(QPrinter.NativeFormat)
|
||||||
self.view.print_(printer)
|
self.view.print_(printer)
|
||||||
printer.abort()
|
printer.abort()
|
||||||
self._render_book()
|
self._render_book()
|
||||||
@ -179,6 +186,8 @@ class PDFWriter(QObject): # {{{
|
|||||||
item_path = os.path.join(self.tmp_path, 'cover.pdf')
|
item_path = os.path.join(self.tmp_path, 'cover.pdf')
|
||||||
printer = get_pdf_printer(self.opts)
|
printer = get_pdf_printer(self.opts)
|
||||||
printer.setOutputFileName(item_path)
|
printer.setOutputFileName(item_path)
|
||||||
|
if isosx:
|
||||||
|
printer.setOutputFormat(QPrinter.NativeFormat)
|
||||||
self.combine_queue.insert(0, item_path)
|
self.combine_queue.insert(0, item_path)
|
||||||
p = QPixmap()
|
p = QPixmap()
|
||||||
p.loadFromData(self.cover_data)
|
p.loadFromData(self.cover_data)
|
||||||
@ -202,7 +211,7 @@ class PDFWriter(QObject): # {{{
|
|||||||
inputPDF = PdfFileReader(item_stream)
|
inputPDF = PdfFileReader(item_stream)
|
||||||
for page in inputPDF.pages:
|
for page in inputPDF.pages:
|
||||||
outPDF.addPage(page)
|
outPDF.addPage(page)
|
||||||
outPDF.write(self.out_stream)
|
outPDF.write(self.out_stream)
|
||||||
finally:
|
finally:
|
||||||
self._delete_tmpdir()
|
self._delete_tmpdir()
|
||||||
self.loop.exit(0)
|
self.loop.exit(0)
|
||||||
@ -229,6 +238,8 @@ class ImagePDFWriter(object):
|
|||||||
def render_images(self, outpath, mi, items):
|
def render_images(self, outpath, mi, items):
|
||||||
printer = get_pdf_printer(self.opts, for_comic=True)
|
printer = get_pdf_printer(self.opts, for_comic=True)
|
||||||
printer.setOutputFileName(outpath)
|
printer.setOutputFileName(outpath)
|
||||||
|
if isosx:
|
||||||
|
printer.setOutputFormat(QPrinter.NativeFormat)
|
||||||
printer.setDocName(mi.title)
|
printer.setDocName(mi.title)
|
||||||
printer.setCreator(u'%s [%s]'%(__appname__, __version__))
|
printer.setCreator(u'%s [%s]'%(__appname__, __version__))
|
||||||
# Seems to be no way to set author
|
# Seems to be no way to set author
|
||||||
|
Loading…
x
Reference in New Issue
Block a user