我想使用节点js(express)生成pdf。我需要在页面编号的每个页面上添加页眉和页脚。任何帮助,将不胜感激。
感谢。
答案 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 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
});
}