You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I briefly looked at this today together with a collegae.
We found out that:
SVG data should be written to Word in a different way than a PNG or a JPEG:
PNG and JPEG are written in \PhpOffice\PhpWord\Writer\Word2007\Element\Image and are using (among more) a XML tag called 'w:pict'.
SVG needs to start with a XML tag called 'w:drawing'. This makes them closer related to \PhpOffice\PhpWord\Writer\Word2007\Element\Chart than to \PhpOffice\PhpWord\Writer\Word2007\Element\Image.
SVG data shouldn't be written to the Word XML as is. Instead, in the Word XML a reference (r:id) needs to be used.
\PhpOffice\PhpWord\Element\Image::checkImage() uses PHP image functions that don't work for SVG images, like getimagesizefromstring(). image_type_to_mime_type(), used to determine the mime type of the image, has no listing for SVG, see https://www.php.net/image_type_to_mime_type.
By calling the getData() method on a \PhpOffice\PhpWord\Shared\XMLWriter object you can get an idea about what Word XML gets produced. I temporarily added var_dump($xmlWriter->getData());die(); to \PhpOffice\PhpWord\Writer\Word2007\Element\Image::writeImage() to see what was getting outputted.
That's how far as we got today.
Todo:
I think that in phpword/src/PhpWord/Writer/Word2007/Element we would need to add a new class called SvgImage. The code from \PhpOffice\PhpWord\Writer\Word2007\Element\Chart could probably be used as a starting point for this class.
Likewise, I think that we need to have a SvgImage class in phpword/src/PhpWord/Element so a svg image can be added by calling $phpWord->addSvgImage().
Thanks to all of you. I also provide a doc sample with EPS image embedded. It should not be so different from SVG file and also interesting to implement.
Activity
simogeo commentedon May 4, 2024
any news regarding this feature request ? Thanks in advance
MegaChriz commentedon Jun 14, 2024
I briefly looked at this today together with a collegae.
We found out that:
\PhpOffice\PhpWord\Writer\Word2007\Element\Chart
than to\PhpOffice\PhpWord\Writer\Word2007\Element\Image
.\PhpOffice\PhpWord\Element\Image::checkImage()
uses PHP image functions that don't work for SVG images, likegetimagesizefromstring()
.image_type_to_mime_type()
, used to determine the mime type of the image, has no listing for SVG, see https://www.php.net/image_type_to_mime_type.getData()
method on a \PhpOffice\PhpWord\Shared\XMLWriter object you can get an idea about what Word XML gets produced. I temporarily addedvar_dump($xmlWriter->getData());die();
to\PhpOffice\PhpWord\Writer\Word2007\Element\Image::writeImage()
to see what was getting outputted.That's how far as we got today.
Todo:
\PhpOffice\PhpWord\Writer\Word2007\Element\Chart
could probably be used as a starting point for this class.$phpWord->addSvgImage()
.Progi1984 commentedon Aug 10, 2024
Hi @simogeo @MegaChriz @echaconairlan , could you give me a sample file with a svg image, please ?
MegaChriz commentedon Aug 10, 2024
I found a few SVG images:




MegaChriz commentedon Aug 10, 2024
Hm, apparently GitHub transforms them. Try again:
svgs.zip
Progi1984 commentedon Aug 10, 2024
Not a Svg file but a docx with a svg image embed.
MegaChriz commentedon Aug 10, 2024
I haven't one ready right now, because I don't have access to Word currently. Maybe in a few days.
Progi1984 commentedon Aug 10, 2024
Thanks 😊
MegaChriz commentedon Aug 12, 2024
docxs-with-svg.zip
Here are a few docx-files with a SVG in them. There is one with a highchart graph in it, and two with a simpler looking SVG file.
simogeo commentedon Aug 12, 2024
Thanks to all of you. I also provide a doc sample with EPS image embedded. It should not be so different from SVG file and also interesting to implement.
embedded-EPS-file.docx
thanks @Progi1984 and @MegaChriz