mirror of
https://github.com/gryf/ebook-converter.git
synced 2026-01-05 18:54:11 +01:00
Here is the first batch of modules, which are needed for converting several formats to LRF. Some of the logic has been change, more cleanups will follow.
94 lines
4.3 KiB
Python
94 lines
4.3 KiB
Python
#!/usr/bin/env python2
|
|
# vim:fileencoding=utf-8
|
|
from __future__ import absolute_import, division, print_function, unicode_literals
|
|
|
|
__license__ = 'GPL v3'
|
|
__copyright__ = '2013, Kovid Goyal <kovid at kovidgoyal.net>'
|
|
|
|
from ebook_converter.customize.conversion import OutputFormatPlugin, OptionRecommendation
|
|
|
|
PAGE_SIZES = ['a0', 'a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'b0', 'b1',
|
|
'b2', 'b3', 'b4', 'b5', 'b6', 'legal', 'letter']
|
|
|
|
|
|
class DOCXOutput(OutputFormatPlugin):
|
|
|
|
name = 'DOCX Output'
|
|
author = 'Kovid Goyal'
|
|
file_type = 'docx'
|
|
commit_name = 'docx_output'
|
|
ui_data = {'page_sizes': PAGE_SIZES}
|
|
|
|
options = {
|
|
OptionRecommendation(name='docx_page_size', recommended_value='letter',
|
|
level=OptionRecommendation.LOW, choices=PAGE_SIZES,
|
|
help=_('The size of the page. Default is letter. Choices '
|
|
'are %s') % PAGE_SIZES),
|
|
|
|
OptionRecommendation(name='docx_custom_page_size', recommended_value=None,
|
|
help=_('Custom size of the document. Use the form widthxheight '
|
|
'EG. `123x321` to specify the width and height (in pts). '
|
|
'This overrides any specified page-size.')),
|
|
|
|
OptionRecommendation(name='docx_no_cover', recommended_value=False,
|
|
help=_('Do not insert the book cover as an image at the start of the document.'
|
|
' If you use this option, the book cover will be discarded.')),
|
|
|
|
OptionRecommendation(name='preserve_cover_aspect_ratio', recommended_value=False,
|
|
help=_('Preserve the aspect ratio of the cover image instead of stretching'
|
|
' it out to cover the entire page.')),
|
|
|
|
OptionRecommendation(name='docx_no_toc', recommended_value=False,
|
|
help=_('Do not insert the table of contents as a page at the start of the document.')),
|
|
|
|
OptionRecommendation(name='extract_to',
|
|
help=_('Extract the contents of the generated %s file to the '
|
|
'specified directory. The contents of the directory are first '
|
|
'deleted, so be careful.') % 'DOCX'),
|
|
|
|
OptionRecommendation(name='docx_page_margin_left', recommended_value=72.0,
|
|
level=OptionRecommendation.LOW,
|
|
help=_('The size of the left page margin, in pts. Default is 72pt.'
|
|
' Overrides the common left page margin setting.')
|
|
),
|
|
|
|
OptionRecommendation(name='docx_page_margin_top', recommended_value=72.0,
|
|
level=OptionRecommendation.LOW,
|
|
help=_('The size of the top page margin, in pts. Default is 72pt.'
|
|
' Overrides the common top page margin setting, unless set to zero.')
|
|
),
|
|
|
|
OptionRecommendation(name='docx_page_margin_right', recommended_value=72.0,
|
|
level=OptionRecommendation.LOW,
|
|
help=_('The size of the right page margin, in pts. Default is 72pt.'
|
|
' Overrides the common right page margin setting, unless set to zero.')
|
|
),
|
|
|
|
OptionRecommendation(name='docx_page_margin_bottom', recommended_value=72.0,
|
|
level=OptionRecommendation.LOW,
|
|
help=_('The size of the bottom page margin, in pts. Default is 72pt.'
|
|
' Overrides the common bottom page margin setting, unless set to zero.')
|
|
),
|
|
|
|
}
|
|
|
|
def convert_metadata(self, oeb):
|
|
from lxml import etree
|
|
from ebook_converter.ebooks.oeb.base import OPF, OPF2_NS
|
|
from ebook_converter.ebooks.metadata.opf2 import OPF as ReadOPF
|
|
from io import BytesIO
|
|
package = etree.Element(OPF('package'), attrib={'version': '2.0'}, nsmap={None: OPF2_NS})
|
|
oeb.metadata.to_opf2(package)
|
|
self.mi = ReadOPF(BytesIO(etree.tostring(package, encoding='utf-8')), populate_spine=False, try_to_guess_cover=False).to_book_metadata()
|
|
|
|
def convert(self, oeb, output_path, input_plugin, opts, log):
|
|
from ebook_converter.ebooks.docx.writer.container import DOCX
|
|
from ebook_converter.ebooks.docx.writer.from_html import Convert
|
|
docx = DOCX(opts, log)
|
|
self.convert_metadata(oeb)
|
|
Convert(oeb, docx, self.mi, not opts.docx_no_cover, not opts.docx_no_toc)()
|
|
docx.write(output_path, self.mi)
|
|
if opts.extract_to:
|
|
from ebook_converter.ebooks.docx.dump import do_dump
|
|
do_dump(output_path, opts.extract_to)
|