1#!/usr/local/bin/python3.8 2 3# $Id: rst2odt_prepstyles.py 8346 2019-08-26 12:11:32Z milde $ 4# Author: Dave Kuhlman <dkuhlman@rexx.com> 5# Copyright: This module has been placed in the public domain. 6 7""" 8Fix a word-processor-generated styles.odt for odtwriter use: Drop page size 9specifications from styles.xml in STYLE_FILE.odt. 10""" 11 12# Author: Michael Schutte <michi@uiae.at> 13 14from __future__ import print_function 15 16from lxml import etree 17import sys 18import zipfile 19from tempfile import mkstemp 20import shutil 21import os 22 23NAMESPACES = { 24 "style": "urn:oasis:names:tc:opendocument:xmlns:style:1.0", 25 "fo": "urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" 26} 27 28 29def prepstyle(filename): 30 31 zin = zipfile.ZipFile(filename) 32 styles = zin.read("styles.xml") 33 34 root = etree.fromstring(styles) 35 for el in root.xpath("//style:page-layout-properties", 36 namespaces=NAMESPACES): 37 for attr in el.attrib: 38 if attr.startswith("{%s}" % NAMESPACES["fo"]): 39 del el.attrib[attr] 40 41 tempname = mkstemp() 42 zout = zipfile.ZipFile(os.fdopen(tempname[0], "w"), "w", 43 zipfile.ZIP_DEFLATED) 44 45 for item in zin.infolist(): 46 if item.filename == "styles.xml": 47 zout.writestr(item, etree.tostring(root)) 48 else: 49 zout.writestr(item, zin.read(item.filename)) 50 51 zout.close() 52 zin.close() 53 shutil.move(tempname[1], filename) 54 55 56def main(): 57 args = sys.argv[1:] 58 if len(args) != 1: 59 print(__doc__, file=sys.stderr) 60 print("Usage: %s STYLE_FILE.odt\n" % sys.argv[0], file=sys.stderr) 61 sys.exit(1) 62 filename = args[0] 63 prepstyle(filename) 64 65 66if __name__ == '__main__': 67 main() 68