headerStruct = new HeaderStruct(); $this->footerStruct = new FooterStruct(); } /** * Destructor of the class. */ public function __destruct() { parent::__destruct(); } /** * Gets an object that contains the properties of the header. * @return HeaderStruct */ public function getHeaderStruct(): HeaderStruct { return $this->headerStruct; } /** * Gets an object that contains the properties of the footer. * @return FooterStruct */ public function getFooterStruct(): FooterStruct { return $this->footerStruct; } /** * This method is used to render the page header. * This method has been overwritten. */ public function Header() { $heights = []; $struct = $this->getHeaderStruct(); if (empty($this->originalMargins)) { $this->originalMargins = $this->getMargins(); } $margins = $this->originalMargins; $this->buildHeaderLogo($struct, $margins, $heights); $this->buildHeaderTitle($struct, $margins, $heights); $this->buildHeaderPageNumber($struct, $margins, $heights); //page adjust $newHeight = max($heights); $this->SetTopMargin($newHeight); } /** * Build header logo. * @param HeaderStruct $struct * @param array $margins * @param array $heights * @return void */ private function buildHeaderLogo(HeaderStruct $struct, array $margins, array &$heights): void { $path = $struct->getLogo(); if (!file_exists($path)) { return; } $pathinfo = pathinfo($path); $imageSize = getimagesize($path); $extension = $pathinfo['extension']; $x = $struct->getLogoPositionX() + $margins['left']; $y = $struct->getLogoPositionY() + $margins['top']; $width = $struct->getLogoWidth(); $this->Image($path, $x, $y, $width, 0, $extension, '', '', false, 300, '', false, false, 0, false, false, false); $newImageHeight = ($width * $imageSize[1] / $imageSize[0]); $heights[] = $margins['top'] + $newImageHeight; } /** * Build header title. * @param HeaderStruct $struct * @param array $margins * @param array $heights * @return void */ private function buildHeaderTitle(HeaderStruct $struct, array $margins, array &$heights): void { $string = $struct->getTitle(); $x = $struct->getTitleFontPositionX() + $margins['left']; $y = $struct->getTitleFontPositionY() + $margins['top']; $fontSize = $struct->getTitleFontSize(); $this->SetXY($x, $y); $this->SetFont('helvetica', 'B', $fontSize); $this->MultiCell(0, 0, $string, 0, 'L', false, 1, '', '', true, 0, false, true, 0, 'T', false); $heights[] = $margins['top'] + ($this->getCellHeight($fontSize, false)) / 2; } /** * Build header page number. * @param HeaderStruct $struct * @param array $margins * @param array $heights * @return void */ private function buildHeaderPageNumber(HeaderStruct $struct, array $margins, array &$heights): void { if ($struct->getPageNumber() === true) { $pageString = empty($struct->getPageNumberTitle()) ? 'Page ' : $struct->getPageNumberTitle() . ' '; $pageNumberTotal = $struct->getPageNumberTotal() === true ? ' / ' . $this->getAliasNbPages() : ''; $string = $pageString . $this->getAliasNumPage() . $pageNumberTotal; $x = $struct->getPageNumberPositionX() + $margins['left']; $y = $struct->getPageNumberPositionY() + $margins['top']; $fontSize = 8; $this->SetXY($x, $y); $this->SetFont('helvetica', 'I', $fontSize); $this->Cell(0, 0, $string, 0, 0, '', false, '', 0, false, 'T', 'M'); $heights[] = $margins['top'] + ($this->getCellHeight($fontSize, false)) / 2; } } /** * This method is used to render the page footer. * This method has been overwritten. */ public function Footer() { $struct = $this->getFooterStruct(); if (empty($this->originalMargins)) { $this->originalMargins = $this->getMargins(); } $margins = $this->originalMargins; //page adjust $this->SetY(-1 * ($margins['bottom'])); $currentY = $this->GetY(); $this->buildFooterLogo($margins, $currentY, $struct); $this->buildFooterTitle($margins, $currentY, $struct); $this->buildFooterPageNumber($margins, $currentY, $struct); } /** * Build footer logo. * @param array $margins * @param float $currentY * @param HeaderStruct $struct * @return void */ private function buildFooterLogo(array $margins, float $currentY, FooterStruct $struct): void { $path = $struct->getLogo(); if (!file_exists($path)) { return; } $pathinfo = pathinfo($path); $extension = $pathinfo['extension']; $x = $struct->getLogoPositionX() + $margins['left']; $y = $struct->getLogoPositionY() + $currentY; $width = $struct->getLogoWidth(); $this->Image($path, $x, $y, $width, 0, $extension, '', '', false, 300, '', false, false, 0, false, false, false); } /** * Build footer title. * @param array $margins * @param float $currentY * @param HeaderStruct $struct * @return void */ private function buildFooterTitle(array $margins, float $currentY, FooterStruct $struct): void { $string = $struct->getTitle(); $x = $struct->getTitleFontPositionX() + $margins['left']; $y = $struct->getTitleFontPositionY() + $currentY; $fontSize = $struct->getTitleFontSize(); $this->SetXY($x, $y); $this->SetFont('helvetica', 'B', $fontSize); $this->MultiCell(0, 0, $string, 0, 'L', false, 1, '', '', true, 0, false, true, 0, 'T', false); } /** * Build footer page number. * @param array $margins * @param float $currentY * @param HeaderStruct $struct * @return void */ private function buildFooterPageNumber(array $margins, float $currentY, FooterStruct $struct): void { if ($struct->getPageNumber() === true) { $pageString = empty($struct->getPageNumberTitle()) ? 'Page ' : $struct->getPageNumberTitle() . ' '; $pageNumberTotal = $struct->getPageNumberTotal() === true ? ' / ' . $this->getAliasNbPages() : ''; $string = $pageString . $this->getAliasNumPage() . $pageNumberTotal; $x = $struct->getPageNumberPositionX() + $margins['left']; $y = $struct->getPageNumberPositionY() + $currentY; $fontSize = 8; $this->SetXY($x, $y); $this->SetFont('helvetica', 'I', $fontSize); $this->Cell(0, 0, $string, 0, 0, '', false, '', 0, false, 'T', 'M'); } } }