Fix broken PDF output on OS X

This commit is contained in:
Kovid Goyal 2011-09-11 09:20:30 -06:00
commit 5130763728

View File

@ -11,6 +11,7 @@ Write content to PDF.
import os
import shutil
from calibre import isosx
from calibre.ptempfile import PersistentTemporaryDirectory
from calibre.ebooks.pdf.pageoptions import unit, paper_size, \
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)))
printer = get_pdf_printer(self.opts)
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)
printer.abort()
self._render_book()
@ -179,6 +186,8 @@ class PDFWriter(QObject): # {{{
item_path = os.path.join(self.tmp_path, 'cover.pdf')
printer = get_pdf_printer(self.opts)
printer.setOutputFileName(item_path)
if isosx:
printer.setOutputFormat(QPrinter.NativeFormat)
self.combine_queue.insert(0, item_path)
p = QPixmap()
p.loadFromData(self.cover_data)
@ -202,7 +211,7 @@ class PDFWriter(QObject): # {{{
inputPDF = PdfFileReader(item_stream)
for page in inputPDF.pages:
outPDF.addPage(page)
outPDF.write(self.out_stream)
outPDF.write(self.out_stream)
finally:
self._delete_tmpdir()
self.loop.exit(0)
@ -229,6 +238,8 @@ class ImagePDFWriter(object):
def render_images(self, outpath, mi, items):
printer = get_pdf_printer(self.opts, for_comic=True)
printer.setOutputFileName(outpath)
if isosx:
printer.setOutputFormat(QPrinter.NativeFormat)
printer.setDocName(mi.title)
printer.setCreator(u'%s [%s]'%(__appname__, __version__))
# Seems to be no way to set author