View Single Post
Old 10-18-2013, 01:57 PM   #1
dawood
Enthusiast
dawood began at the beginning.
 
Posts: 26
Karma: 10
Join Date: Oct 2013
Device: none
Conversion of odt produced from latex

I don't know if anyone else has come across this. I usually write documents in latex and use a couple of commands on the source files that output an .odt:

latexmk file.tex
mk4ht ebook file.tex

Works fine, except that calibre fails to convert it. Calibre works fine if I create a new odt in libreoffice however, so mk4ht is failing to do something.

This is the output from the conversion that fails:

Code:
Extracting ODT file...
Traceback (most recent call last):
  File "/usr/bin/calibre-parallel", line 20, in <module>
    sys.exit(main())
  File "/usr/lib64/calibre/calibre/utils/ipc/worker.py", line 189, in main
    result = func(*args, **kwargs)
  File "/usr/lib64/calibre/calibre/gui2/convert/gui_conversion.py", line 31, in gui_convert_override
    override_input_metadata=True)
  File "/usr/lib64/calibre/calibre/gui2/convert/gui_conversion.py", line 25, in gui_convert
    plumber.run()
  File "/usr/lib64/calibre/calibre/ebooks/conversion/plumber.py", line 1035, in run
    accelerators, tdir)
  File "/usr/lib64/calibre/calibre/customize/conversion.py", line 241, in __call__
    log, accelerators)
  File "/usr/lib64/calibre/calibre/ebooks/conversion/plugins/odt_input.py", line 23, in convert
    return Extract()(stream, '.', log)
  File "/usr/lib64/calibre/calibre/ebooks/odt/input.py", line 263, in __call__
    mi = get_metadata(stream, 'odt')
  File "/usr/lib64/calibre/calibre/ebooks/metadata/odt.py", line 165, in get_metadata
    parser.parse(StringIO(content))
  File "/usr/lib64/python2.7/xml/sax/expatreader.py", line 107, in parse
    xmlreader.IncrementalParser.parse(self, source)
  File "/usr/lib64/python2.7/xml/sax/xmlreader.py", line 123, in parse
    self.feed(buffer)
  File "/usr/lib64/python2.7/xml/sax/expatreader.py", line 207, in feed
    self._parser.Parse(data, isFinal)
  File "/usr/lib64/python2.7/xml/sax/expatreader.py", line 381, in external_entity_ref
    "")
  File "/usr/lib64/python2.7/xml/sax/saxutils.py", line 304, in prepare_input_source
    f = urllib.urlopen(source.getSystemId())
  File "/usr/lib64/python2.7/urllib.py", line 86, in urlopen
    return opener.open(url)
  File "/usr/lib64/python2.7/urllib.py", line 207, in open
    return getattr(self, name)(url)
  File "/usr/lib64/python2.7/urllib.py", line 462, in open_file
    return self.open_local_file(url)
  File "/usr/lib64/python2.7/urllib.py", line 476, in open_local_file
    raise IOError(e.errno, e.strerror, e.filename)
IOError: [Errno 2] No such file or directory: 'office.dtd'
I looked for the file office.dtd in an .odt made in libreoffice but it doesn't exist there either, so I don't know what the problem is.

*Edit: I did find this: /opt/libreoffice3.6/share/dtd/officedocument/1_0/office.dtd
dawood is offline   Reply With Quote