node.js 如何将页眉和页脚内容添加到 pdfkit
How to add Header and footer content to pdfkit for node.js
我想使用 node js (express) 生成一个 pdf。我需要在每个带有页码的页面上添加页眉和页脚。任何帮助,将不胜感激。
谢谢。
比 pdfKit 更好,我为您推荐 pdfMake。我对 pdfmake 的体验非常棒。https://www.npmjs.com/package/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 = 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
});
}
在所有页面上添加页脚
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'...
挂钩向每个页面添加内容会在填写页面时劫持您的位置 (doc.x
/doc.y
)。此外,您必须设置 autoFirstPage: false
标志以便在创建第一页之前注入您的钩子。
我发现使用 bufferPages 模式然后在最后对页面进行全局编辑 graceful/logical。
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();
我想使用 node js (express) 生成一个 pdf。我需要在每个带有页码的页面上添加页眉和页脚。任何帮助,将不胜感激。
谢谢。
比 pdfKit 更好,我为您推荐 pdfMake。我对 pdfmake 的体验非常棒。https://www.npmjs.com/package/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 = 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
});
}
在所有页面上添加页脚
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'...
挂钩向每个页面添加内容会在填写页面时劫持您的位置 (doc.x
/doc.y
)。此外,您必须设置 autoFirstPage: false
标志以便在创建第一页之前注入您的钩子。
我发现使用 bufferPages 模式然后在最后对页面进行全局编辑 graceful/logical。
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();