最后一页使用If语句和{nb}的FPDF页脚

时间:2013-09-19 14:30:59

标签: php if-statement pdf-generation fpdf

我已经看到了很多关于此的问题,但没有明确的答案。我使用FPDF动态创建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设置为"< = 2"将在第一页和第二页上添加相同的内容,太棒了!它将$ pagenumber识别为2,或者如果我将3页作为3,那么它可以看到我有多页,但是,当我将代码更改为:

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试图与相反的或其他东西进行比较?

任何帮助大大占用。

伊恩

5 个答案:

答案 0 :(得分:3)

完成写后,

{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;

希望这有帮助

答案 1 :(得分:1)

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

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

在代码的最后,当您在文档中没有任何其他内容时,请执行以下操作:

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

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

需要SetY(),否则您的内容将被写在文档之外。

答案 2 :(得分:0)

我知道我在这里参加派对有点晚了但是当我遇到同样的问题时,那是因为我没有调用AliasNbPages()函数。他们提供的示例似乎并没有将其包含在他们的代码中!

我在制作新的pdf后立即调用它:

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

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

答案 3 :(得分:0)

多年后对于遇到这个问题的人:丹尼(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答案的注释。但是,由于是新手并且声誉低下,我不得不发布自己的帖子。 :/

答案 4 :(得分:0)

我也迟到了派对-大声笑保罗在正确的轨道上。我修改了他的解决方案以使用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');

        }
    }

我希望这对某人有帮助。