Differences Between: [Versions 310 and 402] [Versions 311 and 402] [Versions 39 and 402] [Versions 400 and 402] [Versions 401 and 402]
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 $relid = (string) $relAttributes['id']; 84 if (substr($relid, -2) !== 'ps') { 85 $relid .= 'ps'; 86 } 87 $unparsedLoadedData['sheets'][$worksheet->getCodeName()]['pageSetupRelId'] = $relid; 88 } 89 } 90 91 return $unparsedLoadedData; 92 } 93 94 private function headerFooter(SimpleXMLElement $xmlSheet, Worksheet $worksheet): void 95 { 96 if ($xmlSheet->headerFooter) { 97 $docHeaderFooter = $worksheet->getHeaderFooter(); 98 99 if ( 100 isset($xmlSheet->headerFooter['differentOddEven']) && 101 self::boolean((string) $xmlSheet->headerFooter['differentOddEven']) 102 ) { 103 $docHeaderFooter->setDifferentOddEven(true); 104 } else { 105 $docHeaderFooter->setDifferentOddEven(false); 106 } 107 if ( 108 isset($xmlSheet->headerFooter['differentFirst']) && 109 self::boolean((string) $xmlSheet->headerFooter['differentFirst']) 110 ) { 111 $docHeaderFooter->setDifferentFirst(true); 112 } else { 113 $docHeaderFooter->setDifferentFirst(false); 114 } 115 if ( 116 isset($xmlSheet->headerFooter['scaleWithDoc']) && 117 !self::boolean((string) $xmlSheet->headerFooter['scaleWithDoc']) 118 ) { 119 $docHeaderFooter->setScaleWithDocument(false); 120 } else { 121 $docHeaderFooter->setScaleWithDocument(true); 122 } 123 if ( 124 isset($xmlSheet->headerFooter['alignWithMargins']) && 125 !self::boolean((string) $xmlSheet->headerFooter['alignWithMargins']) 126 ) { 127 $docHeaderFooter->setAlignWithMargins(false); 128 } else { 129 $docHeaderFooter->setAlignWithMargins(true); 130 } 131 132 $docHeaderFooter->setOddHeader((string) $xmlSheet->headerFooter->oddHeader); 133 $docHeaderFooter->setOddFooter((string) $xmlSheet->headerFooter->oddFooter); 134 $docHeaderFooter->setEvenHeader((string) $xmlSheet->headerFooter->evenHeader); 135 $docHeaderFooter->setEvenFooter((string) $xmlSheet->headerFooter->evenFooter); 136 $docHeaderFooter->setFirstHeader((string) $xmlSheet->headerFooter->firstHeader); 137 $docHeaderFooter->setFirstFooter((string) $xmlSheet->headerFooter->firstFooter); 138 } 139 } 140 141 private function pageBreaks(SimpleXMLElement $xmlSheet, Worksheet $worksheet): void 142 { 143 if ($xmlSheet->rowBreaks && $xmlSheet->rowBreaks->brk) { 144 $this->rowBreaks($xmlSheet, $worksheet); 145 } 146 if ($xmlSheet->colBreaks && $xmlSheet->colBreaks->brk) { 147 $this->columnBreaks($xmlSheet, $worksheet); 148 } 149 } 150 151 private function rowBreaks(SimpleXMLElement $xmlSheet, Worksheet $worksheet): void 152 { 153 foreach ($xmlSheet->rowBreaks->brk as $brk) { 154 $rowBreakMax = isset($brk['max']) ? ((int) $brk['max']) : -1; 155 if ($brk['man']) { 156 $worksheet->setBreak("A{$brk['id']}", Worksheet::BREAK_ROW, $rowBreakMax); 157 } 158 } 159 } 160 161 private function columnBreaks(SimpleXMLElement $xmlSheet, Worksheet $worksheet): void 162 { 163 foreach ($xmlSheet->colBreaks->brk as $brk) { 164 if ($brk['man']) { 165 $worksheet->setBreak( 166 Coordinate::stringFromColumnIndex(((int) $brk['id']) + 1) . '1', 167 Worksheet::BREAK_COLUMN 168 ); 169 } 170 } 171 } 172 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body