2012-06-20 9 views

risposta

6

Ecco una soluzione alternativa che esegue direttamente la stampa. Si basa sulla funzione chart.print(), ma funziona su più grafici.

Vedi l'demo qui: 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 esaminerò, ma sembra buono da quello che vedo in jsFiddle! –

+0

Highcharts ha rimosso i file, è possibile utilizzare questo al posto del primo collegamento meglio http://jsfiddle.net/q5Rzu/147/ – fcortes

+0

Potete aiutarmi? Voglio stampare 5 grafici alla volta. Ma voglio dare una piccola parte in cima alla prima pagina. Come farlo ? –

8

Il metodo exportChart accetta parametri in modo da poterlo inviare più di un grafico. Tuttavia, il metodo di stampa non accetta alcun parametro. Quindi, per stampare devi specificare ogni grafico separatamente come chart1.print(); e chart2.print(); che li stampa separatamente.

ci sono due soluzioni:

  1. Stampa l'intera pagina senza usare la stampa Highcharts. Ecco un example.

  2. È possibile esportare entrambi i grafici in un file PDF e quindi stampare il modulo lì. Ecco un esempio su come export multiple charts to one pdf.

+0

Grazie per la risposta. Funziona in jFiddle, ma sulla mia pagina, questo stampa non solo il grafico ma tutto il resto sulla pagina. Immagino di poter lavorare a qualcosa usando un CSS di stampa, ma c'è un modo per stampare solo i grafici? –

+0

Ho aggiornato la mia risposta. Forse funzionerà per te. – Linger

+0

Ecco cosa intendevo utilizzare se non è possibile stampare più grafici dal lato client. Lascerò la domanda aperta per ora, nel caso qualcuno abbia una soluzione diversa. –