Skip to content

Commit e97428b

Browse files
authored
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 (dompdf/dompdf#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.
1 parent d0781c3 commit e97428b

File tree

2 files changed

+9
-8
lines changed

2 files changed

+9
-8
lines changed

src/PhpSpreadsheet/Writer/Html.php

+6-5
Original file line numberDiff line numberDiff line change
@@ -940,8 +940,8 @@ public function buildCSS($generateSurroundingHTML = true)
940940

941941
// Calculate cell style hashes
942942
foreach ($this->spreadsheet->getCellXfCollection() as $index => $style) {
943-
$css['td.style' . $index] = $this->createCSSStyle($style);
944-
$css['th.style' . $index] = $this->createCSSStyle($style);
943+
$css['td.style' . $index . ', th.style' . $index] = $this->createCSSStyle($style);
944+
//$css['th.style' . $index] = $this->createCSSStyle($style);
945945
}
946946

947947
// Fetch sheets
@@ -1094,9 +1094,10 @@ private function createCSSStyleFill(Fill $fill)
10941094
$css = [];
10951095

10961096
// Create CSS
1097-
$value = $fill->getFillType() == Fill::FILL_NONE ?
1098-
'white' : '#' . $fill->getStartColor()->getRGB();
1099-
$css['background-color'] = $value;
1097+
if ($fill->getFillType() !== Fill::FILL_NONE) {
1098+
$value = '#' . $fill->getStartColor()->getRGB();
1099+
$css['background-color'] = $value;
1100+
}
11001101

11011102
return $css;
11021103
}

tests/PhpSpreadsheetTests/Writer/Html/VisibilityTest.php

+3-3
Original file line numberDiff line numberDiff line change
@@ -99,11 +99,11 @@ public function testDefaultRowHeight(): void
9999
self::assertEquals(1, $rowsrch);
100100
$rowsrch = preg_match('/^\\s*table[.]sheet0 tr[.]row1 [{] height:25pt [}]\\s*$/m', $html);
101101
self::assertEquals(1, $rowsrch);
102-
$rowsrch = preg_match('/^\\s*td[.]style1 [{].*text-decoration:line-through;.*[}]\\s*$/m', $html);
102+
$rowsrch = preg_match('/^\\s*td[.]style1, th[.]style1 [{].*text-decoration:line-through;.*[}]\\s*$/m', $html);
103103
self::assertEquals(1, $rowsrch);
104-
$rowsrch = preg_match('/^\\s*td[.]style2 [{].*text-decoration:underline line-through;.*[}]\\s*$/m', $html);
104+
$rowsrch = preg_match('/^\\s*td[.]style2, th[.]style2 [{].*text-decoration:underline line-through;.*[}]\\s*$/m', $html);
105105
self::assertEquals(1, $rowsrch);
106-
$rowsrch = preg_match('/^\\s*td[.]style3 [{].*text-decoration:underline;.*[}]\\s*$/m', $html);
106+
$rowsrch = preg_match('/^\\s*td[.]style3, th[.]style3 [{].*text-decoration:underline;.*[}]\\s*$/m', $html);
107107
self::assertEquals(1, $rowsrch);
108108

109109
$this->writeAndReload($spreadsheet, 'Html');

0 commit comments

Comments
 (0)