mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Write out page sizes
This commit is contained in:
parent
d238cc4a6f
commit
41750fe5ff
@ -8,6 +8,9 @@ __copyright__ = '2013, Kovid Goyal <kovid at kovidgoyal.net>'
|
||||
|
||||
from calibre.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'
|
||||
@ -15,6 +18,16 @@ class DOCXOutput(OutputFormatPlugin):
|
||||
file_type = 'docx'
|
||||
|
||||
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='extract_to',
|
||||
help=_('Extract the contents of the generated %s file to the '
|
||||
'specified directory. The contents of the directory are first '
|
||||
|
@ -8,4 +8,4 @@ Lists
|
||||
Embed Fonts
|
||||
RTL text
|
||||
Lang support in run styles <w:lang>
|
||||
|
||||
Create graphical config widget
|
||||
|
@ -15,6 +15,7 @@ from calibre.ebooks.docx.names import namespaces
|
||||
from calibre.ebooks.docx.writer.styles import w, StylesManager
|
||||
from calibre.ebooks.oeb.stylizer import Stylizer as Sz, Style as St
|
||||
from calibre.ebooks.oeb.base import XPath, barename
|
||||
from calibre.ebooks.pdf.render.common import PAPER_SIZES
|
||||
|
||||
class Style(St):
|
||||
|
||||
@ -235,6 +236,18 @@ class Convert(object):
|
||||
doc.append(body)
|
||||
for block in self.blocks:
|
||||
block.serialize(body)
|
||||
width, height = PAPER_SIZES[self.opts.docx_page_size]
|
||||
if self.opts.docx_custom_page_size is not None:
|
||||
width, height = map(float, self.opts.docx_custom_page_size.partition('x')[0::2])
|
||||
width, height = int(20 * width), int(20 * height)
|
||||
def margin(which):
|
||||
return w(which), str(int(getattr(self.opts, 'margin_'+which) * 20))
|
||||
body.append(E.sectPr(
|
||||
E.pgSz(**{w('w'):str(width), w('h'):str(height)}),
|
||||
E.pgMar(**dict(map(margin, 'left top right bottom'.split()))),
|
||||
E.cols(**{w('space'):'720'}),
|
||||
E.docGrid(**{w('linePitch'):"360"}),
|
||||
))
|
||||
|
||||
dn = {k:v for k, v in namespaces.iteritems() if k in 'wr'}
|
||||
E = ElementMaker(namespace=dn['w'], nsmap=dn)
|
||||
|
Loading…
x
Reference in New Issue
Block a user