template = $template; $this->department = $department; $this->color = '1488bc'; // Hex color code (Without the #) $this->colorBackground = 'd9d9d9'; // Hex color code (Without the #) $this->washPerformedAt = [ 'hvidovre' => ['column' => 'A', 'row' => 21], 'taastrup' => ['column' => 'B', 'row' => 21], 'glostrup' => ['column' => 'C', 'row' => 21], 'køge' => ['column' => 'D', 'row' => 21], 'roskilde' => ['column' => 'E', 'row' => 21], 'aarhusC' => ['column' => 'F', 'row' => 21], ]; $this->signature = [ 'path' => 'images/truckwash-underskrift.png', 'x' => 0, 'y' => 140, 'is-centered' => true, 'width' => 70, ]; $this->logo = [ 'path' => 'images/truckwash-banner-png.png', 'x' => 0, 'y' => 20, 'is-centered' => true, 'width' => 80, ]; } public function generateCertificate(string $outputPath, string $sealOrPlumNumber, string $regNumber, string $regNumberTrailer, string $carriedOutBy): void { $data = [ 'sealOrPlumNumber' => $sealOrPlumNumber, 'regNumber' => $regNumber, 'regNumberTrailer' => $regNumberTrailer, 'carriedOutBy' => $carriedOutBy, ]; $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx(); $reader->setReadDataOnly(false); $reader->setIncludeCharts(true); $this->spreadsheet = $reader->load($this->template); $activeWorksheet = $this->spreadsheet->getActiveSheet(); $activeWorksheet->setTitle('Wash Certificate'); $this->setCellValues($activeWorksheet, $data); $this->setCellStyles($activeWorksheet); $this->setPageSetup($activeWorksheet); $this->exportToPdf($outputPath); $this->addImagesToPdf($outputPath); $this->spreadsheet->disconnectWorksheets(); unset($this->spreadsheet); } private function setCellValues($activeWorksheet, array $data): void { $activeWorksheet->setCellValue('A9', $data['sealOrPlumNumber']); $activeWorksheet->setCellValue('B17', $data['regNumber']); $activeWorksheet->setCellValue('B18', $data['regNumberTrailer']); $activeWorksheet->setCellValue('F18', $data['carriedOutBy']); $activeWorksheet->setCellValue($this->washPerformedAt[$this->department]['column'] . $this->washPerformedAt[$this->department]['row'], 'X'); } private function setCellStyles($activeWorksheet): void { $activeWorksheet->getStyle($this->washPerformedAt[$this->department]['column'] . ($this->washPerformedAt[$this->department]['row'] + 1))->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setRGB($this->color); $activeWorksheet->getStyle('A9')->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setRGB($this->colorBackground); $activeWorksheet->getStyle('B17')->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setRGB($this->colorBackground); $activeWorksheet->getStyle('B18')->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setRGB($this->colorBackground); $activeWorksheet->getStyle('F18')->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setRGB($this->colorBackground); foreach ( $this->washPerformedAt as $key => $value ) { if ($key !== $this->department) { $activeWorksheet->getStyle($value['column'] . ($value['row'] + 1))->getFill()->setFillType(Fill::FILL_SOLID)->getStartColor()->setRGB($this->colorBackground); } } // Make sure the cells 32A:32F has the font size 11 $activeWorksheet->getStyle('A32:F32')->getFont()->setSize(11); // Make sure the cells 35A:35F has the font size 11 $activeWorksheet->getStyle('A35:F35')->getFont()->setSize(11); } private function setPageSetup($activeWorksheet): void { $activeWorksheet->getPageSetup()->setPaperSize(PageSetup::PAPERSIZE_A4); $activeWorksheet->getPageSetup()->setOrientation(PageSetup::ORIENTATION_PORTRAIT); $activeWorksheet->getPageSetup()->setFitToWidth(1); $activeWorksheet->getPageSetup()->setFitToHeight(0); $activeWorksheet->getPageMargins()->setTop(0.75); $activeWorksheet->getPageMargins()->setRight(0.75); $activeWorksheet->getPageMargins()->setLeft(0.75); $activeWorksheet->getPageMargins()->setBottom(0.75); $activeWorksheet->getPageMargins()->setHeader(0.3); $activeWorksheet->getPageMargins()->setFooter(0.3); } private function exportToPdf(string $outputPath): void { $writer = IOFactory::createWriter($this->spreadsheet, 'Mpdf'); $writer->setIncludeCharts(false); $writer->setPreCalculateFormulas(true); $writer->save($outputPath); } private function addImagesToPdf(string $outputPath): void { $logo = $this->logo; $signature = $this->signature; // Center the logo and signature $logo['x'] = $logo['is-centered'] ? (210 - $logo['width']) / 2 : $logo['x']; $signature['x'] = $signature['is-centered'] ? (210 - $signature['width']) / 2 : $signature['x']; $pdf = new Fpdi(); $pdf->AddPage(); $pdf->setSourceFile($outputPath); $tplIdx = $pdf->importPage(1); $pdf->useTemplate($tplIdx, 0, 0, 210); $pdf->Image($logo['path'], $logo['x'], $logo['y'], $logo['width']); $pdf->Image($signature['path'], $signature['x'], $signature['y'], $signature['width']); $pdf->Output($outputPath, 'F'); } }