如何为Node.js将页眉和页脚内容添加到pdfkit

Akh*_*pan 3 pdf pdfkit node.js express

我想使用node js(express)生成pdf。我需要在具有页码的每个页面上添加页眉和页脚。任何帮助,将不胜感激。

谢谢。

Pot*_*mer 8

使用钩子向每个页面添加内容doc.on('pageAdded'...会产生令人讨厌的副作用,即在填写页面时劫持您的位置( doc.x/ )。doc.y此外,您必须设置该autoFirstPage: false标志才能在创建第一页之前注入您的钩子。

我发现使用bufferPages模式,然后对最后的页面进行全局编辑更加优雅/合乎逻辑。

const doc = new PDFDocument({
  bufferPages: true
});

doc.text("Hello World")
doc.addPage();
doc.text("Hello World2")
doc.addPage();
doc.text("Hello World3")

//Global Edits to All Pages (Header/Footer, etc)
let pages = doc.bufferedPageRange();
for (let i = 0; i < pages.count; i++) {
  doc.switchToPage(i);
    
  //Header: Add page number
  let oldTopMargin = doc.page.margins.top;
  doc.page.margins.top = 0 //Dumb: Have to remove top margin in order to write into it
  doc
    .text(
      `Page: ${i + 1} of ${pages.count}`,
      0,
      (oldTopMargin/2), // Centered vertically in top margin
      { align: 'center' }
    );
  doc.page.margins.top = oldTopMargin; // ReProtect top margin

  //Footer: Add page number
  let oldBottomMargin = doc.page.margins.bottom;
  doc.page.margins.bottom = 0 //Dumb: Have to remove bottom margin in order to write into it
  doc
    .text(
      `Page: ${i + 1} of ${pages.count}`,
      0,
      doc.page.height - (oldBottomMargin/2), // Centered vertically in bottom margin
      { align: 'center' }
    );
  doc.page.margins.bottom = oldBottomMargin; // ReProtect bottom margin
}

doc.end();
Run Code Online (Sandbox Code Playgroud)


小智 7

在所有页面上添加页脚

doc.addPage()

let bottom = doc.page.margins.bottom;
doc.page.margins.bottom = 0;
doc.text('Page 1', 0.5 * (doc.page.width - 100), doc.page.height - 50,
{
width: 100,
align: 'center',
lineBreak: false,
})

// Reset text writer position

doc.text('', 50, 50)
doc.page.margins.bottom = bottom;

let pageNumber = 1;

doc.on('pageAdded', () => {
    pageNumber++
    let bottom = doc.page.margins.bottom;
    doc.page.margins.bottom = 0;

    doc.text(
        'Pág. ' + pageNumber, 
        0.5 * (doc.page.width - 100),
        doc.page.height - 50,
        {
            width: 100,
            align: 'center',
            lineBreak: false,
        })

    // Reset text writer position
    doc.text('', 50, 50);
    doc.page.margins.bottom = bottom;
})
Run Code Online (Sandbox Code Playgroud)


小智 6

你可以这样做 :

doc.text('This is a footer', 20, doc.page.height - 50, {
    lineBreak: false
  });
Run Code Online (Sandbox Code Playgroud)


Mid*_*kar 5

比pdfKit更好,我为您推荐pdfMake。我对pdfmake的体验很棒。https://www.npmjs.com/package/pdfmake