Javascript 通过jsPDF向PDF添加多个元素';s添加HTML

Javascript 通过jsPDF向PDF添加多个元素';s添加HTML,javascript,jquery,angularjs,pdf,jspdf,Javascript,Jquery,Angularjs,Pdf,Jspdf,我使用的是一个显示几个独立的信息位。因为不活动选项卡的实际内容是隐藏的,所以如果我只添加页面的整个主体,它就不会打印。打印后看到的唯一选项卡内容是当前活动的选项卡。我正在尝试使用addHTML方法打印这些选项卡中的所有内容以及页面中的另一个元素,以保持其外观 单独打印其中任何一项都很有效,但我似乎无法找到一种方法一次性打印所有项目 例如,这是用于打印单个元素的代码 var pdf = new jsPDF('p', 'pt', 'a4'); pdf.addHTML($('#foo').first(

我使用的是一个显示几个独立的信息位。因为不活动选项卡的实际内容是隐藏的,所以如果我只添加页面的整个主体,它就不会打印。打印后看到的唯一选项卡内容是当前活动的选项卡。我正在尝试使用
addHTML
方法打印这些选项卡中的所有内容以及页面中的另一个元素,以保持其外观

单独打印其中任何一项都很有效,但我似乎无法找到一种方法一次性打印所有项目

例如,这是用于打印单个元素的代码

var pdf = new jsPDF('p', 'pt', 'a4');
pdf.addHTML($('#foo').first(), function() {
    pdf.save();
});
这是可行的(虽然输出全是黑色的,但我认为这是另一个问题)。现在,我想使用几个
addHTML
语句来完成添加所需内容并保存。差不多

var pdf = new jsPDF('p', 'pt', 'a4');
pdf.addHTML($('#foo').first());
_.each( $('.bar').first().children(), function(e) {
    pdf.addHTML(e);
});
pdf.save();
然而,采用第二种方法保存pdf时,它只是完全空白

值得注意的是,这是可行的,但它没有我想要保留的格式,并且内容比我想要的更多:

  var doc = new jsPDF();

  doc.fromHTML($('body').get(0), 15, 15, {
    'width': 170,
  }, function() {
    doc.save();
  });
试图强制它只选择
#foo
.bar
,结果会出现与我上面遇到的相同的问题

任何关于正确方法的建议都将不胜感激

在addHTML回调之外调用
pdf.save()
很可能会在addHTML方法有机会添加html之前创建pdf。试着这样做:

未测试

var pdf = new jsPDF('p', 'pt', 'a4');
var elements = $(".bar");
var i = 0;
var recursiveAddHtml = function () {
    if (i < elements.length) {
        var x = 0, y = i * 20; 
        pdf.addHTML(elements.get(i), x, y, function () {
            i++;
            recursiveAddHtml();
        });
    } else {
        pdf.save();
    }
}

recursiveAddHtml();
var pdf=new-jsPDF('p','pt','a4');
变量元素=$(“.bar”);
var i=0;
var recursiveAddHtml=函数(){
if(i<元素长度){
变量x=0,y=i*20;
addHTML(elements.get(i),x,y,function(){
i++;
递归添加HTML();
});
}否则{
pdf.save();
}
}
递归添加HTML();
这应该为每个元素调用
recursiveAddHtml
,每次调用一个,然后在元素到达末尾时调用
save

更新

我刚刚尝试过这个方法,它似乎有效,只是它将所有元素放置在彼此的顶部。我还不确定如何检测pdf中当前内容的高度,因此我在示例中添加了x和y坐标,以便您至少可以看到pdf中的不同元素

另外,请确保将背景颜色设置为其他颜色,否则默认为黑色。

在addHTML回调之外调用
pdf.save()
很可能会在addHTML方法有机会添加html之前创建pdf。试着这样做:

未测试

var pdf = new jsPDF('p', 'pt', 'a4');
var elements = $(".bar");
var i = 0;
var recursiveAddHtml = function () {
    if (i < elements.length) {
        var x = 0, y = i * 20; 
        pdf.addHTML(elements.get(i), x, y, function () {
            i++;
            recursiveAddHtml();
        });
    } else {
        pdf.save();
    }
}

recursiveAddHtml();
var pdf=new-jsPDF('p','pt','a4');
变量元素=$(“.bar”);
var i=0;
var recursiveAddHtml=函数(){
if(i<元素长度){
变量x=0,y=i*20;
addHTML(elements.get(i),x,y,function(){
i++;
递归添加HTML();
});
}否则{
pdf.save();
}
}
递归添加HTML();
这应该为每个元素调用
recursiveAddHtml
,每次调用一个,然后在元素到达末尾时调用
save

更新

我刚刚尝试过这个方法,它似乎有效,只是它将所有元素放置在彼此的顶部。我还不确定如何检测pdf中当前内容的高度,因此我在示例中添加了x和y坐标,以便您至少可以看到pdf中的不同元素

另外,请确保将背景颜色设置为其他颜色,否则默认为黑色。

在addHTML回调之外调用
pdf.save()
很可能会在addHTML方法有机会添加html之前创建pdf。试着这样做:

未测试

var pdf = new jsPDF('p', 'pt', 'a4');
var elements = $(".bar");
var i = 0;
var recursiveAddHtml = function () {
    if (i < elements.length) {
        var x = 0, y = i * 20; 
        pdf.addHTML(elements.get(i), x, y, function () {
            i++;
            recursiveAddHtml();
        });
    } else {
        pdf.save();
    }
}

recursiveAddHtml();
var pdf=new-jsPDF('p','pt','a4');
变量元素=$(“.bar”);
var i=0;
var recursiveAddHtml=函数(){
if(i<元素长度){
变量x=0,y=i*20;
addHTML(elements.get(i),x,y,function(){
i++;
递归添加HTML();
});
}否则{
pdf.save();
}
}
递归添加HTML();
这应该为每个元素调用
recursiveAddHtml
,每次调用一个,然后在元素到达末尾时调用
save

更新

我刚刚尝试过这个方法,它似乎有效,只是它将所有元素放置在彼此的顶部。我还不确定如何检测pdf中当前内容的高度,因此我在示例中添加了x和y坐标,以便您至少可以看到pdf中的不同元素

另外,请确保将背景颜色设置为其他颜色,否则默认为黑色。

在addHTML回调之外调用
pdf.save()
很可能会在addHTML方法有机会添加html之前创建pdf。试着这样做:

未测试

var pdf = new jsPDF('p', 'pt', 'a4');
var elements = $(".bar");
var i = 0;
var recursiveAddHtml = function () {
    if (i < elements.length) {
        var x = 0, y = i * 20; 
        pdf.addHTML(elements.get(i), x, y, function () {
            i++;
            recursiveAddHtml();
        });
    } else {
        pdf.save();
    }
}

recursiveAddHtml();
var pdf=new-jsPDF('p','pt','a4');
变量元素=$(“.bar”);
var i=0;
var recursiveAddHtml=函数(){
if(i<元素长度){
变量x=0,y=i*20;
addHTML(elements.get(i),x,y,function(){
i++;
递归添加HTML();
});
}否则{
pdf.save();
}
}
递归添加HTML();
这应该为每个元素调用
recursiveAddHtml
,每次调用一个,然后在元素到达末尾时调用
save

更新

我刚刚尝试过这个方法,它似乎有效,只是它将所有元素放置在彼此的顶部。我还不确定如何检测pdf中当前内容的高度,因此我在示例中添加了x和y坐标,以便您至少可以看到pdf中的不同元素

另外,请确保将背景颜色设置为其他颜色,否则默认为黑色。

Adam的答案n