2012-06-20 32 views

Respuesta

6

Aquí hay una solución alternativa que hace la impresión directamente. Se basa en la función chart.print(), pero funciona en múltiples gráficos.

Ver la demostración aquí: http://jsfiddle.net/jim31415/q5Rzu/150/

 //-------------------------------------------------------------------- 
     $("#print").click(function() { 
      printCharts([chart1, chart2, chart3]); 
     }); 


     //-------------------------------------------------------------------- 
     function printCharts(charts) { 

      var origDisplay = [], 
       origParent = [], 
       body = document.body, 
       childNodes = body.childNodes; 

      // hide all body content 
      Highcharts.each(childNodes, function (node, i) { 
       if (node.nodeType === 1) { 
        origDisplay[i] = node.style.display; 
        node.style.display = "none"; 
       } 
      }); 

      // put the charts back in 
      $.each(charts, function (i, chart) { 
       origParent[i] = chart.container.parentNode; 
       body.appendChild(chart.container); 
      }); 

      // print 
      window.print(); 

      // allow the browser to prepare before reverting 
      setTimeout(function() { 
       // put the charts back in 
       $.each(charts, function (i, chart) { 
        origParent[i].appendChild(chart.container); 
       }); 

       // restore all body content 
       Highcharts.each(childNodes, function (node, i) { 
        if (node.nodeType === 1) { 
         node.style.display = origDisplay[i]; 
        } 
       }); 
      }, 500); 
     } 
    }); 
+0

Lo investigaré, pero se ve bien por lo que veo en jsFiddle. –

+0

Highcharts eliminó los archivos, puede usar esto en lugar del primer enlace mejor http://jsfiddle.net/q5Rzu/147/ – fcortes

+0

¿Me puede ayudar? Quiero imprimir un 5 gráficos a la vez. Pero quiero poner un título en la parte superior de la primera página. Como hacer eso ? –

8

El método exportChart acepta parámetros para que pueda enviarle más de un gráfico. Sin embargo, el método de impresión no acepta ningún parámetro. Por lo tanto, para imprimir debe especificar cada gráfico por separado, como chart1.print(); y chart2.print(); que los imprime cada uno por separado.

Hay dos soluciones:

  1. Impresión de toda la página sin necesidad de utilizar la impresión Highcharts. Aquí hay un example.

  2. Puede exportar ambos gráficos a un archivo pdf y luego imprimir el formulario allí. Aquí hay un ejemplo de cómo export multiple charts to one pdf.

+0

Gracias por la respuesta. Esto funciona en jFiddle, pero en mi página, esto imprime no solo el gráfico, sino todo lo demás en la página. Creo que podría resolver algo usando un CSS impreso, pero ¿hay alguna forma de imprimir solo los gráficos? –

+0

He actualizado mi respuesta. Tal vez funcionará para ti. – Linger

+0

Eso es lo que pretendía usar si no es posible imprimir varios gráficos desde el lado del cliente. Dejaré la pregunta abierta por ahora, en caso de que alguien tenga una solución diferente. –

Cuestiones relacionadas