jsPDF将生成的文档获取为base64

时间:2019-08-08 05:50:53

标签: jspdf

我正在尝试使用类似的方式从文档中在我的应用程序上生成PDF:

var doc = new jsPDF();   

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

但是我需要获取的是base64内容形式的生成文件,并作为附件发送到电子邮件中。有没有办法直接在回调函数上获取此消息?

2 个答案:

答案 0 :(得分:2)

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

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

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

相反,最安全的选择是使用 datauristring ,因为这只会以base64字符串形式返回pdf:

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

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

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

老实说,我不知道为什么有人会使用 datauri 选项而不是 datauristring 作为后者的行为,这也是大多数人期望的。

答案 1 :(得分:1)

您可以按照以下方式进行操作。

 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');

    }
    })

您可以在以下链接中找到有关 output()方法的更多信息。

jspdf output() source code