繁体   English   中英

每个div的HTML2canvas分别导出到pdf

[英]Html2canvas for each div export to pdf separately

我有Page,它有6个具有相同类名“ exportpdf”的div,我正在使用jspdfhtml2canvas将这些div转换为pdf

var elementTobePrinted = angular.element(attrs.selector),
iframeBody = elementTobePrinted.contents().find('div.exportpdf');

在html2canvas .....

html2canvas(elementTobePrinted, {
  onrendered: function (canvas) {
    var doc = new jsPDF();     
    for(var i=1;i<elementTobePrinted.length;i++){
      doc.addImage(canvas.toDataURL("image/jpeg"), 'jpeg', 15, 40, 180, 160);
      doc.addImage(canvas.toDataURL("image/jpeg"),'JPEG', 0, 0, 215, 40)
      doc.addPage();
    } 

    doc.save(attrs.fileName);
}

我将页面转换为canvas.its为整个pdf创建了相同的div内容。 我需要将每个div内容转换为具有不同页面的pdf。

谁能帮我?

问题出在html2canvas上:

doc.addImage(canvas.toDataURL("image/jpeg"), 'jpeg', 15, 40,180, 160); 

在这里,我需要将elementTobePrinted列表传递给addImage。

我认为这里的问题是elementTobePrinted不是您认为的那样。

运行代码时:

var elementTobePrinted = angular.element(attrs.selector)

这将为您返回匹配条件的每个元素的列表,因此您说您有6个这样的元素(“它有6个div”)。

您是否尝试过更换:

html2canvas(elementTobePrinted, {
  onrendered: function (canvas) {
    var doc = new jsPDF();     
    for(var i=1;i<elementTobePrinted.length;i++) {
      doc.addImage(canvas.toDataURL("image/jpeg"), 'jpeg', 15, 40, 180, 160);
      doc.addImage(canvas.toDataURL("image/jpeg"),'JPEG', 0, 0, 215, 40)
      doc.addPage();
    } 
    doc.save(attrs.fileName);
}

用...

for(var i=0; i<elementTobePrinted.length; i++){
  html2canvas(elementTobePrinted[i], {
    onrendered: function (canvas) {
      var doc = new jsPDF();     
      doc.addImage(canvas.toDataURL("image/jpeg"), 'jpeg', 15, 40, 180, 160);
      doc.addImage(canvas.toDataURL("image/jpeg"),'JPEG', 0, 0, 215, 40)
      doc.addPage();
      doc.save(attrs.fileName);
    }
}

我建议这样做的原因是html2Canvas希望将SINGLE元素作为其第一个参数,并且上面的示例传递了元素列表 (我认为,假设angular.element(attrs.selector)找到要尝试打印的所有6个div)。

在Angular 2(现在为6)框架上。 您可以使用以下逻辑,

  • 点击执行generateAllPdf()函数,
  • 从我的html集合中收集所有6 id's
  • 遍历每个id并调用html2canvas函数,
  • 由于html2canvas在后台运行以处理图像,即时通讯使用了功能await
  • html2canvas完成处理后,我将保存文档,
  • 如果假设我不会使用await我会最终达到在下载一个空白页。

下面是我的代码逻辑,

// As All Functions in js are asynchronus, to use await i am using async here
 async generateAllPdf() {
    const doc = new jsPDF('p', 'mm', 'a4');
    const options = {
      pagesplit: true
    };
    const ids = document.querySelectorAll('[id]');
    const length = ids.length;
    for (let i = 0; i < length; i++) {
      const chart = document.getElementById(ids[i].id);
      // excute this function then exit loop
      await html2canvas(chart, { scale: 1 }).then(function (canvas) { 
        doc.addImage(canvas.toDataURL('image/png'), 'JPEG', 10, 50, 200, 150);
        if (i < (length - 1)) {
          doc.addPage();
        }
      });
    }
    // download the pdf with all charts
    doc.save('All_charts_' + Date.now() + '.pdf');
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM