0

我已经看到了很多关于这个但没有明确答案的问题。我使用 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 设置为“<=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 试图比较相反还是别的什么?

任何帮助都非常适合。

伊恩

4

5 回答 5

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;

希望这可以帮助

于 2013-10-22T00:30:18.490 回答
1

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

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

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

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

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

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

于 2016-06-16T14:19:38.907 回答
0

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

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

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

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

于 2015-06-03T17:34:21.410 回答
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');

        }
    }

我希望这可以帮助别人。

于 2019-04-24T14:42:35.517 回答
0

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

$pdf = new PDF();
$pdf->isFinished = false;

// [...]

$pdf->AddPage();
$pdf->isFinished = true;
// Add your page contents here
$pdf->isFinished = false;

我在这里发布了更长的版本。

我本来想将此添加为对丹尼回答的评论。但是,由于是新人且声誉低下,我不得不发布自己的帖子。:/

于 2019-01-12T11:39:55.710 回答