我做了一个递归函数来生成迭代一些div的PDF。当没有更多的div时,我保存了PDF。我正在使用html2canvas将每个div的HTML代码捕获到画布中,并jsPDF将画布作为图像并生成PDF。此代码运行良好,除非PDF超过8MB,它将停止添加内容:
我想知道jsPDF在生成PDF时是否有大小限制。
var doc = new jsPDF();
appendDataToPDF(some_div, doc, 1); /* calling function below */
function appendDataToPDF(div, doc, top)
{
html2canvas(div, {
onrendered: function(canvas) {
var img = canvas.toDataURL();
doc.addImage(img, 'JPEG', 10, top, width, height);
if(top > 200 /* some value to detect if limit of page reached */)
{
doc.addPage();
top = 1;
}
else
top += 40;
div = div.nextSibling;
if(div === null)
doc.save('Test.pdf');
else
appendDataToPDF(div, doc, top);
}
});
}
答案 0 :(得分:1)
除了您的机器可用资源外,不应有任何硬限制。 Max I生成的只是一个2.7MiB 21页的pdf文件,但我只能将这个文件保存在我的机器上。直接在新标签页中显示它会导致FF和Chrome崩溃,可能是因为数据:uri太长,因为较小的文件工作正常。
仅供参考,您实际上可以在使用html2canvas internally的当前版本中致电doc.addHTML()
:
function appendDataToPDF(div, doc, top, left) {
doc.addHTML(div, top, left, {w: width, h: height}, function() {
if(top > 200) {
doc.addPage();
top = 1;
}
else
top += 40;
div = div.nextSibling;
if(div === null)
doc.save('Test.pdf');
else
appendDataToPDF(div, doc, top, left);
});
}
答案 1 :(得分:0)
我刚刚意识到问题是什么(具有讽刺意味的是,在加入赏金之后)。我不知道为什么,但我只是在身体上附加了我转换为PDF的div,它起作用了。现在将div中的所有内容转换为html。