Html Writer - Do Not Generate background-color When Fill is None (#3016)

* Html Writer - Do Not Generate background-color When Fill is None

For PR #3002, I noted that there was a problem with Dompdf truncating images. I raised an issue with them (https://github.com/dompdf/dompdf/issues/2980), and they agree that there is a bug; however, they also suggested a workaround, namely omitting background-color from any cells which the image overlays. That did not at first appear to be a solution which could be generalized for PhpSpreasheet. However, investigating further, I saw that Html Writer is generating background-color for all cells, even though most of them use the default Fill type None (which suggests that background-color should not be specified after all). So this PR changes HTML Writer to generate background-color only when the user has actually set Fill type to something other than None. This is not a complete workaround for the Dompdf problem - we will still see truncation if the image overlays a cell which does specify a Fill type - however, it is almost certainly good enough for most use cases.

In addition to that change, I made the generated Html a little smaller and the code a little more efficient by combining the TD and TH styles for each cell into a single declaration and calling createCssStyle only once.

* Revamp One Test

Look for both td.style and th.style instead of just td.style in test.
This commit is contained in:
oleibman 2022-08-24 18:00:37 -07:00 committed by GitHub
parent d0781c3fd2
commit e97428ba67
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 9 additions and 8 deletions

View File

@ -940,8 +940,8 @@ class Html extends BaseWriter
// Calculate cell style hashes
foreach ($this->spreadsheet->getCellXfCollection() as $index => $style) {
$css['td.style' . $index] = $this->createCSSStyle($style);
$css['th.style' . $index] = $this->createCSSStyle($style);
$css['td.style' . $index . ', th.style' . $index] = $this->createCSSStyle($style);
//$css['th.style' . $index] = $this->createCSSStyle($style);
}
// Fetch sheets
@ -1094,9 +1094,10 @@ class Html extends BaseWriter
$css = [];
// Create CSS
$value = $fill->getFillType() == Fill::FILL_NONE ?
'white' : '#' . $fill->getStartColor()->getRGB();
$css['background-color'] = $value;
if ($fill->getFillType() !== Fill::FILL_NONE) {
$value = '#' . $fill->getStartColor()->getRGB();
$css['background-color'] = $value;
}
return $css;
}

View File

@ -99,11 +99,11 @@ class VisibilityTest extends Functional\AbstractFunctional
self::assertEquals(1, $rowsrch);
$rowsrch = preg_match('/^\\s*table[.]sheet0 tr[.]row1 [{] height:25pt [}]\\s*$/m', $html);
self::assertEquals(1, $rowsrch);
$rowsrch = preg_match('/^\\s*td[.]style1 [{].*text-decoration:line-through;.*[}]\\s*$/m', $html);
$rowsrch = preg_match('/^\\s*td[.]style1, th[.]style1 [{].*text-decoration:line-through;.*[}]\\s*$/m', $html);
self::assertEquals(1, $rowsrch);
$rowsrch = preg_match('/^\\s*td[.]style2 [{].*text-decoration:underline line-through;.*[}]\\s*$/m', $html);
$rowsrch = preg_match('/^\\s*td[.]style2, th[.]style2 [{].*text-decoration:underline line-through;.*[}]\\s*$/m', $html);
self::assertEquals(1, $rowsrch);
$rowsrch = preg_match('/^\\s*td[.]style3 [{].*text-decoration:underline;.*[}]\\s*$/m', $html);
$rowsrch = preg_match('/^\\s*td[.]style3, th[.]style3 [{].*text-decoration:underline;.*[}]\\s*$/m', $html);
self::assertEquals(1, $rowsrch);
$this->writeAndReload($spreadsheet, 'Html');