Javascript jsPDF addHTML方法不工作,没有错误消息
我使用的是来自的示例来测试新的addHTML函数,只做了一点修改,直接保存生成的PDFJavascript jsPDF addHTML方法不工作,没有错误消息,javascript,twitter-bootstrap,highcharts,jspdf,Javascript,Twitter Bootstrap,Highcharts,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");
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");
当我运行上面的脚本时,它不会生成错误消息,但也不会生成PDF。在控制台中,只显示“测试”和“再次测试”,因此我猜脚本没有运行
我错过了什么?我正在使用bootstrap选项卡函数和一些使用生成的图表。处理jsPDF是否太复杂?jsPDF无法转换svg元素。使用库可以很容易地做到这一点 示例用法-
function _svgToCanvas() {
var nodesToRecover = [];
var nodesToRemove = [];
var svgElems = document.getElementsByTagName("svg");
for (var i = 0; i < svgElems.length; i++) {
var node = svgElems[i];
var parentNode = node.parentNode;
var svg = parentNode.innerHTML;
var canvas = document.createElement('canvas');
canvg(canvas, svg);
nodesToRecover.push({
parent: parentNode,
child: node
});
parentNode.removeChild(node);
nodesToRemove.push({
parent: parentNode,
child: canvas
});
parentNode.appendChild(canvas);
}
}
首先,您需要或者使用jsPDF的addHTML方法。
进一步的问题是jsPDF覆盖了html2canvas库定义的许多方法。只需查看jsPDF源代码并搜索html2canvas。即使在我的项目中包含了html2canvas脚本,我也遇到了与您描述的完全相同的问题
最后一个问题是包含脚本的顺序。对我来说,它可以与当前版本的jsPDF(1.1.239)和html2canvas(0.5.0-alpha1)一起工作,首先包括jsPDF,然后包括html2canvas。
在我的项目中,它看起来像这样:
<head>
<script src="./lib/jspdf/jspdf.debug.js"></script>
<script src="./lib/html2canvas/html2canvas.js"></script>
<!-- more includes ... -->
</head>
我认为在jsPDF中覆盖html2canvas方法是一种糟糕的做法,因为当html2canvas发生变化时很难维护,正如这个问题所示
当脚本包含通过RequireJS完成时,这个问题的表现可能不同。这是因为回调函数已更改为promise 执行以下更改
pdf.addHTML(document.body,function() {
console.log("started");
pdf.save()
console.log("finished");
});
到
我也有同样的问题。虽然我不确定
addHTML
的确切问题是什么,但我还是通过以下方法使其正常工作:
我不确定jsPDF是否支持SVG,它在Highcharts中使用。看一看:、和。谢谢,但即使他们不支持SVG,也没有错误消息会让人感到困惑。我完全同意你的看法。他们最后一次承诺是在25天前,幸好这不是一个废弃的项目;)使用其他库绕过了这个问题。没有时间测试你的方法,很抱歉,我现在无法将此标记为正确答案。但仍然有一个投票支持回答这个问题。
pdf.addHTML(document.body,function() {
console.log("started");
pdf.save()
console.log("finished");
});
pdf.addHTML(document.body).then(()=> {
console.log("started");
pdf.save()
console.log("finished");
});
html2canvas(document.body).then(canvas => {
var pdf = new jsPDF('p', 'pt', 'a4');
pdf.addImage(canvas.toDataURL('image/png'), 'PNG', 0, 0, 210, 297);
pdf.save();
});