jsPDF addHTML方法无法使用没有错误消息

cyt*_*nny 1 javascript highcharts twitter-bootstrap jspdf

我正在使用jsPdf官方演示站点的示例来测试新的addHTML函数,稍加改动就可以直接保存生成的PDF.

console.log("testing");
var pdf = new jsPDF('p','pt','a4');
pdf.addHTML(document.body,function() {
    console.log("started");
    pdf.save()
    console.log("finished");
});
console.log("testing again");
Run Code Online (Sandbox Code Playgroud)

当我运行上面的脚本时,它不会生成任何错误消息,但也不会生成PDF.在控制台中,只显示"测试"和"再次测试",所以我猜这个脚本没有运行.

我错过了什么?我正在使用bootstrap选项卡功能和一些使用highchart生成的图表.处理jsPDF太复杂了吗?

Mic*_*ble 5

首先,您需要使用html2canvasrasterizeHTML来使用jsPDF的addHTML方法.另一个问题是jsPDF会覆盖html2canvas库定义的许多方法.只需查看jsPDF源代码并搜索html2canvas即可.即使在我的项目中包含html2canvas脚本后,我也遇到了您描述的完全相同的问题.

最后一个问题是包含脚本的顺序.对我来说,它适用于当前版本的jsPDF(1.1.239)和html2canvas(0.5.0-alpha1),其中包括jsPDF first和html2canvas.在我的项目中它看起来像这样:

<head>
    <script src="./lib/jspdf/jspdf.debug.js"></script>
    <script src="./lib/html2canvas/html2canvas.js"></script>
    <!-- more includes ... -->
</head>
Run Code Online (Sandbox Code Playgroud)

我认为在jsPDF中覆盖html2canvas方法是不好的做法,因为当html2canvas改变时很难维护,正如这个问题所示.

当脚本包括通过RequireJS完成时,这个问题可能会有不同的表现.


小智 5

这是因为回调函数已更改为promise。

进行以下更改。

pdf.addHTML(document.body,function() {
    console.log("started");
    pdf.save()
    console.log("finished");
});
Run Code Online (Sandbox Code Playgroud)

pdf.addHTML(document.body).then(()=> {
    console.log("started");
    pdf.save()
    console.log("finished");
});
Run Code Online (Sandbox Code Playgroud)