domingo, 27 de abril de 2014

Problemas con SOZI y otras extensiones en Inkscape 0.48.x para svgs con imágenes embebidas

Problemas con SOZI y otras extensiones en Inkscape 0.48.x para svgs con imágenes embebidas.

Para hacer una presentación con SOZI (extensión de Inkscape, http://sozi.baierouge.fr/) hay que tener cuidado con los links relativos a las imágenes. En un fichero normal, creado con Inkscape, los links son absolutos, de la siguiente manera:

xlink:href="file:///home/rleal/congresos/201404EGU/science/LogoIEO.png"

La forma de hacerlo relativo sería la siguiente (si el fichero svg está en /home/rleal/congresos/201404EGU:

xlink:href="./science/LogoIEO.png"

Y ya lo tenemos relativo.

Pero, por algún motivo puede ser interesante tener las imágenes embebidas. Por ejemplo, si vamos a distribuir el fichero y no queremos tener un montón de ficheros dependientes, o vamos a hacer una presentación y no nos interesa dejar un chorro de ficheros por ahí. En esos casos es bastante probable que el fichero generado (svg) tenga un tamaño bastante superior a 9.5 MB. Esto da errores en el XMLParser. Se ve en el sistema linux, que da más mensajes de debug, no así en Mac.

El error es algo parecido a:

Exception Type: XMLSyntaxError
Exception Value: internal error: Huge input lookup

El problema está documentado aquí libxml2-lxml-Parsing-large-9-5mb-XML-Documents. La solución está en using-python-lxml-etree-for-huge-xml-files. Se trata de

Try to create a custom XMLParser instance:
from lxml.etree import XMLParser, parse
p = XMLParser(huge_tree=True)
tree = parse('file.xml', parser=p)
En el caso particular de Inkscape 0.48.x, el fichero a retocar es /usr/share/inkscape/extensions/inkex.py.

En introducir la línea 66:

try:
    from lxml import etree
    p = etree.XMLParser(huge_tree=True)    <======

Luego, en la línea 131:

    def parse(self,file=None, parser=p):         <=======

Así ya puede parsear ficheros grandes. Y Sozi o cualquier extensión que quiera trabajar con ficheros grandes debería funcionar.

Que aproveche!

rleal

2 comentarios:

CSG dijo...
Este comentario ha sido eliminado por el autor.
CSG dijo...

Hola:
Soy nuevo en el uso de Inkscape, y vi Sozi como buena alternativa a Prezzi , el problema es que desaparecen las fotos de la presentacion, imagino que tiene que ver con los direccionamientos relativos o absolutos que mencionas, si pudieras ser mas extenso en tu explicación, me sería de gran ayuda.
Uso Sozi con inkscape portable para Windows.
Saludos cordiales