He visto a mucha gente pelearse con este asunto, pero no puedo encontrar una solución adecuada, ni una que se ajuste a mis necesidades.¿Hay alguna manera de transformar un resultado en papel de Rafael a PNG/SVG en cualquier navegador (incluidas IEs anteriores)?
Estoy haciendo algunos gráficos con Raphael, y básicamente necesito conseguirlos como PNG (para exportación, o uso posterior en un PDF, y algunas otras cosas). Para Firefox, Chrome, IE 9 y cualquier otro navegador con soporte SVG es fácil. En realidad, hay dos maneras de lograrlo: usar canvg para convertir el SVG en un elemento canvas y luego obtener los datos de la imagen; o enviar el SVG al servidor (C#) y usar una biblioteca para rasterizarlo.
El problema es, por supuesto, IE 8 y 7. En estos navegadores, Raphael genera VML, y aparentemente no hay manera de obtener la fuente SVG. No pude encontrar ningún rasterizador VML, así que me permite una única solución: traducir el VML a SVG, o volver a dibujar el papel en SVG.
Comprobé la librería vectorconvert por PHP, que en realidad usa transformaciones XSLT para traducir VML a SVG, pero no pude hacerlo funcionar (he probado varias herramientas para probar el XSL pero ninguna parece funcionar).
Me trataron de forzar la salida de Rafael SVG a un div oculto, cambiando sus propiedades .type
, .svg
y .vml
correctamente, pero eso no funcionó bien.
Creo que podría haber una manera de escribir el árbol SVG en un DIV oculto en IE; a pesar de que el navegador no lo mostrará, el texto debería estar allí.
¿Alguien sabe una manera de lograrlo? ¡Gracias!
El problema está tratando de admitir esos navegadores antiguos, dígales a los chicos de una manera amistosa: "Su navegador está desactualizado, por favor actualícelo para usar esta página. Haga clic aquí para descargar Internet Explorer 9" –
No estoy exactamente seguro cómo encaja en una solución, pero algo como esto podría ayudar ?: https://github.com/jspies/raphael.serialize Al menos puede permitirle obtener una vista coherente de lo que está en el papel, y hacer que la imagen en otra parte . – oli
También vea: http://blog.davidpadbury.com/2010/10/03/using-nodejs-to-render-js-charts-on-server/ una combinación de ambos podría lograrlo. – oli