Tips, Soluciones y Novedades en Tecnología

14/04/2017

Exportar PNG/JPG Saiku






En las ultimas versiones de saiku analytics, en la versión community, al exportar el gráfico generado por las matrices olap, este genera una marca de agua que muchas veces es incomodo.









Otro aspecto es que ese proceso demora demasiado en el servidor.



Aveces hay errores en la exportación, y nos muestra el típico mensaje de que debes contactar con el administrador.





Para solucionar estos problemas, y ahorrarles a saiku a tener que generar la imagen desde el servidor, lo vamos a generar directamente desde la vista.



Para lograr este propósito debemos hacer uso de la librería.



filesaverj.js



Tiene la facilidad de guardar en varios formatos y desde varios formatos. visitar el link para ver mas opciones.



https://github.com/eligrey/FileSaver.js/



Lo que debemos de hacer es modificar 2 archivos.



 - index.html (biserver-ce/pentaho-solutions/system/saiku/ui)

 - plugin.js (biserver-ce/pentaho-solutions/system/saiku/ui/js/saiku/plugins/CCC_Chart)



El concepto es bien simple.



Saiku cada vez que quieres ver un gráfico distinto y clickeas en el gráfico correspondiente, este carga el gráfico y le pasa los datos, y un div donde va mostrar el svg generado por la librería.



Lo que debemos de hacer es tomar el svg y generar el png o jpg según el tipo seleccionado por el usuario.



Ahora vamos a agregar la librería filesaver.js al index.html






<script type="text/javascript" src="https://fastcdn.org/FileSaver.js/1.1.20151003/FileSaver.min.js"></script>








Ahora  agregamos el siguiente método a la clase, justo después en el método exportChart (aunque puede estar en cualquier parte)







download_chart: function (data, x, y, type) {
/** custom **/
var width = x;
var height = y;
var svg = new Blob([data], {type: "image/svg+xml;charset=utf-8"});
var url = URL.createObjectURL(svg);
var img = $('<img />')
.width(width)
.height(height)
.on('load', function () {
var canvas = document.createElement('canvas');
canvas.width = width;
canvas.height = height;
var ctx = canvas.getContext('2d');
ctx.drawImage(img.get(0), 0, 0);
canvas.toBlob(function (blob) {
saveAs(blob, "Grafico de datos." + type);
});
});
img.attr('src', url);
},



Ahora debemos hacer una interrupción a la ejecución del método y enviar al método que acabamos de definir los parámetros necesarios para la conversión debida.





exportChart: function (type) {
var svgContent = new XMLSerializer().serializeToString($('svg')[0]);
var rep = '<svg xmlns="http://www.w3.org/2000/svg" ';
if (svgContent.substr(0, rep.length) != rep) {
svgContent = svgContent.replace('<svg ', rep);
}
this.download_chart(svgContent, $('svg').width(), $('svg').width(), type);
/*
        svgContent = '<!DOCTYPE svg [<!ENTITY nbsp "&#160;">]>' + svgContent;
         var form = $('#svgChartPseudoForm');
         form.find('.type').val(type);
         form.find('.svg').val(svgContent);
         if (this.workspace.query.name != undefined) {
         var f = this.workspace.query.name.substring(this.workspace.query.name.lastIndexOf('/') + 1)

.slice(0, -6);
         form.find('.name').val(f);
         }
         form.attr('action', Settings.REST_URL + this.workspace.query.url() +

escape("/../../export/saiku/chart"));
         form.submit();*/
return false;
},



Con esto ya podemos actualizar y al momento de exportar nuestros gráficos, este debe generarse sin problemas.



Adjunto el vídeo donde se realiza de manera dinámica.









Saludos.


7 comentarios:

  1. Hola. Muchas gracias. Lo he probado y funciona pero tengo un problemita. Por default las opciones que muestra Saiku son PNG y PDF. ¿Qué archivo se edita para cambiar PDF por JPG?

    ResponderEliminar
    Respuestas
    1. Para exportar en el menú de gráficos, solo muestra PNG Y JPG, ahora para quitar el botón PDF del Toolbar de panel, debes quitarlo en /biserver-ce/pentaho-solutions/system/saiku/ui/index.html.

      Saludos.

      Eliminar
    2. Muy buen aporte de verdad muchas gracias.

      Eliminar
    3. Este comentario ha sido eliminado por el autor.

      Eliminar
    4. Reynaldo Claros---- what? te has equivocado..
      Jhonathan Moran quiere solo cambiar el nombre de PDF a JPG que muestra saiku en la barra lateral, para ello tienes que irte a
      /pentaho-solutions/system/saiku/ui/js/saiku/plugins/CCC_Chart
      en el método "export_button" hay un objeto que contiene los nombres PNG y PDF, puedes descomentar la linea que ya esta ahí o añadirla

      Un saludo

      Eliminar
    5. Exacto, si se puede cambiar a otro formato,eso gracias a que es SVG, pero recuerden que se tiene que implementar las librerías necesarias, por defecto esta esas opciones mencionadas.
      Saludos.

      Eliminar