mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
IGN:...
This commit is contained in:
commit
b637b2907d
@ -1,4 +1,6 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
from __future__ import with_statement
|
||||||
|
|
||||||
__license__ = 'GPL 3'
|
__license__ = 'GPL 3'
|
||||||
__copyright__ = '2009, John Schember <john@nachtimwald.com>'
|
__copyright__ = '2009, John Schember <john@nachtimwald.com>'
|
||||||
__docformat__ = 'restructuredtext en'
|
__docformat__ = 'restructuredtext en'
|
||||||
@ -9,10 +11,12 @@ Convert OEB ebook format to PDF.
|
|||||||
|
|
||||||
#unit, papersize, orientation, custom_size, profile
|
#unit, papersize, orientation, custom_size, profile
|
||||||
|
|
||||||
import os
|
import os, glob
|
||||||
|
|
||||||
from calibre.customize.conversion import OutputFormatPlugin, \
|
from calibre.customize.conversion import OutputFormatPlugin, \
|
||||||
OptionRecommendation
|
OptionRecommendation
|
||||||
|
from calibre.ebooks.oeb.output import OEBOutput
|
||||||
|
from calibre.ptempfile import TemporaryDirectory
|
||||||
from calibre.ebooks.pdf.writer import PDFWriter
|
from calibre.ebooks.pdf.writer import PDFWriter
|
||||||
from calibre.ebooks.pdf.pageoptions import UNITS, unit, PAPER_SIZES, \
|
from calibre.ebooks.pdf.pageoptions import UNITS, unit, PAPER_SIZES, \
|
||||||
paper_size, ORIENTATIONS, orientation, PageOptions
|
paper_size, ORIENTATIONS, orientation, PageOptions
|
||||||
@ -66,6 +70,11 @@ class PDFOutput(OutputFormatPlugin):
|
|||||||
popts.paper_size = paper_size(opts.paper_size)
|
popts.paper_size = paper_size(opts.paper_size)
|
||||||
popts.orientation = orientation(opts.orientation)
|
popts.orientation = orientation(opts.orientation)
|
||||||
|
|
||||||
|
with TemporaryDirectory('_pdf_out') as oebdir:
|
||||||
|
OEBOutput(None).convert(oeb_book, oebdir, input_plugin, opts, log)
|
||||||
|
|
||||||
|
opf = glob.glob(os.path.join(oebdir, '*.opf'))[0]
|
||||||
|
|
||||||
writer = PDFWriter(log, popts)
|
writer = PDFWriter(log, popts)
|
||||||
|
|
||||||
close = False
|
close = False
|
||||||
@ -79,7 +88,7 @@ class PDFOutput(OutputFormatPlugin):
|
|||||||
|
|
||||||
out_stream.seek(0)
|
out_stream.seek(0)
|
||||||
out_stream.truncate()
|
out_stream.truncate()
|
||||||
writer.dump(oeb_book.spine, out_stream)
|
writer.dump(opf, out_stream)
|
||||||
|
|
||||||
if close:
|
if close:
|
||||||
out_stream.close()
|
out_stream.close()
|
||||||
|
@ -13,6 +13,7 @@ import os, shutil, sys
|
|||||||
|
|
||||||
from calibre.ptempfile import PersistentTemporaryDirectory
|
from calibre.ptempfile import PersistentTemporaryDirectory
|
||||||
from calibre.ebooks.pdf.pageoptions import PageOptions
|
from calibre.ebooks.pdf.pageoptions import PageOptions
|
||||||
|
from calibre.ebooks.metadata.opf2 import OPF
|
||||||
|
|
||||||
from PyQt4 import QtCore
|
from PyQt4 import QtCore
|
||||||
from PyQt4.Qt import QUrl, QEventLoop, SIGNAL, QObject, QApplication, QPrinter, \
|
from PyQt4.Qt import QUrl, QEventLoop, SIGNAL, QObject, QApplication, QPrinter, \
|
||||||
@ -37,10 +38,11 @@ class PDFWriter(QObject):
|
|||||||
self.tmp_path = PersistentTemporaryDirectory('_any2pdf_parts')
|
self.tmp_path = PersistentTemporaryDirectory('_any2pdf_parts')
|
||||||
self.popts = popts
|
self.popts = popts
|
||||||
|
|
||||||
def dump(self, spine, out_stream):
|
def dump(self, opfpath, out_stream):
|
||||||
self._delete_tmpdir()
|
self._delete_tmpdir()
|
||||||
|
|
||||||
self.render_queue = spine[:]
|
opf = OPF(opfpath, os.path.dirname(opfpath))
|
||||||
|
self.render_queue = [i.path for i in opf.spine]
|
||||||
self.combine_queue = []
|
self.combine_queue = []
|
||||||
self.out_stream = out_stream
|
self.out_stream = out_stream
|
||||||
|
|
||||||
@ -56,7 +58,7 @@ class PDFWriter(QObject):
|
|||||||
|
|
||||||
def _render_next(self):
|
def _render_next(self):
|
||||||
item = str(self.render_queue.pop(0))
|
item = str(self.render_queue.pop(0))
|
||||||
self.combine_queue.append(os.path.join(self.tmp_path, '%s_%i.pdf' % (os.path.basename(item), len(self.combine_queue))))
|
self.combine_queue.append(os.path.join(self.tmp_path, '%i.pdf' % (len(self.combine_queue) + 1)))
|
||||||
|
|
||||||
self.logger.info('Processing %s...' % item)
|
self.logger.info('Processing %s...' % item)
|
||||||
|
|
||||||
@ -64,9 +66,9 @@ class PDFWriter(QObject):
|
|||||||
|
|
||||||
def _render_html(self, ok):
|
def _render_html(self, ok):
|
||||||
if ok:
|
if ok:
|
||||||
item_path = os.path.join(self.tmp_path, '%s_%i.pdf' % (os.path.basename(str(self.view.url().toLocalFile())), len(self.combine_queue) - 1))
|
item_path = os.path.join(self.tmp_path, '%i.pdf' % len(self.combine_queue))
|
||||||
|
|
||||||
self.logger.debug('\tRendering item as %s' % item_path)
|
self.logger.debug('\tRendering item %s as %i' % (os.path.basename(str(self.view.url().toLocalFile())), len(self.combine_queue)))
|
||||||
|
|
||||||
printer = QPrinter(QPrinter.HighResolution)
|
printer = QPrinter(QPrinter.HighResolution)
|
||||||
printer.setPageMargins(self.popts.margin_left, self.popts.margin_top, self.popts.margin_right, self.popts.margin_bottom, self.popts.unit)
|
printer.setPageMargins(self.popts.margin_left, self.popts.margin_top, self.popts.margin_right, self.popts.margin_bottom, self.popts.unit)
|
||||||
@ -80,7 +82,7 @@ class PDFWriter(QObject):
|
|||||||
def _delete_tmpdir(self):
|
def _delete_tmpdir(self):
|
||||||
if os.path.exists(self.tmp_path):
|
if os.path.exists(self.tmp_path):
|
||||||
shutil.rmtree(self.tmp_path, True)
|
shutil.rmtree(self.tmp_path, True)
|
||||||
self.tmp_path = PersistentTemporaryDirectory('_any2pdf_parts')
|
self.tmp_path = PersistentTemporaryDirectory('_pdf_out_parts')
|
||||||
|
|
||||||
def _write(self):
|
def _write(self):
|
||||||
self.logger.info('Combining individual PDF parts...')
|
self.logger.info('Combining individual PDF parts...')
|
||||||
|
@ -24,23 +24,17 @@ class TXTOutput(OutputFormatPlugin):
|
|||||||
'Use \'old_mac\' for compatibility with Mac OS 9 and earlier. '
|
'Use \'old_mac\' for compatibility with Mac OS 9 and earlier. '
|
||||||
'For Mac OS X use \'unix\'. \'system\' will default to the newline '
|
'For Mac OS X use \'unix\'. \'system\' will default to the newline '
|
||||||
'type used by this OS.' % sorted(TxtNewlines.NEWLINE_TYPES.keys()))),
|
'type used by this OS.' % sorted(TxtNewlines.NEWLINE_TYPES.keys()))),
|
||||||
OptionRecommendation(name='prepend_author', recommended_value='true',
|
OptionRecommendation(name='prepend_metadata', recommended_value='false',
|
||||||
level=OptionRecommendation.LOW, long_switch='prepend_author',
|
level=OptionRecommendation.LOW, long_switch='prepend_metadata',
|
||||||
choices=['true', 'false'],
|
choices=['true', 'false'],
|
||||||
help=_('Write the author to the beginning of the file. '
|
help=_('Write the title and author to the beginning of the file. '
|
||||||
'Default is \'true\'. Use \'false\' to disable.')),
|
'Default is \'true\'. Use \'false\' to disable.')),
|
||||||
OptionRecommendation(name='prepend_title', recommended_value='true',
|
|
||||||
choices=['true', 'false'],
|
|
||||||
level=OptionRecommendation.LOW, long_switch='prepend_title',
|
|
||||||
help=_('Write the title to the beginning of the file. '
|
|
||||||
'Default is \'true\'. Use \'false\' to disable.'))
|
|
||||||
])
|
])
|
||||||
|
|
||||||
def convert(self, oeb_book, output_path, input_plugin, opts, log):
|
def convert(self, oeb_book, output_path, input_plugin, opts, log):
|
||||||
metadata = TxtMetadata()
|
metadata = TxtMetadata()
|
||||||
if opts.prepend_author.lower() == 'true':
|
if opts.prepend_metadata.lower() == 'true':
|
||||||
metadata.author = opts.authors if opts.authors else authors_to_string(oeb_book.metadata.authors.value) if oeb_book.metadata.authors != [] else _('Unknown')
|
metadata.author = opts.authors if opts.authors else authors_to_string(oeb_book.metadata.authors.value) if oeb_book.metadata.authors != [] else _('Unknown')
|
||||||
if opts.prepend_title.lower() == 'true':
|
|
||||||
metadata.title = opts.title if opts.title else oeb_book.metadata.title[0].value if oeb_book.metadata.title != [] else _('Unknown')
|
metadata.title = opts.title if opts.title else oeb_book.metadata.title[0].value if oeb_book.metadata.title != [] else _('Unknown')
|
||||||
|
|
||||||
writer = TxtWriter(TxtNewlines(opts.newline).newline, log)
|
writer = TxtWriter(TxtNewlines(opts.newline).newline, log)
|
||||||
|
@ -34,8 +34,8 @@ class TxtWriter(object):
|
|||||||
|
|
||||||
# Prepend metadata
|
# Prepend metadata
|
||||||
if metadata.author != None and metadata.author != '':
|
if metadata.author != None and metadata.author != '':
|
||||||
out = (u'%s%s%s%s' % (metadata.author.upper(), self.newline, self.newline, self.newline)) + out
|
|
||||||
if metadata.title != None and metadata.title != '':
|
if metadata.title != None and metadata.title != '':
|
||||||
|
out = (u'%s%s%s%s' % (metadata.author.upper(), self.newline, self.newline, self.newline)) + out
|
||||||
out = (u'%s%s%s%s' % (metadata.title.upper(), self.newline, self.newline, self.newline)) + out
|
out = (u'%s%s%s%s' % (metadata.title.upper(), self.newline, self.newline, self.newline)) + out
|
||||||
|
|
||||||
# Put two blank lines at end of file
|
# Put two blank lines at end of file
|
||||||
|
Loading…
x
Reference in New Issue
Block a user