【问题标题】:Autopaging jspdf when content increases内容增加时自动分页jspdf
【发布时间】:2019-04-15 08:29:29
【问题描述】:

我正在尝试创建一个在内容增加时自动翻页的 pdf。 这是我的示例代码。任何帮助将不胜感激:)

HTML 代码

<div *ngFor="let data of data">
  <button click = "previewPdf(data)"> Preview </button>
</div>

Javascript

previewPdf(data) {
  var doc = new jsPDF();
  let bodyContent = doc.splitTextToSize(data.body, 250);
  let lineheight = 6;
  let offsety = 5;

  this.data.forEach(function(i) {
  doc.setFontSize(20);
  doc.text(10,10 + lineheight * 0 + offsety, bodyContent);
  doc.output("dataurlnewwindow");
});

}

JSON

data[{
  "body": "A very long letter content...";
}];

编辑: 我已经在下面尝试了这个示例代码,它给了我 2 页,最后一页是空白的

previewPdf(data) {
    var doc = new jsPDF('p', 'mm', 'a4');
    let pageHeight = doc.internal.pageSize.getHeight();
    let bodyContent = doc.splitTextToSize(data.body, 250);
    let lineheight = 6;
    let offsetY = 5;


    doc.text(10, 10, bodyContent);
    // Before adding new content
    let y = 840; // Height position of new content
    if (y >= pageHeight) {
      doc.addPage();
      y = 0 // Restart height position
    }


    // this.data.forEach(function(i) {
    //   doc.setFontSize(20);
    //   
    // });
    doc.output("dataurlnewwindow");
  }

【问题讨论】:

    标签: javascript angular jspdf


    【解决方案1】:

    您可以使用addHTML 来使用 pagesplit 参数

    编辑:

    还有另一个肮脏的技巧,您可以在添加内容之前计算剩余页面的高度

    doc = new jsPdf();
    
    pageHeight= pdf.internal.pageSize.height; //get total page height
    

    然后在添加内容检查高度条件时,如下所示

    pdf.text(x, y, "value");
    
    if (y>=pageHeight)
    {
    pdf.addPage();
    }
    

    【讨论】:

    • var pdf = new jsPDF('p', 'pt', 'a4'); var options = { pagesplit: true }; pdf.addHTML($(".pdf-wrapper"), options, function() { pdf.save("test.pdf"); });
    【解决方案2】:

    工作解决方案

      previewPdf(data) {
        var doc = new jsPDF();
    
        var bodyContent = doc.splitTextToSize(data.body, 250);
        var pageHeight = doc.internal.pageSize.getHeight();
        doc.setFontType("normal");
        doc.setFontSize("12");
    
        var y = 15;
        for (var i = 0; i < bodyContent.length; i++) {
          if (y+10 > pageHeight) {
            y = 15;
            doc.addPage();
          }
          doc.text(10, y, bodyContent[i]);
          y = y + 7;
        }    
         doc.output('dataurlnewwindow');
    
      }
    
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-17
    • 1970-01-01
    • 2020-04-10
    • 1970-01-01
    • 2022-11-28
    相关资源
    最近更新 更多