PDF达到一定大小后无法添加内容

时间:2014-08-11 16:56:27

标签: javascript pdf html2canvas jspdf

我做了一个递归函数来生成迭代一些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);
        }
    });
}

2 个答案:

答案 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。