Search code examples
javascriptphpjspdf

How to save PDF file from jsPDF on a server in Javascript?


var doc = new jsPDF();
$('#generatereport').click(function() {
   doc.fromHTML($('#lppresults')[0], 15, 15, {
	  width: 170
   }, function() {
	  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://cdnjs.cloudflare.com/ajax/libs/jspdf/1.3.4/jspdf.min.js"></script>
<div class="survey-results" id="lppresults">
    <button id="generatereport">Download Report</button>
    <h1 style="border: solid;">TEST CONTENT</h1><br />
    <h1 style="border: solid;">TEST CONTENT1</h1>
</div>
        
          

I want to save file on the server with JavaScript, but currently I can save this file only on the user's computer.


Solution

  • Instead of doc.save function you have to use doc.output function with type 'blob' as a parameter.

    In Javascript part:

    var doc = new jsPDF();
    $('#generatereport').click(function()
    {
        doc.fromHTML(
            $('#lppresults'), 15, 15,
            {width: 170},
            function()
            {
                var blob = doc.output('blob');
    
                var formData = new FormData();
                formData.append('pdf', blob);
    
                $.ajax('/upload.php',
                {
                    method: 'POST',
                    data: formData,
                    processData: false,
                    contentType: false,
                    success: function(data){console.log(data)},
                    error: function(data){console.log(data)}
                });
            }
        );
    });
    

    Here is the code for upload.php:

    <?php
    move_uploaded_file(
        $_FILES['pdf']['tmp_name'], 
        $_SERVER['DOCUMENT_ROOT'] . "/uploads/test.pdf"
    );
    ?>