【问题标题】:FPDF Footer on last page using If statement and {nb}使用 If 语句和 {nb} 在最后一页的 FPDF 页脚
【发布时间】:2013-09-24 16:56:20
【问题描述】:

我已经看到了很多关于此的问题,但没有明确的答案。我使用 FPDF 动态创建具有 DB 值的 PDF,我只想要最后一页的页脚,因为它的值基于 DB 值,所以 PDF 可能是 2、3、4 页长。所以我开始像这样弄乱 FPDF 的页脚

function Footer()
{
    $this->SetY(-15);
    $this->SetFont('Arial','I',8);
    //Page number
    $pagenumber = '{nb}';
    if($this->PageNo() == 2){
        $this->Cell(173,10, ' FOOTER TEST  -  '.$pagenumber, 0, 0);
    }
}

这会在第二页上重新运行值“FOOTER TEST - 2”,如果我将 if 设置为“

function Footer()
{
    $this->SetY(-15);
    $this->SetFont('Arial','I',8);
    //Page number
    $pagenumber = '{nb}';
    if($this->PageNo() == $pagenumber){
        $this->Cell(173,10, ' FOOTER TEST  -  '.$pagenumber, 0, 0);
    }
}

以为它输出最后一页一次,把它加到if语句中就可以了,它什么都不显示,比如if语句不能识别$pagenumber的值,是不是因为它是一个字符串或者int 试图与相反的对象或其他东西进行比较?

任何帮助都非常适合。

伊恩

【问题讨论】:

    标签: php if-statement pdf-generation fpdf


    【解决方案1】:

    {nb} 是在您完成写作后作为后期替换完成的(因为它不知道在那之前有多少页)而当页面完成时输出页脚,您最好的选择是可能设置当您完成输出所有内容后,将类上的标志设置为 true,然后检查页脚中的标志

    function Footer()
    {
        $this->SetY(-15);
        $this->SetFont('Arial','I',8);
        //Page number
        if($this->isFinished){
            $this->Cell(173,10, ' FOOTER TEST  -  {nb}', 0, 0);
        }
    }
    

    然后在你的 PDF 中编写代码

    ...
    $pdf->isFinished = true;
    

    希望对你有帮助

    【讨论】:

    • 感谢丹尼的帮助。
    【解决方案2】:

    如果您使用 MultiCell() 和 AutoPageBreak,您正在编写的内容可能会创建自动分页符。

    在这种情况下,在调用 MultiCell() 之前设置一个布尔标志可以创建最后两页预期的最后一个页脚,而不仅仅是最后一个。

    在您的代码末尾,当您的文档中没有其他内容可写时,请执行以下操作:

    $this->InFooter = true;
    $this->SetY(-15);
    $this->Write(5, "My end footer text");
    $this->InFooter = false;
    

    InFooter 布尔值告诉 FPDF 我们正在页脚中写入内容,FPDF 不会自动创建分页符。

    SetY() 是必需的,否则你的内容将被写入文档之外。

    【讨论】:

      【解决方案3】:

      我知道我在这里聚会有点晚了,但是当我遇到同样的问题时,那是因为我没有调用 AliasNbPages() 函数。他们给出的例子似乎没有在他们的代码中包含这个!

      我只是在我制作一个新的 pdf 后立即调用它:

       $pdf = new PDF();
       $pdf->AliasNbPages();
      

      现在我的 {nb} 被替换为总页数!

      【讨论】:

        【解决方案4】:

        对于多年后偶然发现这个问题的人:上面 Danny 的回答也可用于跳过任意页面上的页脚(或页眉)。您只需要确保在添加页面后将 skip-Boolean 设置为 true,然后添加内容,并将其设置回 false,以防您希望在下一页有页脚。

        $pdf = new PDF();
        $pdf->isFinished = false;
        
        // [...]
        
        $pdf->AddPage();
        $pdf->isFinished = true;
        // Add your page contents here
        $pdf->isFinished = false;
        

        我发布了更长的版本here

        我希望将此作为评论添加到 Danny 的回答中。但是,由于是新人且声誉低下,我不得不发布自己的帖子。 :/

        【讨论】:

          【解决方案5】:

          我也迟到了——哈哈,保罗走在了正确的轨道上。我修改了他的解决方案以使用 while 循环。

             $pdf = new PDF();
             $pdf->isFinished = false;
             $pdf->AddPage();
             // Add your page contents here
             while($row1 = $rs1->fetch_assoc()){
             // output...
               $pdf->isFinished = false;
             }
             $pdf->isFinished = true;
          

          现在在页脚中...

          function Footer()
              {
                  $this->SetY(-15);
                  if($this->isFinished){
                    $this->Cell(195,10, "Signature:_______________________________", 0, 0,'R');
          
                  }
              }
          

          我希望这对某人有所帮助。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-07-27
            • 2021-01-18
            • 2019-10-08
            • 1970-01-01
            • 2023-01-13
            相关资源
            最近更新 更多