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