【问题标题】:How to add Header and footer content to pdfkit for node.js如何将页眉和页脚内容添加到 pdfkit for node.js
【发布时间】:2017-07-23 03:20:57
【问题描述】:

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

谢谢。

【问题讨论】:

    标签: node.js pdf express pdfkit


    【解决方案1】:

    在所有页面上添加页脚

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

    【讨论】:

    • 值得注意的是:PDFkit 不会让你在页边空白处写字。这就是为什么这个答案会取消设置底部边距,写入,然后重置底部边距。
    • 这对我来说是一个交易破坏者doc.page.margins.bottom = 0。我需要删除边距,然后将我的自定义页脚设计添加到其中
    【解决方案2】:

    你可以这样做:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 谢谢。我会在一段时间内让你知道并接受这一点。
      • 我现在正在检查这个,可能会改用它而不是 pdfKit。谢谢
      【解决方案4】:

      使用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);
      
        //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();
      

      【讨论】:

        【解决方案5】:

        关于这个库,我建议阅读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});
        }
        

        【讨论】:

        • 我收到了TypeError: doc.bufferedPageRange is not a function。使用https://github.com/devongovett/pdfkit/releases/download/v0.6.2/pdfkit.js
        【解决方案6】:

        这对我有用

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-03-22
          • 2011-11-27
          • 1970-01-01
          • 2018-08-17
          • 2021-08-14
          • 1970-01-01
          相关资源
          最近更新 更多