Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Export HTML page to PDF on user click using JavaScript

When user click on GeneratePDF button, I need to export the html page into a PDF file. I am successfully exporting HTML page into PDF file but for the first click only I am able to download data into PDF but from the second click I am unable to download the data to PDF file. I am not sure where I went wrong in the code.

Please check the code here:

$(function() {    var doc = new jsPDF();    var specialElementHandlers = {      '#editor': function(element, renderer) {        return true;      }    };    $('#cmd').click(function() {      doc.fromHTML($('#target').html(), 15, 15, {        'width': 170,        'elementHandlers': specialElementHandlers      });      doc.save('sample-file.pdf');    });  });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>  <script type="text/javascript" src="https://code.jquery.com/ui/1.12.0-beta.1/jquery-ui.min.js"></script>  <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.1.135/jspdf.min.js"></script>  <script type="text/javascript" src="http://cdn.uriit.ru/jsPDF/libs/adler32cs.js/adler32cs.js"></script>  <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/2014-11-29/FileSaver.min.js  "></script>  <script type="text/javascript" src="libs/Blob.js/BlobBuilder.js"></script>  <script type="text/javascript" src="http://cdn.immex1.com/js/jspdf/plugins/jspdf.plugin.addimage.js"></script>  <script type="text/javascript" src="http://cdn.immex1.com/js/jspdf/plugins/jspdf.plugin.standard_fonts_metrics.js"></script>  <script type="text/javascript" src="http://cdn.immex1.com/js/jspdf/plugins/jspdf.plugin.split_text_to_size.js"></script>  <script type="text/javascript" src="http://cdn.immex1.com/js/jspdf/plugins/jspdf.plugin.from_html.js"></script>  <script type="text/javascript" src="js/basic.js"></script>    <body id="target">    <div id="content">      <h3>Hello, this is a H3 tag</h3>      <a class="upload">Upload to Imgur</a>       <h2>this is <b>bold</b> <span style="color:red">red</span></h2>       <p>Feedback form with screenshot This script allows you to create feedback forms which include a screenshot, created on the clients browser, along with the form. The screenshot is based on the DOM and as such may not be 100% accurate to the real representation        as it does not make an actual screenshot, but builds the screenshot based on the information available on the page. How does it work? The script is based on the html2canvas library, which renders the current page as a canvas image, by reading the        DOM and the different styles applied to the elements. This script adds the options for the user to draw elements on top of that image, such as mark points of interest on the image along with the feedback they send. It does not require any rendering        from the server, as the whole image is created on the clients browser. No plugins, no flash, no interaction needed from the server, just pure JavaScript! Browser compatibility Firefox 3.5+ Newer versions of Google Chrome, Safari & Opera IE9      </p>      </div>    <button id="cmd">generate PDF</button>  </body>    </html>
like image 921
Navyah Avatar asked Nov 05 '13 09:11

Navyah


People also ask

How do I export my HTML page as PDF using JavaScript?

Generate PDF using JavaScriptSpecify the content in text() method of jsPDF object. Use the addPage() method to add new page to PDF. Use the save() method to generate and download PDF file.

How do I automatically convert HTML to PDF?

On a Windows computer, open an HTML web page in Internet Explorer, Google Chrome, or Firefox. On a Mac, open an HTML web page in Firefox. Click the “Convert to PDF” button in the Adobe PDF toolbar to start the PDF conversion. Enter a file name and save your new PDF file in a desired location.

Can you create a PDF in JavaScript?

js Use Cases. The html2pdf. js library relies on pure JavaScript to create a PDF. As a result, html2pdf embeds directly client-side, in the browser.


1 Answers

This is because you define your "doc" variable outside of your click event. The first time you click the button the doc variable contains a new jsPDF object. But when you click for a second time, this variable can't be used in the same way anymore. As it is already defined and used the previous time.

change it to:

$(function () {      var specialElementHandlers = {         '#editor': function (element,renderer) {             return true;         }     };  $('#cmd').click(function () {         var doc = new jsPDF();         doc.fromHTML(             $('#target').html(), 15, 15,              { 'width': 170, 'elementHandlers': specialElementHandlers },              function(){ doc.save('sample-file.pdf'); }         );      });   }); 

and it will work.

like image 176
Kristof Feys Avatar answered Sep 18 '22 14:09

Kristof Feys