init
This commit is contained in:
commit
72a26edcff
22092 changed files with 2101903 additions and 0 deletions
147
lib/PhpSpreadsheet/Reader/Gnumeric/PageSetup.php
Normal file
147
lib/PhpSpreadsheet/Reader/Gnumeric/PageSetup.php
Normal file
|
|
@ -0,0 +1,147 @@
|
|||
<?php
|
||||
|
||||
namespace PhpOffice\PhpSpreadsheet\Reader\Gnumeric;
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Reader\Gnumeric;
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
use PhpOffice\PhpSpreadsheet\Worksheet\PageMargins;
|
||||
use PhpOffice\PhpSpreadsheet\Worksheet\PageSetup as WorksheetPageSetup;
|
||||
use SimpleXMLElement;
|
||||
|
||||
class PageSetup
|
||||
{
|
||||
private Spreadsheet $spreadsheet;
|
||||
|
||||
public function __construct(Spreadsheet $spreadsheet)
|
||||
{
|
||||
$this->spreadsheet = $spreadsheet;
|
||||
}
|
||||
|
||||
public function printInformation(SimpleXMLElement $sheet): self
|
||||
{
|
||||
if (isset($sheet->PrintInformation, $sheet->PrintInformation[0])) {
|
||||
$printInformation = $sheet->PrintInformation[0];
|
||||
$setup = $this->spreadsheet->getActiveSheet()->getPageSetup();
|
||||
|
||||
$attributes = $printInformation->Scale->attributes();
|
||||
if (isset($attributes['percentage'])) {
|
||||
$setup->setScale((int) $attributes['percentage']);
|
||||
}
|
||||
$pageOrder = (string) $printInformation->order;
|
||||
if ($pageOrder === 'r_then_d') {
|
||||
$setup->setPageOrder(WorksheetPageSetup::PAGEORDER_OVER_THEN_DOWN);
|
||||
} elseif ($pageOrder === 'd_then_r') {
|
||||
$setup->setPageOrder(WorksheetPageSetup::PAGEORDER_DOWN_THEN_OVER);
|
||||
}
|
||||
$orientation = (string) $printInformation->orientation;
|
||||
if ($orientation !== '') {
|
||||
$setup->setOrientation($orientation);
|
||||
}
|
||||
$attributes = $printInformation->hcenter->attributes();
|
||||
if (isset($attributes['value'])) {
|
||||
$setup->setHorizontalCentered((bool) (string) $attributes['value']);
|
||||
}
|
||||
$attributes = $printInformation->vcenter->attributes();
|
||||
if (isset($attributes['value'])) {
|
||||
$setup->setVerticalCentered((bool) (string) $attributes['value']);
|
||||
}
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function sheetMargins(SimpleXMLElement $sheet): self
|
||||
{
|
||||
if (isset($sheet->PrintInformation, $sheet->PrintInformation->Margins)) {
|
||||
$marginSet = [
|
||||
// Default Settings
|
||||
'top' => 0.75,
|
||||
'header' => 0.3,
|
||||
'left' => 0.7,
|
||||
'right' => 0.7,
|
||||
'bottom' => 0.75,
|
||||
'footer' => 0.3,
|
||||
];
|
||||
|
||||
$marginSet = $this->buildMarginSet($sheet, $marginSet);
|
||||
$this->adjustMargins($marginSet);
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
private function buildMarginSet(SimpleXMLElement $sheet, array $marginSet): array
|
||||
{
|
||||
foreach ($sheet->PrintInformation->Margins->children(Gnumeric::NAMESPACE_GNM) as $key => $margin) {
|
||||
$marginAttributes = $margin->attributes();
|
||||
$marginSize = ($marginAttributes['Points']) ?? 72; // Default is 72pt
|
||||
// Convert value in points to inches
|
||||
$marginSize = PageMargins::fromPoints((float) $marginSize);
|
||||
$marginSet[$key] = $marginSize;
|
||||
}
|
||||
|
||||
return $marginSet;
|
||||
}
|
||||
|
||||
private function adjustMargins(array $marginSet): void
|
||||
{
|
||||
foreach ($marginSet as $key => $marginSize) {
|
||||
// Gnumeric is quirky in the way it displays the header/footer values:
|
||||
// header is actually the sum of top and header; footer is actually the sum of bottom and footer
|
||||
// then top is actually the header value, and bottom is actually the footer value
|
||||
switch ($key) {
|
||||
case 'left':
|
||||
case 'right':
|
||||
$this->sheetMargin($key, $marginSize);
|
||||
|
||||
break;
|
||||
case 'top':
|
||||
$this->sheetMargin($key, $marginSet['header'] ?? 0);
|
||||
|
||||
break;
|
||||
case 'bottom':
|
||||
$this->sheetMargin($key, $marginSet['footer'] ?? 0);
|
||||
|
||||
break;
|
||||
case 'header':
|
||||
$this->sheetMargin($key, ($marginSet['top'] ?? 0) - $marginSize);
|
||||
|
||||
break;
|
||||
case 'footer':
|
||||
$this->sheetMargin($key, ($marginSet['bottom'] ?? 0) - $marginSize);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private function sheetMargin(string $key, float $marginSize): void
|
||||
{
|
||||
switch ($key) {
|
||||
case 'top':
|
||||
$this->spreadsheet->getActiveSheet()->getPageMargins()->setTop($marginSize);
|
||||
|
||||
break;
|
||||
case 'bottom':
|
||||
$this->spreadsheet->getActiveSheet()->getPageMargins()->setBottom($marginSize);
|
||||
|
||||
break;
|
||||
case 'left':
|
||||
$this->spreadsheet->getActiveSheet()->getPageMargins()->setLeft($marginSize);
|
||||
|
||||
break;
|
||||
case 'right':
|
||||
$this->spreadsheet->getActiveSheet()->getPageMargins()->setRight($marginSize);
|
||||
|
||||
break;
|
||||
case 'header':
|
||||
$this->spreadsheet->getActiveSheet()->getPageMargins()->setHeader($marginSize);
|
||||
|
||||
break;
|
||||
case 'footer':
|
||||
$this->spreadsheet->getActiveSheet()->getPageMargins()->setFooter($marginSize);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue