【问题标题】:JSPDF : Genearte pdf from object of array and display like LablesJSPDF:从数组对象生成pdf并像标签一样显示
【发布时间】:2017-03-20 10:10:43
【问题描述】:

我想从数组对象生成 PDF 并像这样显示,我已附加在 image. 中。当我的输出按行排列时,我如何实现这一点。

  htmlStr += '<table id="customers" class="table-wide">';
htmlStr += '<thead ></thead>';
htmlStr += '<tbody ></tbodyid>';
htmlStr += '</table>';
this.html = $(htmlStr);

【问题讨论】:

  • 你在探索 github 吗?
  • 是的,它们是不同的。

标签: jspdf jspdf-autotable


【解决方案1】:

我认为你必须自己做。 jsPDF-Autotable 不是这种情况的好选择。以下是类似划痕的东西,它不是一个完美的解决方案。请继续努力。

其实我们要创建网格卡片,直到页面的宽度和高度。

如果高度达到,则添加新页面doc.addPage()

如果宽度达到,则添加新行。

    var data = [{
      "Name": "Ronan",
      "Email": "sodales.elit@eratSed.co.uk",
      "Company": "Malesuada Malesuada Ltd"
    }, {
      "Name": "Calvin",
      "Email": "amet.nulla@Vestibulumante.ca",
      "Company": "Donec Egestas Foundation"
    }, {
      "Name": "Kane",
      "Email": "Duis.mi@consectetueradipiscingelit.net",
      "Company": "Arcu Institute"
    }, {
      "Name": "Kasper",
      "Email": "magna.Phasellus.dolor@velconvallisin.co.uk",
      "Company": "Tempor LLP"
    }];
    
    
  

     var doc = new jsPDF('p', 'pt', 'a4');
//Dimension of A4 in pts: 595 × 842

var pageWidth = 595;
var pageHeight = 842;

var pageMargin = 20;

pageWidth -= pageMargin * 2;
pageHeight -= pageMargin * 2;

var cellPadding = 10;
var cellWidth = 180;
var cellHeight = 70;
var lineHeight = 20;

var startX = pageMargin;
var startY = pageMargin;


doc.setFontSize(12);

var page = 1;

function createCard(item) {

  //cell projection
  var requiredWidth = startX + cellWidth + (cellPadding * 2);

  var requiredHeight = startY + cellHeight + (cellPadding * 2);



  if (requiredWidth <= pageWidth) {

    textWriter(item, startX + cellPadding, startY + cellPadding);

    startX = requiredWidth;
    //  startY += cellHeight + cellPadding;

  } else {


    if (requiredHeight > pageHeight) {
      doc.addPage();
      page++;
      doc.setPage(page);

      startY = pageMargin;
    } else {
      startY = requiredHeight;
    }

    startX = pageMargin;


    textWriter(item, startX + cellPadding, startY + cellPadding);

    startX = startX + cellWidth + (cellPadding * 2);
  }

}

function textWriter(item, xAxis, yAxis) {
  doc.text(item.Name, xAxis, yAxis);
  doc.text(item.Email, xAxis, yAxis + lineHeight);
  doc.text(item.Company, xAxis, yAxis + (lineHeight * 2));
}


for (var i = 0; i < data.length; i++) {
  createCard(data[i]);
}

doc.save('grid.pdf');

供参考https://jsfiddle.net/Purushoth/jodfkz59/

【讨论】:

  • 我正在以表格形式从数据库中获取数据,并将在其上使用 for 循环。我看到了jsfiddle。我想我可以通过扩展页面宽度来修复扩展的剪切数据
  • 您也可以从 html 表中获取数据。正如我所说,这不是一个完美的解决方案,只是一个划痕。但它可以给你一个起点。顺便说一句,我现在困了。请继续努力。
  • 我已经解决了所有设计问题,但是在 page1 已满后没有生成新页面。我测试了一些技巧,但没有用
  • 一旦您到达当前页面的末尾。您是否尝试添加新页面doc.addPage(); 并将页面设置为当前页面。喜欢doc.setPage(1); 然后继续使用标签。那是你尝试过的吗?有什么问题?
  • 我会尽快更新小提琴,我现在正在工作。自己检查逻辑并尝试找出漏洞@tousifNoor
猜你喜欢
  • 1970-01-01
  • 2021-10-31
  • 2018-02-09
  • 2015-05-03
  • 2017-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多