2015-11-24 13 views
8

Voglio generare un file PDF sul lato client con un grafico e altri dati tabulari provenienti da un oggetto JSON.Esiste un modo per convertire il grafico generato da c3.js in png e Png in Pdf nel lato client

Quello che segue è la parte associazione dati Javascript:

BindReportToPdf: function (data) { 
    //data is json object 
    var rows = data; 
    var columns = [ 
     { title: "S.No", key: "RowNum" }, 
     { title: "Title", key: "TTitle" }, 
     { title: "Phone Number", key: "PhoneNumber" }, 
     { title: "Loc. Name", key: "LocationName" }, 
     { title: "Dept. Name", key: "DepartmentName" } 
    ]; 
    var doc = new jsPDF("I", "mm", "a4"); 

    var canvas1 = document.getElementById("rptcanvas"); 
    var content = $("#sfDepartmentbar").html(); 
    canvg(canvas1, content, { 
     renderCallback: function() { 
      html2canvas($("#rptgraphsec"), { 
       onrendered: function (canvas) { 

        var html = ''; 
        html += "<div style='font-size:18px;'>Report Title</div>" 
        html += '<div>Generated By : ' + 'sanjeev'+ '</div>'; 

        doc.setFontSize(8); 
        doc.fromHTML(html, 10, 10, { 'width': 100 });        

        var imgData = canvas.toDataURL('image/png'); 
        doc.addImage(imgData, 'PNG', 5, 55, 200, 100); 

        if (data.length > 0) { 
         doc.autoTable(columns, rows, { 
          startX: 5, 
          startY: 165, 
          margin: 5, 
          tableWidth: 'auto', 
          theme: 'grid', 
          lineWidth: 0.1, 
          fillStyle: 'F', 
          pageBreak: 'auto', 
          styles: { 
           overflow: 'linebreak', 
           fontSize: 10, 
          }, 
          headerStyles: { 
           fillColor: [53, 133, 201], 
           columnWidth: 'auto', 
           rowHeight: 10, 
           cellPadding: 0.5, 
           halign: 'center', 
           valign: 'middle', 
          }, 
          bodyStyles: { 
           columnWidth: 'wrap', 
           rowHeight: 8, 
           halign: 'left', 
           valign: 'middle', 
           cellPadding: 0, 
           halign: 'center', 
           valign: 'middle', 
          },          
         }); 
        } 
        doc.save("Report.pdf"); 

       } 
      }); 
     } 
    });   

} 

e la parte HTML è:

file di
<div id="rptgraphsec"> 
    <div class="graphWrapper"> 
     <div id="sfDepartmentbar"> 
      // At here c3.js generated svg + div graph remains 
     </div> 
     <canvas id="rptcanvas" width="800px" height="300px"></canvas> 
    </div> 
</div> 

Il PDF è generato con tutti i dati tabulari e il formato, ad eccezione della sezione del grafico SVG . Tutto il codice JavaScript utilizzato è all'interno delle sezioni di tag. Qualche idea su cosa può essere sbagliato?

risposta

0

È possibile utilizzare una libreria di tipo svg to canvas come Fabric.js per eseguire il rendering di SVG. html2canvas supporta già svg rendering se si fornisce l'estensione svg disponibile here.

Problemi correlati