Sto usando jspdf per creare PDF all'interno del browser. Sto avendo più grafici che hanno svg come dati del grafico. Per aggiungere dati a pdf sto convertendo svg in png usando canvas e quindi Base64 Data usando il metodo canvas.toDataURL
. Dopo tutte queste conversioni, la dimensione del file creato da jspdf è enorme (circa 50 MB). Di seguito è riportato il codice per div dei dati del grafico e dell'area di disegno.Dimensioni del file Pdf troppo grandi create usando jspdf
newdiv = document.createElement("div");
newdiv.className = "big_Con_graph big_Con_graph0";
newdiv.style.height = "0px";
newdiv.id = "big_Con_graph" + id;
sotto è le dimensioni del carico grafico SVG.
document.getElementById("big_Con_graph" + id).style.display = "block";
var big_chartReference = FusionCharts("big_myChartId"+id);
if(big_chartReference != null){
big_chartReference.dispose();
}
var big_width = "1088";
var big_height = "604";
ora sotto è il codice per la conversione dei dati SVG del grafico sopra e l'aggiunta al PDF.
var elem_graph = $($('.big_Con_graph,big_Con_graph0')[count]).clone(true);
svgString = $(elem_graph).find("span").html();
var img = document.createElement('img');
var DOMURL = self.URL || self.webkitURL || self;
var svg = new Blob([svgString], {type: "image/svg+xml;charset=utf-8"});
var url = DOMURL.createObjectURL(svg);
img.onload = pdfAfterImageLoad(img,pdf,imgLoadSequence,DOMURL,totalReports,reportName);
img.src = url;
Questo è il codice per la funzione PDFAfterImageLoad:
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0);
var png = canvas.toDataURL("image/png");
pdf.addImage(png, 'PNG', leftmargin, 120, 485, 270);
Sto usando png, quindi il parametro QUALITIMM non possono essere utilizzati.
Qualcuno può aiutarmi a ridurre le dimensioni del file?
Ti converti in base64 perché jspdf lo richiede? – YakovL
Non ho un'immagine memorizzata alla mia estremità facendo clic sul pulsante Sto ricevendo dati svg e convertendola in png su tela, quindi l'intero processo richiede dati base64.anche non posso memorizzare tutti i dati del grafico nella memoria del client. –
Vedo. E perché stai usando png invece di jpeg? L'utilizzo di jpeg con il modificatore di qualità avrebbe aiutato (vedi https: // developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toDataURL) – YakovL