如何为node.js的pdfkit添加页眉和页脚内容

时间:2017-03-03 06:00:56

标签: node.js pdf express pdfkit

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

感谢。

6 个答案:

答案 0 :(得分: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;
})

答案 1 :(得分:4)

比pdfKit更好我建议你使用pdfMake。我对pdfmake的体验很棒。https://www.npmjs.com/package/pdfmake

答案 2 :(得分:4)

你可以这样做:

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

答案 3 :(得分:4)

使用df['diff_year'] = df['diff'] / np.timedelta64(1, 'Y') 钩子将内容添加到每个页面都有令人讨厌的副作用,即在填充页面时劫持了您的位置(doc.on('pageAdded'... / doc.x)。此外,您必须设置doc.y标志才能在创建首页之前注入您的钩子。

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

autoFirstPage: false

答案 4 :(得分:1)

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

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

所以你可以看到pdf doc:

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

答案 5 :(得分:0)

这对我有用

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

}