Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to set the background color for every page tcpdf

I'm currently using TCPDF to generate a resume in my web application. But with the limited support for css have cornered me. Now I'm trying to apply the background color for the every page that is generated. But I'm only getting the color for the first page.

My code is:

<?php
class PROFILE_PDF extends TCPDF
{
    public function Header()
    {
        $this->SetFillColor(52, 21, 0, 76);
        $this->Rect(0, 0, $this->getPageWidth(), $this->getPageHeight(), 'DF', "");
    }


    private $footer_data = array();


    public function Footer()
    {
        // Position at 15 mm from bottom
        $this->SetY(-15);
        // Set font
        $this->SetFont('helvetica', 'I', 8);
        // Page number


        $name = <<< EOD
        <p>Curriculum Vitae - {$this->footer_data["name"]}</p>
        <style>
            p {
                color: #F5F5F5;
            }
        </style>

        EOD;
        $this->writeHTMLCell(0, 10, '', '', $name, 0, 1, 0, true, 'L', true);

        $page = <<< EOD

        <p>Page  {$this->getAliasNumPage()} /   {$this->getAliasNbPages()}</p>
        <style>
            p {
                color: #F5F5F5;
            }
        </style>

        EOD;

        $this->writeHTMLCell(0, 10, '', 284, $page, 0, 1, 0, true, 'R', true);

        $style = array('width' => 0.5, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(128, 229, 255));
        $this->Line(0, 275, 250, 275, $style);
    }

    public function setFooterData($footer_data)
    {
        $this->footer_data = $footer_data;
    }

$pdf = new PROFILE_PDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);


$pdf->SetLineStyle(array('width' => 2, 'color' => array(112, 128, 144)));

$pdf->Line(0, 0, $pdf->getPageWidth(), 0);
$pdf->Line($pdf->getPageWidth(), 0, $pdf->getPageWidth(), $pdf->getPageHeight());
$pdf->Line(0, $pdf->getPageHeight(), $pdf->getPageWidth(), $pdf->getPageHeight());
$pdf->Line(0, 0, 0, $pdf->getPageHeight());

// set header data
$footer_data = array();
$footer_data["name"] = $personal_data["first_name"] . " " . $personal_data["last_name"];
$pdf->setFooterData($footer_data);

$pdf->setPrintHeader(false);
//$pdf->Header();
// set document information
$pdf->SetCreator(getSiteName());
$pdf->SetAuthor('Mobile Solutions');
$pdf->SetTitle($personal_data["first_name"] . " " . $personal_data["last_name"]);
$pdf->SetSubject("Student's profile");
$pdf->setPrintHeader(false);

$pdf->AddPage();

$pdf->SetFillColor(52, 21, 0, 76);
$pdf->Rect(0, 0, $pdf->getPageWidth(), $pdf->getPageHeight(), 'DF', "");


$pdf->SetFont('courier', 'B', 24);

//some html elements

$pdf->Output($personal_data["first_name"] . "_" . $personal_data["last_name"] . ".pdf", 'D');
?>

Here I'm being unable to apply the SetFillColor() function to next generated pages. What's the reason for that? TCPDF documentation says it should be apply to all the pages.

like image 337
Ragnar921 Avatar asked Mar 08 '23 01:03

Ragnar921


1 Answers

if you mean apply a background color with your header function you should apply the fill color directly on the $pdf->rect function in TCPDF

Rect( $x, $y, $w, $h, $style = '', $border_style = array(), $fill_color = array() )

so in your case it would be

$this->Rect(0, 0, $this->getPageWidth(),    $this->getPageHeight(), 'DF', "",  array(220, 220, 200));

where you have to change the array in the last argument to apply your color

It don't work because on TCPDF the fill color , as far as i know, will apply on the cell and multicell function if you specified the fill argument on true

link on rect function TCPDF

foreach ($whatever as $data) {
    if($nextpage)
    {
         $this->Rect(0, 0, $this->getPageWidth(), $this->getPageHeight(), 
                   'DF', "",  array(220, 220, 200)); // where the array is the color expected
    }
}

but the better option is to define it in the header and use as the example 51 on TCPDF link to the example

public function Header() {
    // get the current page break margin
    $bMargin = $this->getBreakMargin();
    // get current auto-page-break mode
    $auto_page_break = $this->AutoPageBreak;
    // disable auto-page-break
    $this->SetAutoPageBreak(false, 0);
    // set bacground image
    $img_file = K_PATH_IMAGES.'image_demo.jpg';
    $this->Image($img_file, 0, 0, 210, 297, '', '', '', false, 300, '', false, false, 0);
    // restore auto-page-break status
    $this->SetAutoPageBreak($auto_page_break, $bMargin);
    // set the starting point for the page content
    $this->setPageMark();
}

so here it's

public function Header() {
    // get the current page break margin
    $bMargin = $this->getBreakMargin();
    // get current auto-page-break mode
    $auto_page_break = $this->AutoPageBreak;
    // disable auto-page-break
    $this->SetAutoPageBreak(false, 0);
    $this->Rect(0, 0, $this->getPageWidth(), $this->getPageHeight(), 
               'DF', "",  array(220, 220, 200)); // where the array is the color expected
    $this->SetAutoPageBreak($auto_page_break, $bMargin);
    // set the starting point for the page content
    $this->setPageMark();
}
like image 153
Frankich Avatar answered Mar 25 '23 07:03

Frankich