Download using jsPDF on a mobile devices

2020-02-13 06:22发布

问题:

I have a page that includes a download button using jsPDF. On desktop machines it downloads the page as it should. However, pdf.save() does not work on my tablet or phone.

I tried to add a special case for mobile devices to open the PDF in a new window, since mobile devices don't download things the same as desktops, with the idea being that once the PDF is open in a new window the user can choose to save it manually.

var pdf = new jsPDF('p', 'pt', 'letter');
var specialElementHandlers = {
    '#editor': function (element, renderer) {
        return true;
    }
};

html2canvas($("#pdf-area"), {
    onrendered: function (canvas) {
        $("#pdf-canvas").append(canvas);
        $("#pdf-canvas canvas").css("padding", "20px");
    }
});

var options = {
    pagesplit: true
};

function download(doctitle) {
    pdf.addHTML($("#pdf-area")[0], options, function () {
        if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) {
            pdf.output('dataurlnewwindow');           
        } else {
            pdf.save(doctitle);
        }        
    });
}

But the download function still does nothing on my tablet/phone. I tested it with this to make sure the pdf.output() function was working:

    pdf.addHTML($("#pdf-area")[0], options, function () {
        pdf.output('dataurlnewwindow');                
    });

and it does still work on desktop, but does nothing on mobile.

回答1:

I had similar issue.

jsPDF won't download file on phones/ tablets / ipads using "pdf.save()".

Do it through File plugin if you are using cordova/phonegap, this will save pdf file in downloads folder (Android) - for the ios you can access pdf file through a path (which is saved somewhere in temp directory) and can send or share.

Hope this helps you.



回答2:

Here is the solution of download on mobile with jspdf

if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent))
{
     var blob = pdf.output();
     window.open(URL.createObjectURL(blob));
}
else
{
     pdf.save('filename.pdf');
}


回答3:

Here is the example if you're using the Cordova platform for your development:

https://github.com/saharcasm/Cordova-jsPDF-Email

The workaround of the pdf not being downloaded in the devices is to use cordova-plugin-file.

Use the output method on the doc that will give you the raw pdf which needs to be written & saved in a file.

For example,

var doc = new JsPDF(); 
//... some work with the object
var pdfOutput = doc.output("blob"); //returns the raw object of the pdf file

The pdfOutput is then written on an actual file by using the file plugin.