2012-01-13 10 views
5

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!

+0

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" –

+0

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

+0

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

Respuesta

1

Rendir SVG también se puede utilizar CanVG biblioteca.
Es SVG analizador y procesador con lienzo resultante.
A continuación puede simplemente generar datos de píxeles de lienzo a PNG.

Para resolver los límites de IE, puede usar Chrome Frame.

Cuestiones relacionadas