Search code examples
phpcodeigniterheadertcpdf

Add main header on first page only in TCPDF


I am developing a pdf page using tcpdf to display certain data in codeigniter. It shows the data. But not in the format which I need. Now it shows data with a common header in all pages.

I need to show the main header only on the first page and the rest of the data with another sub header

My code in the controller is

<?php
tcpdf();
$obj_pdf = new TCPDF('L', PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
$obj_pdf->SetCreator(PDF_CREATOR);
$title = 'Main title';
$obj_pdf->SetTitle($title);
$obj_pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, $title, PDF_HEADER_STRING);

$obj_pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
$obj_pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
$obj_pdf->SetDefaultMonospacedFont('helvetica');
$obj_pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$obj_pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
$obj_pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
$obj_pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
$obj_pdf->SetFont('helvetica', '', 9);
$obj_pdf->setFontSubsetting(false);

$obj_pdf->AddPage();
ob_start();
// we can have any view part here like HTML, PHP etc

$tbl = <<<EOD
$pdf_cont
EOD;

$obj_pdf->writeHTML($tbl, true, false, false, false, '');

ob_end_clean();

$obj_pdf->Output('sample.pdf', 'I');

here the variable $pdf_cont contains a large table to show. I can't check(or i don't know how to do it properly) in which page I am and set the header data. Please help me to add the main header on the first page and another header on the rest on pages.

Thank you in advance...


Solution

  • You can check examples of tcpdf and you can inherit TCPDF class and use that class:

    class YOUR_CLASS extends TCPDF {
        /**
        * Overwrite Header() method.
        * @public
        */
        public function Header() {
            // if ($this->tocpage) or
            if ($this->page == 1) {
                // *** replace the following parent::Header() with your code for TOC/page you want page
                // parent::Header();
                // this will add logo and text to first page
                $this->Image('http://localhost/first_page_logo.png', 10, 10, 15, '', 'PNG', '', 'T', false, 300, '', false, false, 0, false, false, false);
                $this->SetFont('helvetica', 'B', 14);
                $this->Cell(0, 15, 'First page header text', 0, false, 'C', 0, '', 0, false, 'M', 'M');
            } else {
                // *** replace the following parent::Header() with your code for other pages
                //parent::Header();
                // following will add your own logo ant text to other pages
                $this->Image('http://localhost/other_pages_logo.png', 10, 10, 15, '', 'PNG', '', 'T', false, 300, '', false, false, 0, false, false, false);
                $this->SetFont('helvetica', 'B', 14);
                $this->Cell(0, 15, 'Other pages header text', 0, false, 'C', 0, '', 0, false, 'M', 'M');
            }
        }
    } // end of class
    

    and than remove:

    $obj_pdf = new TCPDF('L', PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
    

    with:

    $obj_pdf = new YOUR_CLASS('L', PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);