2011-04-15 20 views
5

¿Existe una biblioteca para generar los mismos gráficos para los mismos datos, tanto en Java como en Javascript?Hybrid server-side-java y client-side-javascript charting library?

Mi tarea es a la vez:

  • pantalla una cierta carta dinámica llamativo en un navegador, mejor con la información de herramientas dinámicas, zoom y así sucesivamente (estoy pensando Javascript aquí)
  • y generar la misma (o similar) en el lado del servidor, en Java, para enviarlos automáticamente al en los correos electrónicos (no hay ningún navegador en este escenario).

Me gustaría evitar la interoperabilidad de Flash para iPhone.

Hay algunos gráficos estáticos del lado del servidor como Eastwood/JFreeChart, pero me gustaría hacerlo más vivo en el navegador.

Sí, puedo cargar imágenes estáticas a través de Ajax. ¿Hay otras opciones?

+0

¿Qué pasa con [Flot] (http://code.google.com/p/flot/)? Desafortunadamente, tendrías que renderizar en un lienzo en un navegador para exportarlo. Podría combinarlo con JFreeChart/Eastwood y tener dos gráficos de la misma información, aunque se verían diferentes. – justkt

+0

Ver también https://stackoverflow.com/questions/11331076/how-to-use-a-javascript-chart-library-like-d3-js-or-rapha%C3%ABl-in-server-side-java – Pino

Respuesta

9

¿Cómo es que esta pregunta tiene más de un año de antigüedad pero no obtuvo ninguna respuesta? Sugiero un enfoque bastante cuestionable y algo hardcore.


uso de JavaScript, que es increíble!

Aquí es su fórmula de éxito: d3.js+jsdom+Rhino+Batik

Específicamente:

  1. generar sus gráficos usando alguna biblioteca JavaScript resbaladiza como d3.js.

  2. Utilice jsdom para ejecutar d3 en el lado del servidor. Jsdom es una biblioteca JS pura y se sabe que d3 está trabajando en la parte superior.

  3. Ejecute jsdom y d3 dentro de Rhino - un motor JavaScript horneado en su amada JVM desde 1.6 (yay, JSR-223!). Aunque, le sugiero que lo actualice a la última versión (It's on Maven Central, neat!). Supongo que Node.JS puede hacer un mejor trabajo, pero supongo que estás atascado con Java.

    También tenga en cuenta que hay un lado del servidor implementación DOM mayor, más maduro y Rhino-específica - EnvJs(requires Rhino 1.7R2, not R3). Puedes probarlo si jsdom no funciona para ti.

  4. Usa Batik para rasterizar un SVG generado por d3. Batik even supports scripting inside SVG via Rhino. Eso significa que puede generar gráficos interactivos del lado del servidor si lo desea. También lo usé en la práctica y tuve una gran experiencia con él.

Todo el enfoque is known to work server-side with Node.JS as a JS engine and ImageMagick as a rasterizer pero no veo razones por las que no funcionaría para usted también.


Por cierto, si lo haces funcionar todo, házmelo saber.

+0

¡Gran respuesta, gracias! Una pena que ya no esté en el proyecto de Grails, esto podría ser divertido. '" Si lo haces funcionar todo, avísame "': D –

+0

Dejándote saber: http://stackoverflow.com/questions/24557308/launch-jsdom-from-rhino-on-java – ses

+0

¡Guau! Esto no es "algo duro": ¡es 100% hardcore! – Pino

2

Perdón por la respuesta tardía, pero ¿qué tal el uso de Highcharts? Estoy buscando el enlace que proporciona más información a medida que escribo esto, pero Highcharts proporciona una función de 'exportación' del lado del servidor. Lo que básicamente hace es que te permite descargar una copia de una imagen sin necesitar un navegador.

Implementé esta función para poder tomar los parámetros de solicitud, consultar un data-store, trazar esos números usando Highcharts en un gráfico deseado e incrustar esos resultados en un correo electrónico (y por supuesto, enviar el correo electrónico al destinatarios).

Más información aquí: http://www.highcharts.com/component/content/article/2-articles/news/52-serverside-generated-charts

Y

aquí: https://github.com/one2team/highcharts-serverside-export