diff --git a/src/PhpWord/Writer/HTML/Element/Title.php b/src/PhpWord/Writer/HTML/Element/Title.php index e759bfdcd6..2456a0a601 100644 --- a/src/PhpWord/Writer/HTML/Element/Title.php +++ b/src/PhpWord/Writer/HTML/Element/Title.php @@ -19,7 +19,9 @@ namespace PhpOffice\PhpWord\Writer\HTML\Element; use PhpOffice\PhpWord\Element\Title as PhpWordTitle; +use PhpOffice\PhpWord\Style; use PhpOffice\PhpWord\Writer\HTML; +use PhpOffice\PhpWord\Writer\HTML\Style\Font; use PhpOffice\PhpWord\Writer\HTML\Style\Paragraph; /** @@ -52,13 +54,23 @@ public function write() $text = $writer->write(); } $css = ''; + $write1 = $write2 = $write3 = ''; + $style = Style::getStyle('Heading_' . $this->element->getDepth()); + if ($style !== null) { + $styleWriter = new Font($style); + $write1 = $styleWriter->write(); + } if (is_object($paragraphStyle)) { $styleWriter = new Paragraph($paragraphStyle); - $write = $styleWriter->write(); - if ($write !== '') { - $css = " style=\"$write\""; + $write3 = $styleWriter->write(); + if ($write1 !== '' && $write3 !== '') { + $write2 = ' '; } } + $css = "$write1$write2$write3"; + if ($css !== '') { + $css = " style=\"$css\""; + } $content = "<{$tag}{$css}>{$text}" . PHP_EOL; diff --git a/tests/PhpWordTests/Shared/HtmlHeadingsTest.php b/tests/PhpWordTests/Shared/HtmlHeadingsTest.php index 8ecc95b773..331935fbae 100644 --- a/tests/PhpWordTests/Shared/HtmlHeadingsTest.php +++ b/tests/PhpWordTests/Shared/HtmlHeadingsTest.php @@ -40,7 +40,7 @@ public function testRoundTripHeadings(): void $section = $originalDoc->addSection(); $expectedStrings = []; $section->addTitle('Title 1', 1); - $expectedStrings[] = '

Title 1

'; + $expectedStrings[] = '

Title 1

'; for ($i = 2; $i <= 6; ++$i) { $textRun = new TextRun(); $textRun->addText('Title '); @@ -59,8 +59,18 @@ public function testRoundTripHeadings(): void SharedHtml::addHtml($newSection, $content, true); $newWriter = new HtmlWriter($newDoc); $newContent = $newWriter->getContent(); + // Reader does not yet support h1 declaration in css. + $content = str_replace('h1 {font-size: 20pt;}' . PHP_EOL, '', $content); - // This needs work - self::assertSame($newContent, str_replace('h1 {font-size: 20pt;}' . PHP_EOL, '', $content)); + // Reader transforms Text to TextRun, + // but result is functionally the same. + self::assertSame( + $newContent, + str_replace( + '

Title 1

', + '

Title 1

', + $content + ) + ); } } diff --git a/tests/PhpWordTests/Writer/HTML/PartTest.php b/tests/PhpWordTests/Writer/HTML/PartTest.php index 2ccb96a799..0fe43c2350 100644 --- a/tests/PhpWordTests/Writer/HTML/PartTest.php +++ b/tests/PhpWordTests/Writer/HTML/PartTest.php @@ -186,8 +186,8 @@ public function testTitleStyles(): void self::assertEquals(1, Helper::getLength($xpath, '/html/body/div/h1')); self::assertEquals(2, Helper::getLength($xpath, '/html/body/div/h2')); $html = Helper::getHtmlString($phpWord); - self::assertStringContainsString('

Header 1 #1

', $html); - self::assertStringContainsString('

Header 2 #1

', $html); - self::assertStringContainsString('

Header 2 #2

', $html); + self::assertStringContainsString('

Header 1 #1

', $html); + self::assertStringContainsString('

Header 2 #1

', $html); + self::assertStringContainsString('

Header 2 #2

', $html); } }