,

Generate Multipage PDF using Single Canvas of HTML Document using jsPDF

jsPDF is a nice library to convert HTML content into PDF. We can put the different type of elements in PDF from HTML like an icon, images, text, CSS styles. Here we will discuss an example of jsPDF to convert long HTML page into PDF document which will be generated client-side and download. Let’s start……

By.

•

min read

jsPDF is a nice library to convert HTML content into PDF. We can put the different type of elements in PDF from HTML like an icon, images, text, CSS styles.
Here we will discuss an example of jsPDF to convert long HTML page into PDF document which will be generated client-side and download.

Let’s start…

Step 1) Include jsPDF and html2canvas liberary URl in head section of your HTML.

<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.3.3/jspdf.min.js"></script>
<script src="https://html2canvas.hertzen.com/dist/html2canvas.js"></script>

 

Step 2) We will add JS code for HTML to PDF conversion

In this code block we have used html2canvas function which will give canvas of HTML section we specified, then after getting canvas object we will add PDF page using a jsPDF method and add break-up of canvas s image(JPG) in PDF page.

There are some variables defined to automate Canvas width and HTML width height blunders during conversion. Names of variables are self-explanatory. In “totalPDFPages” we are getting total PDF pages we need to display whole data in HTML.

	function getPDF(){

		var HTML_Width = $(".canvas_div_pdf").width();
		var HTML_Height = $(".canvas_div_pdf").height();
		var top_left_margin = 15;
		var PDF_Width = HTML_Width+(top_left_margin*2);
		var PDF_Height = (PDF_Width*1.5)+(top_left_margin*2);
		var canvas_image_width = HTML_Width;
		var canvas_image_height = HTML_Height;
		
		var totalPDFPages = Math.ceil(HTML_Height/PDF_Height)-1;
		

		html2canvas($(".canvas_div_pdf")[0],{allowTaint:true}).then(function(canvas) {
			canvas.getContext('2d');
			
			console.log(canvas.height+"  "+canvas.width);
			
			
			var imgData = canvas.toDataURL("image/jpeg", 1.0);
			var pdf = new jsPDF('p', 'pt',  [PDF_Width, PDF_Height]);
		    pdf.addImage(imgData, 'JPG', top_left_margin, top_left_margin,canvas_image_width,canvas_image_height);
			
			
			for (var i = 1; i <= totalPDFPages; i++) { 
				pdf.addPage(PDF_Width, PDF_Height);
				pdf.addImage(imgData, 'JPG', top_left_margin, -(PDF_Height*i)+(top_left_margin*4),canvas_image_width,canvas_image_height);
			}
			
		    pdf.save("HTML-Document.pdf");
        });
	};

 

Step 3) Following is HTML part having container selector(canvas_div_pdf) which we used in JS code in step 2.

<div class="canvas_div_pdf">

<!--Add HTML content you want to convert to PDF-->

</div>

Other Method: We can have multiple sections on the page and we can convert each section to a canvas to add to separate PDF page.

See working demo here.

Let me know if you have more suggestions.

Happy Coding 🙂

32 responses to “Generate Multipage PDF using Single Canvas of HTML Document using jsPDF”

  1. aliaazmee Avatar
    aliaazmee

    •

    thank for the tutorial, may i know where is the code for button to download? is it button on click=getPDF()?. sorry im newby here

    1. Smth Avatar
      Smth

      •

      Add button with onclick=”getPDF()” id=”downloadbtn”

  2. Jim Avatar
    Jim

    •

    Hi, great tutorial. Thank you. However, I note in testing this does not work on mobile devices, i think it may have something to do with the onclick=”getPDF()”. Do you have any ideas how to overcome this? Thank you.

  3. vijay Avatar
    vijay

    •

    how to position the image after breaking html2canvas

  4. Dia Avatar
    Dia

    •

    Could you add page numbers to the footer in combination with the dynamic scaling?

  5. swikar Avatar
    swikar

    •

    if you found help, please tell me too

  6. swikar Avatar
    swikar

    •

    Hello brother! Please tell me how can i add a bottom margin to the Pdf where i can add page number. Your help will be remembered. Thank you.

    1. Jolly.exe Avatar
      Jolly.exe

      •

      Hi Swikar, you can check another method of PDF generation here

  7. Chris Avatar
    Chris

    •

    Very nice tutorial! Thank you very much for this. Is it possible to implement some kind of padding so that a long html page isn’t simply cut into multiple PDF’s, but leaves some gap at the end of one page and some at the begining of the next one?

    1. swikar Avatar
      swikar

      •

      if you found help, please tell me too.sw

    2. Shubham Avatar
      Shubham

      •

      If you found any solution,then let me know about this.

    3. Aishwarya Sunil Lahariya Avatar
      Aishwarya Sunil Lahariya

      •

      Did you find the solution ?

Leave a Reply to Anjali Cancel reply

Your email address will not be published. Required fields are marked *