Differences Between: [Versions 310 and 311] [Versions 310 and 400] [Versions 310 and 401] [Versions 310 and 402] [Versions 310 and 403]
1 <?php 2 3 namespace PhpOffice\PhpSpreadsheet\Reader\Xlsx; 4 5 use PhpOffice\PhpSpreadsheet\Cell\Coordinate; 6 use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet; 7 8 class PageSetup extends BaseParserClass 9 { 10 private $worksheet; 11 12 private $worksheetXml; 13 14 public function __construct(Worksheet $workSheet, \SimpleXMLElement $worksheetXml = null) 15 { 16 $this->worksheet = $workSheet; 17 $this->worksheetXml = $worksheetXml; 18 } 19 20 public function load(array $unparsedLoadedData) 21 { 22 if (!$this->worksheetXml) { 23 return $unparsedLoadedData; 24 } 25 26 $this->margins($this->worksheetXml, $this->worksheet); 27 $unparsedLoadedData = $this->pageSetup($this->worksheetXml, $this->worksheet, $unparsedLoadedData); 28 $this->headerFooter($this->worksheetXml, $this->worksheet); 29 $this->pageBreaks($this->worksheetXml, $this->worksheet); 30 31 return $unparsedLoadedData; 32 } 33 34 private function margins(\SimpleXMLElement $xmlSheet, Worksheet $worksheet) 35 { 36 if ($xmlSheet->pageMargins) { 37 $docPageMargins = $worksheet->getPageMargins(); 38 $docPageMargins->setLeft((float) ($xmlSheet->pageMargins['left'])); 39 $docPageMargins->setRight((float) ($xmlSheet->pageMargins['right'])); 40 $docPageMargins->setTop((float) ($xmlSheet->pageMargins['top'])); 41 $docPageMargins->setBottom((float) ($xmlSheet->pageMargins['bottom'])); 42 $docPageMargins->setHeader((float) ($xmlSheet->pageMargins['header'])); 43 $docPageMargins->setFooter((float) ($xmlSheet->pageMargins['footer'])); 44 } 45 } 46 47 private function pageSetup(\SimpleXMLElement $xmlSheet, Worksheet $worksheet, array $unparsedLoadedData) 48 { 49 if ($xmlSheet->pageSetup) { 50 $docPageSetup = $worksheet->getPageSetup(); 51 52 if (isset($xmlSheet->pageSetup['orientation'])) { 53 $docPageSetup->setOrientation((string) $xmlSheet->pageSetup['orientation']); 54 } 55 if (isset($xmlSheet->pageSetup['paperSize'])) { 56 $docPageSetup->setPaperSize((int) ($xmlSheet->pageSetup['paperSize'])); 57 } 58 if (isset($xmlSheet->pageSetup['scale'])) { 59 $docPageSetup->setScale((int) ($xmlSheet->pageSetup['scale']), false); 60 } 61 if (isset($xmlSheet->pageSetup['fitToHeight']) && (int) ($xmlSheet->pageSetup['fitToHeight']) >= 0) { 62 $docPageSetup->setFitToHeight((int) ($xmlSheet->pageSetup['fitToHeight']), false); 63 } 64 if (isset($xmlSheet->pageSetup['fitToWidth']) && (int) ($xmlSheet->pageSetup['fitToWidth']) >= 0) { 65 $docPageSetup->setFitToWidth((int) ($xmlSheet->pageSetup['fitToWidth']), false); 66 } 67 if (isset($xmlSheet->pageSetup['firstPageNumber'], $xmlSheet->pageSetup['useFirstPageNumber']) && 68 self::boolean((string) $xmlSheet->pageSetup['useFirstPageNumber'])) { 69 $docPageSetup->setFirstPageNumber((int) ($xmlSheet->pageSetup['firstPageNumber'])); 70 } 71 72 $relAttributes = $xmlSheet->pageSetup->attributes('http://schemas.openxmlformats.org/officeDocument/2006/relationships'); 73 if (isset($relAttributes['id'])) { 74 $unparsedLoadedData['sheets'][$worksheet->getCodeName()]['pageSetupRelId'] = (string) $relAttributes['id']; 75 } 76 } 77 78 return $unparsedLoadedData; 79 } 80 81 private function headerFooter(\SimpleXMLElement $xmlSheet, Worksheet $worksheet) 82 { 83 if ($xmlSheet->headerFooter) { 84 $docHeaderFooter = $worksheet->getHeaderFooter(); 85 86 if (isset($xmlSheet->headerFooter['differentOddEven']) && 87 self::boolean((string) $xmlSheet->headerFooter['differentOddEven'])) { 88 $docHeaderFooter->setDifferentOddEven(true); 89 } else { 90 $docHeaderFooter->setDifferentOddEven(false); 91 } 92 if (isset($xmlSheet->headerFooter['differentFirst']) && 93 self::boolean((string) $xmlSheet->headerFooter['differentFirst'])) { 94 $docHeaderFooter->setDifferentFirst(true); 95 } else { 96 $docHeaderFooter->setDifferentFirst(false); 97 } 98 if (isset($xmlSheet->headerFooter['scaleWithDoc']) && 99 !self::boolean((string) $xmlSheet->headerFooter['scaleWithDoc'])) { 100 $docHeaderFooter->setScaleWithDocument(false); 101 } else { 102 $docHeaderFooter->setScaleWithDocument(true); 103 } 104 if (isset($xmlSheet->headerFooter['alignWithMargins']) && 105 !self::boolean((string) $xmlSheet->headerFooter['alignWithMargins'])) { 106 $docHeaderFooter->setAlignWithMargins(false); 107 } else { 108 $docHeaderFooter->setAlignWithMargins(true); 109 } 110 111 $docHeaderFooter->setOddHeader((string) $xmlSheet->headerFooter->oddHeader); 112 $docHeaderFooter->setOddFooter((string) $xmlSheet->headerFooter->oddFooter); 113 $docHeaderFooter->setEvenHeader((string) $xmlSheet->headerFooter->evenHeader); 114 $docHeaderFooter->setEvenFooter((string) $xmlSheet->headerFooter->evenFooter); 115 $docHeaderFooter->setFirstHeader((string) $xmlSheet->headerFooter->firstHeader); 116 $docHeaderFooter->setFirstFooter((string) $xmlSheet->headerFooter->firstFooter); 117 } 118 } 119 120 private function pageBreaks(\SimpleXMLElement $xmlSheet, Worksheet $worksheet) 121 { 122 if ($xmlSheet->rowBreaks && $xmlSheet->rowBreaks->brk) { 123 $this->rowBreaks($xmlSheet, $worksheet); 124 } 125 if ($xmlSheet->colBreaks && $xmlSheet->colBreaks->brk) { 126 $this->columnBreaks($xmlSheet, $worksheet); 127 } 128 } 129 130 private function rowBreaks(\SimpleXMLElement $xmlSheet, Worksheet $worksheet) 131 { 132 foreach ($xmlSheet->rowBreaks->brk as $brk) { 133 if ($brk['man']) { 134 $worksheet->setBreak("A{$brk['id']}", Worksheet::BREAK_ROW); 135 } 136 } 137 } 138 139 private function columnBreaks(\SimpleXMLElement $xmlSheet, Worksheet $worksheet) 140 { 141 foreach ($xmlSheet->colBreaks->brk as $brk) { 142 if ($brk['man']) { 143 $worksheet->setBreak( 144 Coordinate::stringFromColumnIndex(((int) $brk['id']) + 1) . '1', 145 Worksheet::BREAK_COLUMN 146 ); 147 } 148 } 149 } 150 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body