Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Pdf file size too big created using jspdf

I am using jspdf for creating PDF inside browser. I am having multiple charts having svg as chart Data. For adding data to pdf I am converting svg to png using canvas and then Base64 Data using canvas.toDataURL method. After all this conversions size of the file created by jspdf is huge (about 50 MB). Below is the code for div of chart data and canvas.

newdiv = document.createElement("div"); newdiv.className = "big_Con_graph big_Con_graph0"; newdiv.style.height = "0px"; newdiv.id = "big_Con_graph" + id; 

below is the dimensions for SVG chart load.

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"; 

now below is the code for conversion of above graph SVG data and adding to 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; 

this is the code for PDFAfterImageLoad function:

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); 

I am using png, so imagequality parameter can not be used.

Can anyone help me decrease the file size?

like image 789
Asha Koshti Avatar asked Jun 07 '16 11:06

Asha Koshti


People also ask

How can I fix a PDF file that is too big?

The simplest is to re-save your file as a reduced-size PDF. In the latest version of Adobe Acrobat, open the PDF you wish to re-save as a smaller file, choose File, Save as Other, and then Reduced Size PDF. You'll be prompted to select the version compatibility you need and then you can click OK to save.

Why is my PDF suddenly so big?

Why are my PDF files so large? PDFs are usually noticeably large when a few specific things happen. First, PDFs can be oversized because one or more fonts have been embedded and subset inside that specific PDF file. In fact, adding a single font to a PDF document can sometimes increase the file size substantially.


1 Answers

You need to compress the images in the PDF's that you are generating. Try using Deflate.js and adler32cs.js and use the compress parameter in both jsPDF and addImage functions that you are using. For eg :

var doc = new jsPDF('p', 'pt','a4',true); 

make sure you set the last parameter as 'true' refer to : https://github.com/MrRio/jsPDF/blob/ddbfc0f0250ca908f8061a72fa057116b7613e78/jspdf.js#L146

Go through it and you can clearly see that the last parameter is for enabling compression.

Also use :

pdf.addImage(png, 'PNG', leftmargin, 120, 485, 270,'','FAST'); 

instead of

pdf.addImage(png, 'PNG', leftmargin, 120, 485, 270); 

you can choose between NONE, FAST, MEDIUM and SLOW, whichever suits you best.

like image 160
hkm93 Avatar answered Sep 19 '22 21:09

hkm93