Skip to content

Tut2.header footer pagebreak image

Fery Wardiyanto edited this page Feb 10, 2015 · 1 revision

Header, footer, page break and image

Here's a two page example with header, footer and logo:

<?php
<span class="kw">require(</span><span class="str">'fpdf.php'</span><span class="kw">);

class </span>PDF <span class="kw">extends </span>FPDF
<span class="kw">{
</span><span class="cmt">// Page header
</span><span class="kw">function </span>Header<span class="kw">()
{
    </span><span class="cmt">// Logo
    </span>$<span class="kw">this-></span>Image<span class="kw">(</span><span class="str">'logo.png'</span><span class="kw">,</span>10<span class="kw">,</span>6<span class="kw">,</span>30<span class="kw">);
    </span><span class="cmt">// Arial bold 15
    </span>$<span class="kw">this-></span>SetFont<span class="kw">(</span><span class="str">'Arial'</span><span class="kw">,</span><span class="str">'B'</span><span class="kw">,</span>15<span class="kw">);
    </span><span class="cmt">// Move to the right
    </span>$<span class="kw">this-></span>Cell<span class="kw">(</span>80<span class="kw">);
    </span><span class="cmt">// Title
    </span>$<span class="kw">this-></span>Cell<span class="kw">(</span>30<span class="kw">,</span>10<span class="kw">,</span><span class="str">'Title'</span><span class="kw">,</span>1<span class="kw">,</span>0<span class="kw">,</span><span class="str">'C'</span><span class="kw">);
    </span><span class="cmt">// Line break
    </span>$<span class="kw">this-></span>Ln<span class="kw">(</span>20<span class="kw">);
}

</span><span class="cmt">// Page footer
</span><span class="kw">function </span>Footer<span class="kw">()
{
    </span><span class="cmt">// Position at 1.5 cm from bottom
    </span>$<span class="kw">this-></span>SetY<span class="kw">(-</span>15<span class="kw">);
    </span><span class="cmt">// Arial italic 8
    </span>$<span class="kw">this-></span>SetFont<span class="kw">(</span><span class="str">'Arial'</span><span class="kw">,</span><span class="str">'I'</span><span class="kw">,</span>8<span class="kw">);
    </span><span class="cmt">// Page number
    </span>$<span class="kw">this-></span>Cell<span class="kw">(</span>0<span class="kw">,</span>10<span class="kw">,</span><span class="str">'Page '</span><span class="kw">.</span>$<span class="kw">this-></span>PageNo<span class="kw">().</span><span class="str">'/{nb}'</span><span class="kw">,</span>0<span class="kw">,</span>0<span class="kw">,</span><span class="str">'C'</span><span class="kw">);
}
}

</span><span class="cmt">// Instanciation of inherited class
</span>$pdf <span class="kw">= new </span>PDF<span class="kw">();
</span>$pdf<span class="kw">-></span>AliasNbPages<span class="kw">();
</span>$pdf<span class="kw">-></span>AddPage<span class="kw">();
</span>$pdf<span class="kw">-></span>SetFont<span class="kw">(</span><span class="str">'Times'</span><span class="kw">,</span><span class="str">''</span><span class="kw">,</span>12<span class="kw">);
for(</span>$i<span class="kw">=</span>1<span class="kw">;</span>$i<span class="kw"><=</span>40<span class="kw">;</span>$i<span class="kw">++)
    </span>$pdf<span class="kw">-></span>Cell<span class="kw">(</span>0<span class="kw">,</span>10<span class="kw">,</span><span class="str">'Printing line number '</span><span class="kw">.</span>$i<span class="kw">,</span>0<span class="kw">,</span>1<span class="kw">);
</span>$pdf<span class="kw">-></span>Output<span class="kw">();
</span>?>

[Demo]

This example makes use of the Header() and Footer() methods to process page headers and footers. They are called automatically. They already exist in the FPDF class but do nothing, therefore we have to extend the class and override them.

The logo is printed with the Image() method by specifying its upper-left corner and its width. The height is calculated automatically to respect the image proportions.

To print the page number, a null value is passed as the cell width. It means that the cell should extend up to the right margin of the page; this is handy to center text. The current page number is returned by the PageNo() method; as for the total number of pages, it's obtained via the special value {nb} which is substituted when the document is finished (provided you first called AliasNbPages()).

Note the use of the SetY() method which allows to set position at an absolute location in the page, starting from the top or the bottom.

Another interesting feature is used here: the automatic page breaking. As soon as a cell would cross a limit in the page (at 2 centimeters from the bottom by default), a break is issued and the font restored. Although the header and footer select their own font (Arial), the body continues with Times. This mechanism of automatic restoration also applies to colors and line width. The limit which triggers page breaks can be set with SetAutoPageBreak().

Clone this wiki locally