Fix for #1772. Header and Footer Properties may be omitted in Page Setting Style Set. Code changed to allow for this possibility, and tests added.
This commit is contained in:
parent
ff784b5f2c
commit
a66233b72f
|
|
@ -54,10 +54,10 @@ class PageSettings
|
|||
$marginBottom = $pageLayoutProperties->getAttributeNS($this->stylesFo, 'margin-bottom');
|
||||
$header = $styleSet->getElementsByTagNameNS($this->stylesNs, 'header-style')[0];
|
||||
$headerProperties = $header->getElementsByTagNameNS($this->stylesNs, 'header-footer-properties')[0];
|
||||
$marginHeader = $headerProperties->getAttributeNS($this->stylesFo, 'min-height');
|
||||
$marginHeader = isset($headerProperties) ? $headerProperties->getAttributeNS($this->stylesFo, 'min-height') : null;
|
||||
$footer = $styleSet->getElementsByTagNameNS($this->stylesNs, 'footer-style')[0];
|
||||
$footerProperties = $footer->getElementsByTagNameNS($this->stylesNs, 'header-footer-properties')[0];
|
||||
$marginFooter = $footerProperties->getAttributeNS($this->stylesFo, 'min-height');
|
||||
$marginFooter = isset($footerProperties) ? $footerProperties->getAttributeNS($this->stylesFo, 'min-height') : null;
|
||||
|
||||
$this->pageLayoutStyles[$styleName] = (object) [
|
||||
'orientation' => $styleOrientation ?: PageSetup::ORIENTATION_DEFAULT,
|
||||
|
|
|
|||
|
|
@ -0,0 +1,98 @@
|
|||
<?php
|
||||
|
||||
namespace PhpOffice\PhpSpreadsheetTests\Reader\Ods;
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Reader\Ods;
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
use PhpOffice\PhpSpreadsheet\Worksheet\PageSetup;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class PageSetupBug1772Test extends TestCase
|
||||
{
|
||||
private const MARGIN_PRECISION = 0.00000001;
|
||||
|
||||
/**
|
||||
* @var Spreadsheet
|
||||
*/
|
||||
private $spreadsheet;
|
||||
|
||||
protected function setup(): void
|
||||
{
|
||||
$filename = 'tests/data/Reader/Ods/bug1772.ods';
|
||||
$reader = new Ods();
|
||||
$this->spreadsheet = $reader->load($filename);
|
||||
}
|
||||
|
||||
public function testPageSetup(): void
|
||||
{
|
||||
$assertions = $this->pageSetupAssertions();
|
||||
|
||||
foreach ($this->spreadsheet->getAllSheets() as $worksheet) {
|
||||
if (!array_key_exists($worksheet->getTitle(), $assertions)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$sheetAssertions = $assertions[$worksheet->getTitle()];
|
||||
foreach ($sheetAssertions as $test => $expectedResult) {
|
||||
$testMethodName = 'get' . ucfirst($test);
|
||||
$actualResult = $worksheet->getPageSetup()->$testMethodName();
|
||||
self::assertSame(
|
||||
$expectedResult,
|
||||
$actualResult,
|
||||
"Failed assertion for Worksheet '{$worksheet->getTitle()}' {$test}"
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function testPageMargins(): void
|
||||
{
|
||||
$assertions = $this->pageMarginAssertions();
|
||||
|
||||
foreach ($this->spreadsheet->getAllSheets() as $worksheet) {
|
||||
if (!array_key_exists($worksheet->getTitle(), $assertions)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$sheetAssertions = $assertions[$worksheet->getTitle()];
|
||||
foreach ($sheetAssertions as $test => $expectedResult) {
|
||||
$testMethodName = 'get' . ucfirst($test);
|
||||
$actualResult = $worksheet->getPageMargins()->$testMethodName();
|
||||
self::assertEqualsWithDelta(
|
||||
$expectedResult,
|
||||
$actualResult,
|
||||
self::MARGIN_PRECISION,
|
||||
"Failed assertion for Worksheet '{$worksheet->getTitle()}' {$test} margin"
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private function pageSetupAssertions(): array
|
||||
{
|
||||
return [
|
||||
'Employee update template' => [
|
||||
'orientation' => PageSetup::ORIENTATION_DEFAULT,
|
||||
'scale' => 100,
|
||||
'horizontalCentered' => false,
|
||||
'verticalCentered' => false,
|
||||
'pageOrder' => PageSetup::PAGEORDER_DOWN_THEN_OVER,
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
private function pageMarginAssertions(): array
|
||||
{
|
||||
return [
|
||||
'Employee update template' => [
|
||||
// Here the values are in cm
|
||||
'top' => 0.0,
|
||||
'header' => 0.2953,
|
||||
'left' => 0.0,
|
||||
'right' => 0.0,
|
||||
'bottom' => 0.0,
|
||||
'footer' => 0.2953,
|
||||
],
|
||||
];
|
||||
}
|
||||
}
|
||||
Binary file not shown.
Loading…
Reference in New Issue