pdfkit nodejs,第 2 页中的每页一个元素

问题描述 投票:0回答:2

我使用 pdfkit 生成 pdf 发票。 当我的所有内容都适合一页时,我就没有问题了。

但是,当它不适合并且需要额外的页面时,我有一个奇怪的行为: 它没有添加第二页中的元素,而是只添加一行,页面的其余部分为空白。 然后在第三页上我有另一个元素,其余的为空白,然后是第四页,第五页等等。

这部分对应的代码如下:

for (let i = 0; i < data.items.length; i++) {
        const item = data.items[i];
        this.itemPositionY = this.itemPositionY + 20;
        if (item.bio) this.containBioProduct = true;
        let itemName = item.bio ? `${item.item}*` : item.item;
        this.generateTableRow(
            doc,
            this.itemPositionY,
            itemName,
            "",
            this.formatCurrency(item.itemPriceDf.toFixed(2)),
            item.quantity,
            this.formatCurrency(item.itemPriceTotalDf.toFixed(2))
        );
        this.generateHr(doc, this.itemPositionY + 15);
    }

基本上我只是迭代一系列产品。对于每一行,我的 Y 位置都有 +20。

感谢您的帮助。

node.js pdfkit node-pdfkit
2个回答
1
投票

如果有人遇到这个问题,这里有一个解决方案:

在代码中的每个地方,我都知道可以生成额外的页面,我添加以下内容:

if (this.position > 680) {
   doc.addPage();
   this.position = 50;
}

它允许您控制新页面的生成(而不是 pdfkit 自动执行此操作,但存在潜在问题)

您只需要从“this.position”的初始化开始跟踪位置即可。 这样,每当它比 Y 位置优越时(在我的例子中是 680,它比 pdfkit 的页面要少一些),你只需执行“doc.addPage()”,这将创建另一个页面,然后重新初始化你的位置到新页面的开头。


0
投票

您需要使用其他变量重置每页的位置:

let j = 0;
for (i = 0; i < invoice.items.length; i++) {
  const item = invoice.items[i];
  let position = position + 20 * j;
  j++;  
....
....
  if (position > 740) {
    doc.addPage();
    j = 0;
  }
}

© www.soinside.com 2019 - 2024. All rights reserved.