4 # Author: Dave Kuhlman <dkuhlman@rexx.com>
5 # Copyright: This module has been placed in the public domain.
8 Adapt a word-processor-generated styles.odt for odtwriter use:
10 Drop page size specifications from styles.xml in STYLE_FILE.odt.
11 See https://docutils.sourceforge.io/docs/user/odt.html#page-size
14 # Author: Michael Schutte <michi@uiae.at>
16 from xml
.etree
import ElementTree
as etree
20 from tempfile
import mkstemp
25 "style": "urn:oasis:names:tc:opendocument:xmlns:style:1.0",
26 "fo": "urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
30 def prepstyle(filename
):
32 zin
= zipfile
.ZipFile(filename
)
33 styles
= zin
.open("styles.xml")
36 # some extra effort to preserve namespace prefixes
37 for event
, elem
in etree
.iterparse(styles
, events
=("start", "start-ns")):
38 if event
== "start-ns":
39 etree
.register_namespace(elem
[0], elem
[1])
40 elif event
== "start":
46 for el
in root
.findall(".//style:page-layout-properties",
47 namespaces
=NAMESPACES
):
48 for attr
in list(el
.attrib
):
49 if attr
.startswith("{%s}" % NAMESPACES
["fo"]):
53 zout
= zipfile
.ZipFile(os
.fdopen(tempname
[0], "wb"), "w",
56 for item
in zin
.infolist():
57 if item
.filename
== "styles.xml":
58 zout
.writestr(item
, etree
.tostring(root
, encoding
="UTF-8"))
60 zout
.writestr(item
, zin
.read(item
.filename
))
64 shutil
.move(tempname
[1], filename
)
69 if len(args
) != 1 or args
[0] in ('-h', '--help'):
70 print(__doc__
, file=sys
.stderr
)
71 print("Usage: %s STYLE_FILE.odt\n" % sys
.argv
[0], file=sys
.stderr
)
77 if __name__
== '__main__':