Dompdf.php 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. <?php
  2. namespace PhpOffice\PhpSpreadsheet\Writer\Pdf;
  3. use PhpOffice\PhpSpreadsheet\Worksheet\PageSetup;
  4. use PhpOffice\PhpSpreadsheet\Writer\Pdf;
  5. class Dompdf extends Pdf
  6. {
  7. /**
  8. * Gets the implementation of external PDF library that should be used.
  9. *
  10. * @return \Dompdf\Dompdf implementation
  11. */
  12. protected function createExternalWriterInstance()
  13. {
  14. return new \Dompdf\Dompdf();
  15. }
  16. /**
  17. * Save Spreadsheet to file.
  18. *
  19. * @param string $pFilename Name of the file to save as
  20. *
  21. * @throws \PhpOffice\PhpSpreadsheet\Writer\Exception
  22. */
  23. public function save($pFilename)
  24. {
  25. $fileHandle = parent::prepareForSave($pFilename);
  26. // Default PDF paper size
  27. $paperSize = 'LETTER'; // Letter (8.5 in. by 11 in.)
  28. // Check for paper size and page orientation
  29. if ($this->getSheetIndex() === null) {
  30. $orientation = ($this->spreadsheet->getSheet(0)->getPageSetup()->getOrientation()
  31. == PageSetup::ORIENTATION_LANDSCAPE) ? 'L' : 'P';
  32. $printPaperSize = $this->spreadsheet->getSheet(0)->getPageSetup()->getPaperSize();
  33. } else {
  34. $orientation = ($this->spreadsheet->getSheet($this->getSheetIndex())->getPageSetup()->getOrientation()
  35. == PageSetup::ORIENTATION_LANDSCAPE) ? 'L' : 'P';
  36. $printPaperSize = $this->spreadsheet->getSheet($this->getSheetIndex())->getPageSetup()->getPaperSize();
  37. }
  38. $orientation = ($orientation == 'L') ? 'landscape' : 'portrait';
  39. // Override Page Orientation
  40. if ($this->getOrientation() !== null) {
  41. $orientation = ($this->getOrientation() == PageSetup::ORIENTATION_DEFAULT)
  42. ? PageSetup::ORIENTATION_PORTRAIT
  43. : $this->getOrientation();
  44. }
  45. // Override Paper Size
  46. if ($this->getPaperSize() !== null) {
  47. $printPaperSize = $this->getPaperSize();
  48. }
  49. if (isset(self::$paperSizes[$printPaperSize])) {
  50. $paperSize = self::$paperSizes[$printPaperSize];
  51. }
  52. // Create PDF
  53. $pdf = $this->createExternalWriterInstance();
  54. $pdf->setPaper(strtolower($paperSize), $orientation);
  55. $pdf->loadHtml(
  56. $this->generateHTMLHeader(false) .
  57. $this->generateSheetData() .
  58. $this->generateHTMLFooter()
  59. );
  60. $pdf->render();
  61. // Write to file
  62. fwrite($fileHandle, $pdf->output());
  63. parent::restoreStateAfterSave($fileHandle);
  64. }
  65. }