En calidad de Afiliado de Amazon, obtengo ingresos por las compras adscritas que cumplen los requisitos aplicables
Página 2 de 2 PrimerPrimer 12
Resultados 11 al 12 de 12

Tema: Notas al pie

  1. #11
    Jovencit@ en el foro Avatar de javitonino
    Fecha de ingreso
    06 ago, 08
    Mensajes
    6

    Predeterminado

    Adjunto el código que ya funciona para ese libro y cualquiera que para las notas utilice enlaces a marcadores dentro del propio documento, siempre que esos marcadores se llamen "footnoteLO-QUE-SEA".

    Los resultados de las pruebas siempre son bienvenidos, y si no funcionan porque el libro tiene los pies de página hechos de otro manera, mejor.

    ACTUALIZADO: Ahora funciona mejor en el lector. En algún caso se veía bien en el PC pero no en el lector.

    Código:
    #!/usr/bin/python
    #coding=UTF8
    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:"
    print "	1ª pasada (notas al pie)...",
    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
    		nodoCuerpo = n.getElementsByTagName("text:note-body")[0]
    		nodoP = nodoCuerpo.getElementsByTagName("text:p")[0]
    		
    		nodoCambiar = n._get_parentNode()._get_parentNode()
    		
    		nuevo = doc.createElement("text:span")
    		nuevo.appendChild(doc.createTextNode("["))
    		
    		for s in nodoP.childNodes:
    			nuevo.appendChild(s.cloneNode(nuevo))
    			
    		nuevo.appendChild(doc.createTextNode("]"))
    
    		nodoCambiar._get_parentNode().replaceChild(nuevo,nodoCambiar)
    
    print "OK (" + str(i) + " notas convertidas)"
    
    #Enlaces a marcadores de la forma #footnoteXX
    print "	2ª pasada (enlaces)...",
    sys.stdout.flush()
    i = 0
    bookmarks = doc.getElementsByTagName("text:bookmark")
    bookmarks += doc.getElementsByTagName("text:bookmark-start")
    for n in doc.getElementsByTagName("text:a"):
    	destino = n.getAttributeNS("http://www.w3.org/1999/xlink","href")[1:]
    	if destino.find("footnote") != -1 and destino.find("footnotelink") == -1:
    		numeroNota = destino[destino.find("footnote")+8:]
    		bk = [b for b in bookmarks if b.getAttributeNS("urn:oasis:names:tc:opendocument:xmlns:text:1.0","name") == destino]
    		if len(bk) != 1:
    			print
    			print "Error en el fichero, link aapunta a destino inexistente"
    			break;
    		#bk es el favorito de destino
    		bk = bk[0]
    		while (bk):
    			if bk.nodeType == 3:
    				#Nodo texto
    				padre = n._get_parentNode()
    				txt = bk.cloneNode(padre)
    				txt._set_data("[" + txt._get_data() + "]")
    				padre.replaceChild(txt,n)
    				i += 1
    				break;
    			else:
    				bk = bk._get_nextSibling()
    
    print "OK (" + str(i) + " notas 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"
    Odio los avatares...

  2. #12
    Veteran@ en el foro Avatar de Pendergast
    Fecha de ingreso
    15 jun, 08
    Mensajes
    642

    Predeterminado

    Perfecto!!!
    Ha funcionado perfectamente, ya tengo los pies de página insertados en el texto entre paréntesis.

    Gran trabajo.
    Muchas gracias

Temas similares

  1. entrar notas
    Por José Ramón en el foro Onyx Boox
    Respuestas: 1
    Último mensaje: 30/03/2010, 08:40
  2. Papyre 5.1 y notas al pie.
    Por guachilipu en el foro Formatos de e-books
    Respuestas: 8
    Último mensaje: 22/01/2010, 12:43
  3. Notas a pie de página?
    Por blanca_luz en el foro Sony Reader
    Respuestas: 4
    Último mensaje: 18/11/2009, 10:27
  4. Notas en el iLiad....
    Por pacharico en el foro iLiad
    Respuestas: 2
    Último mensaje: 25/09/2009, 10:36
  5. Notas en el SONY PRS 700
    Por mril en el foro Sony Reader
    Respuestas: 4
    Último mensaje: 13/07/2009, 14:05

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •