2012-01-13 11 views
5

Ho visto un sacco di persone che combattono con questa materia, ma non riesco a trovare una soluzione adeguata, né che soddisfi le mie esigenze.C'è un modo per trasformare un risultato di carta Raffaello in PNG/SVG in qualsiasi browser (compresi IE meno recenti)?

Sto facendo alcuni grafici con Raphael, e in pratica ho bisogno di prenderli come PNG (per l'esportazione, o in seguito, in un PDF e altre cose). Per Firefox, Chrome, IE 9 e qualsiasi altro browser con supporto SVG è facile. Ci sono in realtà due modi per ottenerlo: usare canvg per rendere l'SVG in un elemento canvas e quindi ottenere i dati dell'immagine; o inviare l'SVG al server (C#) e usare una libreria per rasterizzarla.

Il problema è, naturalmente, IE 8 e 7. In questi browser, Raphael emette VML, e non c'è modo apparentemente di ottenere il sorgente SVG. Non sono riuscito a trovare alcun rasterizzatore VML, quindi mi consente un'unica soluzione: tradurre VML in SVG o ridisegnare il foglio in SVG.

Ho controllato la libreria vectorconvert per PHP, che utilizza effettivamente le trasformazioni XSLT per tradurre VML in SVG, ma non ho potuto farlo funzionare (ho provato diversi strumenti per testare l'XSL ma nessuno dei due sembra funzionare).

ho cercato di forzare Raffaello per l'output SVG ad un div nascosto, cambiando le sue proprietà .type, .svg, e .vml correttamente, ma che non ha funzionato neanche.

Penso che ci possa essere un modo per scrivere l'albero SVG in un DIV nascosto mentre si trova in IE; nonostante non venga mostrato dal browser, il testo dovrebbe essere lì.

Qualcuno sa come raggiungerlo? Grazie!

+0

Il problema è cercare di supportare quei vecchi browser, dire a quei ragazzi in modo amichevole: "Il tuo browser non è aggiornato, ti preghiamo di aggiornarlo per utilizzare questa pagina. Clicca qui per scaricare Internet Explorer 9" –

+0

Non sono proprio sicuro come si adatta a una soluzione, ma sarebbe qualcosa di simile a questo ?: https://github.com/jspies/raphael.serialize Potrebbe almeno consentire di ottenere una visione coerente di ciò che è sulla carta e rendere l'immagine altrove . – oli

+0

Guarda anche: http://blog.davidpadbury.com/2010/10/03/using-nodejs-to-render-js-charts-on-server/ una combinazione dei due potrebbe raggiungere questo obiettivo. – oli

risposta

1

Per il rendering di SVG è anche possibile utilizzare la libreria CanVG.
È SVG parser e renderer con area di lavoro con output.
Successivamente è possibile semplicemente stampare i dati dei pixel da su tela a PNG.

Per risolvere i limiti di IE è possibile utilizzare Chrome Frame.

Problemi correlati