How to set the background color for every page tcpdf

雨燕双飞 提交于 2020-01-23 08:14:23

问题


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.


回答1:


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();
}


来源:https://stackoverflow.com/questions/46279119/how-to-set-the-background-color-for-every-page-tcpdf

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!