首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HTML2Canvas创建多个div

HTML2Canvas创建多个div
EN

Stack Overflow用户
提问于 2017-12-04 19:49:08
回答 4查看 9.1K关注 0票数 3

我正在尝试使用jsPDF和HTML2Canvas创建一个PDF。我有多个DIVs要插入到PDF。如果我尝试将所有DIVs放入一个容器中并渲染一次,那么它只会将第一个页面高度放入PDF。我不知道如何渲染多个div并将它们粘贴到同一个PDF中,这样它就可以一页一页地进行。

JAVASCRIPT

代码语言:javascript
复制
function genPDF() {         
    html2canvas(document.getElementById("container"), {

        onrendered: function (canvas) {

            var img = canvas.toDataURL();

            var doc = new jsPDF(); 
            doc.addImage(img, 'PNG');
            doc.addPage(); 

            doc.save('test.pdf');
        }
    });
}

HTML

代码语言:javascript
复制
<div id="container">
    <div class="divEl" id="div1">Hi <img  src="img1.JPG"> </div>
    <div class="divEl" id="div2">Why <img  src="img2.PNG"> </div>
</div>

<button onClick="genPDF()"> Click Me </button>
EN

回答 4

Stack Overflow用户

发布于 2018-03-01 02:22:52

分别添加您的每个图像。

你需要等待所有的html2canvas渲染完成并添加到pdf,然后保存你的最终pdf。

通过使用JQuery和promises数组来实现此目的的一种方法是,实际代码将如下所示:

代码语言:javascript
复制
function genPDF() { 
    var deferreds = [];
    var doc = new jsPDF();
    for (let i = 0; i < numberOfInnerDivs; i++) {
        var deferred = $.Deferred();
        deferreds.push(deferred.promise());
        generateCanvas(i, doc, deferred);
    }

    $.when.apply($, deferreds).then(function () { // executes after adding all images
      doc.save('test.pdf');
    });
}

function generateCanvas(i, doc, deferred){

    html2canvas(document.getElementById("div" + i), {

        onrendered: function (canvas) {

            var img = canvas.toDataURL();
            doc.addImage(img, 'PNG');
            doc.addPage(); 

            deferred.resolve();
         }
    });
}
票数 7
EN

Stack Overflow用户

发布于 2019-02-03 04:05:28

对我来说,它是这样工作的:

代码语言:javascript
复制
$('#cmd2').click(function () {

    var len = 4; //$x(".//body/div/div").length
    var pdf = new jsPDF('p', 'mm','a4');
    var position = 0;
    Hide
    for (let i = 1;i  <= len; i++){
        html2canvas(document.querySelector('#pg'+i),
            {dpi: 300, // Set to 300 DPI
            scale: 1 // Adjusts your resolution
            }).then(canvas => {
            pdf.addImage(canvas.toDataURL("images/png", 1), 'PNG', 0,position, 210, 295);

            if (i == len){
                pdf.save('sample-file.pdf');
            }else{
                pdf.addPage();
            }
        });
    }
});
票数 1
EN

Stack Overflow用户

发布于 2019-08-23 16:39:25

您可以尝试这样做,使用HTML中的以下javascript引用。Html2Canvas和jsPDF对你使用的版本相当挑剔。

https://cdnjs.cloudflare.com/ajax/libs/html2canvas/0.4.1/html2canvas.jshttps://cdnjs.cloudflare.com/ajax/libs/jspdf/1.0.272/jspdf.debug.js

代码语言:javascript
复制
var forPDF = document.querySelectorAll(".js-panel-pdf");
var len = forPDF.length;
var thisPDF = new jsPDF('p', 'mm', [240, 210]); //210mm wide and 297mm high

for (var i = 0; i < forPDF.length; i++) {
html2canvas(forPDF[i], {
    onrendered: function(canvas) {
        thisPDF.addImage(canvas.toDataURL("images/png", 1), 'PNG', 0, 0, 210, 295);
        if (parseInt(i + 1) === len) {
            thisPDF.save('sample-file.pdf');
        } else {
            thisPDF.addPage();
        }
    }
});
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47632710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档