0

我使用 pdfkit 生成 pdf 发票。当我的所有内容都放在一个页面中时,我没有问题。

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

下面是这部分对应的代码:

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。

谢谢你的帮助。

这是第 1 页的结尾和第 2 页的开头 这是第3页,只有一个元素,其余为空白

4

1 回答 1

1

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

在代码中我知道可以生成一个额外页面的任何地方,我都添加了这个:

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

它允许您控制新页面的生成(而不是 pdfkit 自动执行它有潜在的问题)

您只需要从“this.position”的初始化中跟踪位置。这样,每当它优于 Y 位置(在我的情况下为 680,它比使用 pdfkit 的页面少一点),你只需执行“doc.addPage()”,这将创建另一个页面,然后你重新初始化你的位置到新页面的开头。

于 2021-01-05T13:38:24.737 回答