【问题标题】:How to change footer of a particular page with a particular header title in TCPDF如何在 TCPDF 中更改具有特定页眉标题的特定页面的页脚
【发布时间】:2018-08-17 15:52:48
【问题描述】:

我正在使用 AddPage() 方法在 TCPDF 中创建多个页面。创建第二个页面时,我调用 setHeaderData() 方法来设置标题名称。在某些情况下,第一页可能会溢出并自动分页。我需要在设置页眉标题的第一页之前识别页面并仅更改其页脚。如何使用 TCPDF 实现这一点。

【问题讨论】:

    标签: php tcpdf


    【解决方案1】:

    一种解决方案是设置一个新属性,以便在 TCPDF 调用 Footer() 方法时识别此页面。

    下面的示例在创建第一页之前将新的PrintCoverPageFooter 属性设置为True,然后在生成第二页之前将其设置为False。然后在带有page 属性的条件语句中使用此属性来创建唯一的页脚。还有一个PrintCoverPageHeader 属性允许在文档的封面上自定义标题。

    <?php
    require_once('tcpdf_include.php');
    
    class MYPDF extends TCPDF {
        public function Header() {
            if ($this->PrintCoverPageHeader) {
                $this->Cell(0, 15, '<< Cover Page Header >> ', 0, false, 'C', 0, '', 0, false, 'M', 'M');
            } else {
                $this->Cell(0, 15, '<< Other Page Header >> ', 0, false, 'C', 0, '', 0, false, 'M', 'M');
            }
        }
    
        public function Footer() {
            $this->SetY(-15);
            if ($this->PrintCoverPageFooter && $this->page == 1){
                $this->Cell(0, 10, 'Cover Page Footer '.$this->getAliasNumPage().'/'.$this->getAliasNbPages(), 0, false, 'C', 0, '', 0, false, 'T', 'M');
            } elseif ($this->PrintCoverPageFooter && $this->page == 2){
                    $this->Cell(0, 10, 'Cover Page Overflow Footer '.$this->getAliasNumPage().'/'.$this->getAliasNbPages(), 0, false, 'C', 0, '', 0, false, 'T', 'M');
            } else {
                $this->Cell(0, 10, 'Other Page Footer'.$this->getAliasNumPage().'/'.$this->getAliasNbPages(), 0, false, 'C', 0, '', 0, false, 'T', 'M');
            }
        }
    }
    
    $pdf = new MYPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
    
    $pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
    $pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
    $pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
    $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
    
    // Add first page with first page header and footer.
    $pdf->PrintCoverPageHeader = True;
    $pdf->PrintCoverPageFooter = True;
    $pdf->AddPage();
    $pdf->Write(0, str_repeat("Cover Page\n",80), '', 0, 'C', true, 0, false, false, 0);
    
    // Add second page with other header and footer.
    $pdf->PrintCoverPageHeader = False;
    $pdf->AddPage();
    $pdf->PrintCoverPageFooter = False;
    $pdf->Write(0, "Second Page", '', 0, 'C', true, 0, false, false, 0);
    
    // Add third page with other header and footer.
    $pdf->AddPage();
    $pdf->Write(0, "Third Page", '', 0, 'C', true, 0, false, false, 0);
    
    $pdf->Output('example.pdf', 'I');
    

    【讨论】:

    • 在本例中,手动调用 AddPage()。但就我而言,在自动分页期间由 TCPDF 调用 AddPage ()。因为我们不知道 autopagebreak 会创建多少页。在那种情况下如何处理。有什么想法吗??
    • @albert 如果“首页”可能导致多个AutoPageBreak 事件,那么您可以使用以下条件仅在示例中将页脚打印到“首页”的最后一页上图:if ($this-&gt;PrintCoverPageFooter &amp;&amp; !$this-&gt;PrintCoverPageHeader) {}
    • @albert 可以通过增加str_repeat() 中的乘数来测试多个AutoPageBreak 事件。
    • 它似乎工作正常。非常感谢。您能否解释一下它如何识别由自动分页符创建的最后一页
    • AddPage() 方法在上一页绘制页脚,在新页绘制页眉。这就是在调用AddPage() 方法后将新的PrintCoverPageFooter 属性设置为false 的原因。这两个属性只会在您希望页脚去的第二个手动AddPage() 事件期间相反。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-26
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多