diff --git a/docs/changes/1.3.0.md b/docs/changes/1.3.0.md index 33b870b7a..cbf2bd7de 100644 --- a/docs/changes/1.3.0.md +++ b/docs/changes/1.3.0.md @@ -6,4 +6,5 @@ - `phpoffice/phpspreadsheet`: Allow version 5.0 by [@seanlynchwv](http://github.com/seanlynchwv) in [#879](https://github.com/PHPOffice/PHPPresentation/pull/879) ## Bug fixes +- Fixed adding custom SVGs by [@seanlynchwv](http://github.com/seanlynchwv) in [#881](https://github.com/PHPOffice/PHPPresentation/pull/881) diff --git a/src/PhpPresentation/Writer/PowerPoint2007/ContentTypes.php b/src/PhpPresentation/Writer/PowerPoint2007/ContentTypes.php index 87e4d5b57..0a89c37cc 100644 --- a/src/PhpPresentation/Writer/PowerPoint2007/ContentTypes.php +++ b/src/PhpPresentation/Writer/PowerPoint2007/ContentTypes.php @@ -49,8 +49,7 @@ public function render(): ZipInterface // XML $this->writeDefaultContentType($objWriter, 'xml', 'application/xml'); - // SVG - $this->writeDefaultContentType($objWriter, 'svg', 'image/svg+xml'); + // SVG will pre-register in $aMediaContentTypes // Presentation $this->writeOverrideContentType($objWriter, '/ppt/presentation.xml', 'application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml'); @@ -106,11 +105,12 @@ public function render(): ZipInterface // Add media content-types $aMediaContentTypes = []; - // GIF, JPEG, PNG + // GIF, JPEG, PNG, SVG $aMediaContentTypes['gif'] = 'image/gif'; $aMediaContentTypes['jpg'] = 'image/jpeg'; $aMediaContentTypes['jpeg'] = 'image/jpeg'; $aMediaContentTypes['png'] = 'image/png'; + $aMediaContentTypes['svg'] = 'image/svg+xml'; foreach ($aMediaContentTypes as $key => $value) { $this->writeDefaultContentType($objWriter, $key, $value); } @@ -133,6 +133,11 @@ public function render(): ZipInterface $extension = strtolower($shapeIndex->getExtension()); $mimeType = $shapeIndex->getMimeType(); + // Normalize any odd returns (some environments report "image/svg") + if ($extension === 'svg') { + $mimeType = 'image/svg+xml'; + } + if (!isset($aMediaContentTypes[$extension])) { $aMediaContentTypes[$extension] = $mimeType; diff --git a/tests/PhpPresentation/Tests/Writer/PowerPoint2007/ContentTypesTest.php b/tests/PhpPresentation/Tests/Writer/PowerPoint2007/ContentTypesTest.php new file mode 100644 index 000000000..0576bf2a0 --- /dev/null +++ b/tests/PhpPresentation/Tests/Writer/PowerPoint2007/ContentTypesTest.php @@ -0,0 +1,48 @@ +save($pptxFile); + + $zip = new \ZipArchive(); + $this->assertTrue( + $zip->open($pptxFile), + 'Could not open generated PPTX as ZipArchive' + ); + + $contentTypesXml = $zip->getFromName('[Content_Types].xml'); + $zip->close(); + @unlink($pptxFile); + + $this->assertIsString( + $contentTypesXml, + '[Content_Types].xml not found in archive' + ); + + $this->assertStringContainsString( + 'Extension="svg"', + $contentTypesXml, + 'SVG extension not registered in [Content_Types].xml' + ); + + $this->assertStringContainsString( + 'image/svg+xml', + $contentTypesXml, + 'SVG MIME type not registered correctly in [Content_Types].xml' + ); + } +}