如何向pdfkit for node.js添加页眉和页脚内容

如何向pdfkit for node.js添加页眉和页脚内容,node.js,pdf,express,pdfkit,Node.js,Pdf,Express,Pdfkit,我想使用NodeJS(express)生成pdf。我需要添加页眉和页脚与页码的每一页。任何帮助都将不胜感激 谢谢。比pdfKit更好,我向您推荐pdfMake。我使用pdfmake的经验非常棒 您可以这样做: doc.text('This is a footer', 20, doc.page.height - 50, { lineBreak: false }); 关于这个库,我建议阅读PDF文档,这是很多必须完成的在线HTML文档 警告:为了能够在主内容区域之外进行写入,必须在文本

我想使用NodeJS(express)生成pdf。我需要添加页眉和页脚与页码的每一页。任何帮助都将不胜感激


谢谢。

比pdfKit更好,我向您推荐pdfMake。我使用pdfmake的经验非常棒

您可以这样做:

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

关于这个库,我建议阅读PDF文档,这是很多必须完成的在线HTML文档

警告:为了能够在主内容区域之外进行写入,必须在文本的函数参数上设置高度和宽度

如pdf文档所示,您可以执行以下操作:

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

//addPage X times

const range = doc.bufferedPageRange();

for( let i = range.start; i <  (range.start + range.count); i++) {

  doc.switchToPage(i);
  doc.text(`Page ${i + 1} of ${range.count}`, 
            200, 
            doc.page.height - 40, 
            { height : 25, width : 100});
}
const doc=newpdfdocument({bufferPages:true})
//添加页面X次
常量范围=doc.bufferedPageRange();
for(设i=range.start;i<(range.start+range.count);i++){
文件交换页(i);
doc.text(`Page${i+1},共${range.count}`,
200, 
doc.page.height-40,
{高:25,宽:100});
}
这对我很有用

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

    for (let i = range.start; i <= (doc._pageBufferStart + 
    doc._pageBuffer.length - 1); i++) {

    doc.switchToPage(i);

        doc.font('Times-Roman').fontSize(8).text('Footer', 90, 
    doc.page.height - 40, {
    lineBreak: false
  });

}
const doc=newpdfdocument({bufferPages:true})
常量范围=doc.bufferedPageRange();

对于(让i=range.start;i在所有页面上添加页脚

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;
})

使用
doc.on('pageAdded'…
hook)向每个页面添加内容会产生严重的副作用,即在填充页面时劫持您的位置(
doc.x
/
doc.y
)。此外,您必须设置
autoFirstPage:false
标志,以便在创建第一页之前插入钩子

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

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);

  //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();
const doc=新PDF文档({
缓冲页:对
});
文档文本(“你好,世界”)
doc.addPage();
文档文本(“Hello World2”)
doc.addPage();
文档文本(“Hello World3”)
//对所有页面(页眉/页脚等)的全局编辑
让pages=doc.bufferedPageRange();
for(设i=0;i
谢谢。过些时候我会让你知道并接受这一点。我现在正在检查这一点,可能会改用它而不是pdfKit。谢谢我得到
类型错误:doc.bufferedPageRange不是一个函数。
。使用
https://github.com/devongovett/pdfkit/releases/download/v0.6.2/pdfkit.js
值得注意:
PDFkit
w我不允许您在页边距中写入内容。这就是为什么此答案会取消底部页边距,写入,然后重置底部页边距。这是我的交易破坏者
doc.page.margins.bottom=0
。我需要删除页边距,然后将自定义页脚设计添加到其中