我在瀏覽器中使用jspdf創建PDF。我有多個圖表svg作爲圖表數據。爲了向pdf中添加數據,我使用canvas將svg轉換爲png,然後使用canvas.toDataURL
方法將Base64數據轉換成png。在由jspdf創建的文件的所有這些轉換大小很大(大約50 MB)之後。 以下是圖表數據和畫布div的代碼。下面使用jspdf創建的PDF文件太大太大
newdiv = document.createElement("div");
newdiv.className = "big_Con_graph big_Con_graph0";
newdiv.style.height = "0px";
newdiv.id = "big_Con_graph" + id;
爲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";
現在下面爲上述圖SVG數據的轉換和添加到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;
這是PDFAfterImageLoad函數的代碼:我使用PNG
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);
,所以不能使用IMAGEQUALITY參數。
任何人都可以幫助我減小文件大小?
您是否轉換爲base64,因爲jspdf需要? – YakovL
我沒有通過單擊按鈕獲取svg數據並將其轉換爲png的圖像存儲在我的結尾,因此整個過程需要base64數據.even我不能將所有圖形數據存儲在客戶端存儲。 –
我明白了。你爲什麼用png代替jpeg?使用帶質量修飾符的jpeg會有所幫助(請參閱https:// developer。mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toDataURL) – YakovL