我正在使用jspdf在浏览器内创建PDF。我有多个图表,其中包含svg作为图表数据。为了向pdf添加数据,我使用canvas将svg转换为png,然后使用canvas.toDataURL
方法转换为Base64数据。在进行所有这些转换之后,由jspdf创建的文件大小很大(约50 MB)。
以下是图表数据和画布的div的代码。
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函数的代码:
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);
我正在使用png格式,所以不能使用imagequality参数。
有人能帮我减小文件大小吗?
image/jpeg
格式,并测试可能和适合的质量参数! - Rayon