Bueno, pues aquí va. Se necesita python y pyxml que se pueden encontrar en los repositorios de tu distribución o:
- python: http://www.python.org/download/
- pyxml: http://sourceforge.net/project/showf...?group_id=6473
La verdad es que es bastante lento (15s una novela normalita) para lo que hace debido a las librerías de xml que utilizo, pero bueno, ya lo arreglaré si me aburro.
Para usarlo, en una consola escribir ."/footnote.py FICHERO.odt". La ejecución queda tal que así:
Código:
$ ./footnote.py FICHERO.odt
Abriendo fichero ODT... OK
Leyendo fichero XML... OK
Transformando fichero XML... OK (19 notas al pie convertidas)
Escribiendo fichero XML... OK
Grabando fichero ODT... OK
El código lo pongo aquí, ya que no me deja poner adjuntos. Tan sólo hay que copypastear y guardar con extensión py.
Código:
#!/usr/bin/python
import sys
import zipfile
from xml.dom.ext.reader.Sax2 import Reader
from xml.dom.ext import Print
from StringIO import StringIO
import re
if (len(sys.argv) != 2):
print "Este programa acepta un argumento: fichero .odt a abrir"
exit()
try:
print "Abriendo fichero ODT...",
sys.stdout.flush()
zip = zipfile.ZipFile(sys.argv[1], "a")
data = zip.read("content.xml")
print "OK"
except:
print
print "Error al abrir el fichero"
exit()
print "Leyendo fichero XML...",
sys.stdout.flush()
doc = Reader().fromString(data)
print "OK"
print "Transformando fichero XML...",
sys.stdout.flush()
i = 0
for n in doc.getElementsByTagName("text:note"):
if n.getAttributeNS("urn:oasis:names:tc:opendocument:xmlns:text:1.0","note-class") == "footnote":
i += 1
nota = StringIO()
nodoCuerpo = n.getElementsByTagName("text:note-body")[0]
nodoP = nodoCuerpo.getElementsByTagName("text:p")[0]
nuevo = doc.createElement("text:span")
nuevo.appendChild(doc.createTextNode("["))
for s in nodoP.childNodes:
nuevo.appendChild(s.cloneNode(nuevo))
nuevo.appendChild(doc.createTextNode("]"))
n._get_parentNode().replaceChild(nuevo,n)
print "OK (" + str(i) + " notas al pie convertidas)"
print "Escribiendo fichero XML...",
sys.stdout.flush()
sdata = StringIO()
Print(doc, stream=sdata)
print "OK"
print "Grabando fichero ODT...",
sys.stdout.flush()
zip.writestr("content.xml", sdata.getvalue())
zip.close()
print "OK"
A ver si alguien lo prueba y me dice si le funciona.
Edit: Yo no he conseguido hacer lo que comenta surquizu en el Hanlin. En ningún formato de los que he probado me ha salido nada. En algún libro si me ha salido el texto de la nota al final de la página A4 (unas 3 páginas más adelante en el lector), pero sólo en los que no viene bien hecho la nota al pie (está puesta con un * a mano, en vez de con la función de notas al pie del procesador de textos).
Si alguien consiguiera hacerlo de la otra manera sería bastante mejor, pero de momento la chapuza de programa sirve.