Я использую jspdf для создания PDF внутри браузера. У меня есть несколько диаграмм, имеющих svg как данные диаграммы. Для добавления данных в pdf я конвертирую svg в png, используя canvas, а затем Base64 Data, используя метод canvas.toDataURL
. После всего этого размера конверсий файл, созданный jspdf, огромен (около 50 МБ). Ниже приведен код для данных диаграммы и холста.Размер файла Pdf слишком большой, созданный с помощью jspdf
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 не может быть использован.
Может ли кто-нибудь помочь мне уменьшить размер файла?
Вы преобразовываете в base64, потому что jspdf требует этого? – YakovL
У меня нет изображения, хранящегося в моем конце, нажав кнопку i m, получая данные svg и преобразовывая его в png с помощью canvas, поэтому для всего процесса требуются данные base64. Даже я не могу хранить все данные графика на клиентском хранилище. –
Я вижу. И почему вы используете png вместо jpeg? Использование jpeg с модификатором качества помогло бы (см. Https: // developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toDataURL) – YakovL