jsPDF获取生成的文档为base64

jsPDF get the generated document as base64

我正在尝试在我的应用程序上生成 PDF,使用类似这样的文件,来自文档:

var doc = new jsPDF();   

doc.html(document.body, {
   callback: function (doc) {
     doc.save();
   }
});

但我需要的是获取此生成的文件,作为 base64 内容,作为电子邮件附件发送。有没有办法直接在回调中得到这个?

你可以像下面那样做。

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

 pdf.html(document.getElementById('doc'), {
    callback: function (pdf) {

    // example text
    pdf.text(20, 20, 'Hello world!');
    pdf.text(20, 30, 'This is client-side Javascript, pumping out a PDF.');

    var base = pdf.output('datauri'); // directly to base664

    console.log("base64 is  ");
    console.log(base);

    // you can generate in another format also  like blob
     var out = pdf.output('blob');
    var reader = new FileReader();

    reader.readAsDataURL(out); 
    reader.onloadend = function() { // for blob to base64
         base64data = reader.result; 
         console.log("base64 data is ");               
         console.log(base64data );
    }
    pdf.save('DOC.pdf');

    }
    })

您可以在下面的 link.

中查看有关 output() 方法的更多信息

jspdf output() source code

值得注意的是 datauri 选项会更改文档位置,请参阅 jsPDF 库中的以下代码片段:

case 'datauri':
case 'dataurl':
    return global.document.location.href = datauri;

这很好,除非您尝试使用 IFrame,因为它会导致其正文被 embed 标记替换显示刚刚生成的 pdf。

相反,最安全的选择是使用 datauristring,因为这只是 returns base64 字符串中的 pdf:

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

var base = pdf.output('datauristring'); // base64 string

console.log("base64 is ", base);

老实说,我不知道为什么有人会想要使用 datauri 选项而不是 datauristring 作为后者的行为这是最重要的无论如何,人们期待。