Viewing file: Mpdf.php (3.78 KB) -rwxrwxrwx Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace PhpOffice\PhpSpreadsheet\Writer\Pdf;
use PhpOffice\PhpSpreadsheet\Worksheet\PageSetup; use PhpOffice\PhpSpreadsheet\Writer\Pdf;
class Mpdf extends Pdf { /** * Gets the implementation of external PDF library that should be used. * * @param array $config Configuration array * * @return \Mpdf\Mpdf implementation */ protected function createExternalWriterInstance($config) { return new \Mpdf\Mpdf($config); }
/** * Save Spreadsheet to file. * * @param string $pFilename Name of the file to save as */ public function save($pFilename): void { $fileHandle = parent::prepareForSave($pFilename);
// Default PDF paper size $paperSize = 'LETTER'; // Letter (8.5 in. by 11 in.)
// Check for paper size and page orientation if (null === $this->getSheetIndex()) { $orientation = ($this->spreadsheet->getSheet(0)->getPageSetup()->getOrientation() == PageSetup::ORIENTATION_LANDSCAPE) ? 'L' : 'P'; $printPaperSize = $this->spreadsheet->getSheet(0)->getPageSetup()->getPaperSize(); } else { $orientation = ($this->spreadsheet->getSheet($this->getSheetIndex())->getPageSetup()->getOrientation() == PageSetup::ORIENTATION_LANDSCAPE) ? 'L' : 'P'; $printPaperSize = $this->spreadsheet->getSheet($this->getSheetIndex())->getPageSetup()->getPaperSize(); } $this->setOrientation($orientation);
// Override Page Orientation if (null !== $this->getOrientation()) { $orientation = ($this->getOrientation() == PageSetup::ORIENTATION_DEFAULT) ? PageSetup::ORIENTATION_PORTRAIT : $this->getOrientation(); } $orientation = strtoupper($orientation);
// Override Paper Size if (null !== $this->getPaperSize()) { $printPaperSize = $this->getPaperSize(); }
if (isset(self::$paperSizes[$printPaperSize])) { $paperSize = self::$paperSizes[$printPaperSize]; }
// Create PDF $config = ['tempDir' => $this->tempDir . '/mpdf']; $pdf = $this->createExternalWriterInstance($config); $ortmp = $orientation; $pdf->_setPageSize(strtoupper($paperSize), $ortmp); $pdf->DefOrientation = $orientation; $pdf->AddPageByArray([ 'orientation' => $orientation, 'margin-left' => $this->inchesToMm($this->spreadsheet->getActiveSheet()->getPageMargins()->getLeft()), 'margin-right' => $this->inchesToMm($this->spreadsheet->getActiveSheet()->getPageMargins()->getRight()), 'margin-top' => $this->inchesToMm($this->spreadsheet->getActiveSheet()->getPageMargins()->getTop()), 'margin-bottom' => $this->inchesToMm($this->spreadsheet->getActiveSheet()->getPageMargins()->getBottom()), ]);
// Document info $pdf->SetTitle($this->spreadsheet->getProperties()->getTitle()); $pdf->SetAuthor($this->spreadsheet->getProperties()->getCreator()); $pdf->SetSubject($this->spreadsheet->getProperties()->getSubject()); $pdf->SetKeywords($this->spreadsheet->getProperties()->getKeywords()); $pdf->SetCreator($this->spreadsheet->getProperties()->getCreator());
$html = $this->generateHTMLAll(); foreach (\array_chunk(\explode(PHP_EOL, $html), 1000) as $lines) { $pdf->WriteHTML(\implode(PHP_EOL, $lines)); }
// Write to file fwrite($fileHandle, $pdf->Output('', 'S'));
parent::restoreStateAfterSave(); }
/** * Convert inches to mm. * * @param float $inches * * @return float */ private function inchesToMm($inches) { return $inches * 25.4; } }
|