在表格之前和之后添加内容(jsPDF autotable)

时间:2017-11-16 11:00:07

标签: jspdf jspdf-autotable

我对jsPDF autotable有疑问。

我的代码:

    $('#printBtn').on('click', function() {
    var pdf = new jsPDF('p', 'pt', 'a4');
    var res = pdf.autoTableHtmlToJson(document.getElementById("tablePrint"));

    pdf.autoTable(res.columns, res.data, {
        theme : 'plain',
        styles: {
            fontSize: 12
        },
        showHeader: 'never',
        createdCell: function(cell, data) {
            var tdElement = cell.raw;
            if (tdElement.classList.contains('hrow')) {
                cell.styles.fontStyle = 'bold';
            }
        }
    });

    pdf.save("test.pdf");
});

我希望在div之前和之后添加Text。 我在jsPDF可自动编写的示例中找到了此代码段:

    var before = "text before";
    pdf.text(before, 14, 30);

此代码效果很好。我在pdf.autoTable(...});之前插入了它。 但我不知道14号和30号是什么?

然后我在pdf.autoTable函数调用之后插入代码,并在pdf的最后一页上打印文本,但是在页面顶部,而不是最后,为什么?

对不起我的坏事。 谢谢你的帮助。

2 个答案:

答案 0 :(得分:5)

如果要添加的内容是必须先移动要使用autotable添加的表之前要添加的内容,则可以通过在doc.autotable中添加startY: 150属性来实现此目的:

pdf.autoTable(res.columns, res.data, {
  theme : 'plain',
  styles: {
    fontSize: 12
  },
  startY: 150,
  showHeader: 'never',
  createdCell: function(cell, data) {
    var tdElement = cell.raw;
    if (tdElement.classList.contains('hrow')) {
      cell.styles.fontStyle = 'bold';
    }
  }
});

150是要移动的像素值。在此上方,您可以将所需的文本与您放置的代码一起放置。

var before = "text before";
pdf.text(before, 14, 30);

现在,值14(Y中的值)和30(Y中的值)是您希望文本以像素为单位移动的值。

要在表格后添加文本,您必须首先获取表格结束的像素数,然后从此处输入所需的文本。

  let finalY = pdf.previousAutoTable.finalY; //this gives you the value of the end-y-axis-position of the previous autotable.
  pdf.text("Text to be shown relative to the table", 12, finalY + 10); //you use the variable and add the number of pixels you want it to move.

答案 1 :(得分:1)

这是我的回答:
所以这是你的Autotable函数调用:

var pdf = new jsPDF('p', 'pt', 'a4');

由于jsPDF Autotables基于jsPDF,您必须转到here

pt是一个称为点的度量单位,因此14和30是点。在第一个位置,14,向左和向右移动元素。第二个位置30向下和向上移动元素。我猜它们就像像素(px)。好像你必须使用积分将文本移动到所需的位置。