2009-08-30 16 views
5

Estoy compilando un conjunto de archivos SVG que incluyen una cantidad desafortunada de valores codificados (deben imprimir con algunos elementos dimensionados en mm, mientras que otros deben escalarse como un porcentaje, y la mayoría de los valores definido en relación con el otro). En lugar de manejar esos números a mano (no lo permita el cielo, quiero cambiar algo), pensé que podría usar mi pitón de martillo de confianza para la tarea.Crear archivos SVG usando Python

SVG 1.1 no es compatible de forma nativa con ningún tipo de esquema variable que me permita hacer lo que quiero, y no estoy interesado en introducir javascript o especificaciones de borrador w3c inestables en la mezcla. Una solución obvia es utilizar el formato de cadenas para leer, analizar y reemplazar variables en mi archivo SVG. Esto parece una mala idea para un documento más grande, pero tiene la ventaja de ser simple y portátil.

Mi segundo intento fue investigar las bibliotecas disponibles de python-> svg. Desafortunadamente, parece que las pocas opciones tienden a ser demasiado nuevas (pySVG aún tiene una interfaz inestable), son demasiado antiguas (no se han actualizado desde 2005) o están abandonadas. No he mirado de cerca, pero mi sensación es que las aplicaciones de gráficos no son lo suficientemente flexibles como para generar mis documentos.

La tercera opción que encontré fue la de usar alguna otra herramienta de dibujo (cairo, por ejemplo) que puede ser convencida para sacar svg. Esto tiene la (potencial) desventaja de no admitir de forma nativa los tamaños de elementos absolutos que son tan importantes para mí, pero podría incluir la capacidad de generar PDF, lo que sería conveniente.

Ya he hecho la búsqueda de Google, así que estoy buscando información de personas que han usado cualquiera de los métodos mencionados, o que quizás conozcan algún otro enfoque. La estabilidad a largo plazo de cualquier solución que se elija es importante para mí (fue la razón original de la codificación manual en lugar de simplemente usar el ilustrador).

En este punto, me estoy inclinando por la primera solución, por lo que las recomendaciones sobre las mejores prácticas para usar python para analizar y reemplazar variables en archivos XML son bienvenidas.

Respuesta

4

Un motor de plantillas basado en marcado, como genshi puede ser útil. Te permitiría hacer la mayor parte de la creación usando una herramienta SVG y realizar la personalización en la plantilla. Definitivamente lo preferiría a XSLT.

+0

Ese es un buen punto. XSLT todavía me hace estremecer. Y para documentos SVG, Genshi debería permitirme desarrollar con valores de prueba, y luego reemplazarlos según sea conveniente. Sería capaz de mantener las plantillas abiertas en mi navegador mientras trabajo. –

0

Dado que SVG es XML, tal vez podría usar XSLT para transformar un archivo XML de origen que contenga sus variables en SVG. En su hoja de estilo XSLT, tendría plantillas correspondientes a varios elementos de su ilustración SVG, que cambiarían su salida en función de los valores encontrados en el archivo XML de origen.

O podría utilizar una plantilla SVG como fuente y transformarla en la versión final, con los valores pasados ​​como parámetros para el procesador XSLT.

Puede usar XSLT directamente, o vía Python si necesita alguna lógica que sea más fácil de realizar en un idioma tradicional.

+0

Eso sería una variación de su primera solución, utilizando una solución adaptada para tratar con XML y proporcionando herramientas poderosas para ayudarlo, como XPath. –

+0

He hecho cosas en el pasado usando XSLT, y salí con un sabor desagradable en la boca. Los analizadores no están estandarizados en lo que respecta a las características, y las transformaciones simples de las fechas involucran media página de cruft. Me gustaría mantenerme alejado de ellos, pero podría echar otro vistazo si no hay una mejor opción. –

+0

Aunque en realidad, pensando más en ello, tal vez mi tarea sea lo suficientemente simple como para que XSLT sea el camino correcto. Sería bueno mantener los lenguajes más complejos fuera de la ecuación. –

Cuestiones relacionadas