From 0a8f3acc613b87ffe813f90cb0f149663a90a977 Mon Sep 17 00:00:00 2001 From: Adrien Gallou Date: Thu, 13 Jul 2017 18:03:28 +0200 Subject: [PATCH] fix images openoffice --- src/PhpWord/Writer/Word2007/Element/Image.php | 144 ++++++++++++------ 1 file changed, 94 insertions(+), 50 deletions(-) diff --git a/src/PhpWord/Writer/Word2007/Element/Image.php b/src/PhpWord/Writer/Word2007/Element/Image.php index edf327395f..f79032585c 100644 --- a/src/PhpWord/Writer/Word2007/Element/Image.php +++ b/src/PhpWord/Writer/Word2007/Element/Image.php @@ -41,11 +41,7 @@ public function write() return; } - if ($element->isWatermark()) { - $this->writeWatermark($xmlWriter, $element); - } else { - $this->writeImage($xmlWriter, $element); - } + $this->writeImage($xmlWriter, $element); } /** @@ -57,60 +53,108 @@ private function writeImage(XMLWriter $xmlWriter, ImageElement $element) { $rId = $element->getRelationId() + ($element->isInSection() ? 6 : 0); $style = $element->getStyle(); + $styleWriter = new ImageStyleWriter($xmlWriter, $style); - if (!$this->withoutP) { - $xmlWriter->startElement('w:p'); - $styleWriter->writeAlignment(); - } - $this->writeCommentRangeStart(); + $cx = \PhpOffice\PhpWord\Shared\Converter::pixelToEmu($style->getWidth()); + $cy = \PhpOffice\PhpWord\Shared\Converter::pixelToEmu($style->getHeight()); + $xmlWriter->startElement('w:p'); + $styleWriter->writeAlignment(); $xmlWriter->startElement('w:r'); - $xmlWriter->startElement('w:pict'); - $xmlWriter->startElement('v:shape'); - $xmlWriter->writeAttribute('type', '#_x0000_t75'); - $styleWriter->write(); + $xmlWriter->startElement('w:drawing'); - $xmlWriter->startElement('v:imagedata'); - $xmlWriter->writeAttribute('r:id', 'rId' . $rId); - $xmlWriter->writeAttribute('o:title', ''); - $xmlWriter->endElement(); // v:imagedata + $xmlWriter->startElement('wp:inline'); + $xmlWriter->writeAttribute('distT', 0); + $xmlWriter->writeAttribute('distB', 0); + $xmlWriter->writeAttribute('distL', 114300); + $xmlWriter->writeAttribute('distR', 114300); - $xmlWriter->endElement(); // v:shape - $xmlWriter->endElement(); // w:pict - $xmlWriter->endElement(); // w:r + $xmlWriter->startElement('wp:extent'); + $xmlWriter->writeAttribute('cx', $cx); + $xmlWriter->writeAttribute('cy', $cy); + $xmlWriter->endElement(); //wp:extent - $this->endElementP(); - } + $xmlWriter->startElement('wp:docPr'); + $xmlWriter->writeAttribute('id', $rId); + $xmlWriter->writeAttribute('name', 'name'); + $xmlWriter->writeAttribute('descr', 'aa'); + $xmlWriter->endElement(); // wp:docPr - /** - * Write watermark element. - * - * @return void - */ - private function writeWatermark(XMLWriter $xmlWriter, ImageElement $element) - { - $rId = $element->getRelationId(); - $style = $element->getStyle(); - $style->setPositioning('absolute'); - $styleWriter = new ImageStyleWriter($xmlWriter, $style); + $xmlWriter->startElement('wp:cNvGraphicFramePr'); + $xmlWriter->startElement('a:graphicFrameLocks'); + $xmlWriter->writeAttribute('xmlns:a', 'http://schemas.openxmlformats.org/drawingml/2006/main'); + $xmlWriter->writeAttribute('noChangeAspect', 1); + $xmlWriter->endElement(); //a:graphicFrameLocks + $xmlWriter->endElement(); // wp:cNvGraphicFramePr - $xmlWriter->startElement('w:p'); - $xmlWriter->startElement('w:r'); - $xmlWriter->startElement('w:pict'); - $xmlWriter->startElement('v:shape'); - $xmlWriter->writeAttribute('type', '#_x0000_t75'); - - $styleWriter->write(); - - $xmlWriter->startElement('v:imagedata'); - $xmlWriter->writeAttribute('r:id', 'rId' . $rId); - $xmlWriter->writeAttribute('o:title', ''); - $xmlWriter->endElement(); // v:imagedata - $xmlWriter->endElement(); // v:shape - $xmlWriter->endElement(); // w:pict - $xmlWriter->endElement(); // w:r - $xmlWriter->endElement(); // w:p + $xmlWriter->startElement('a:graphic'); + $xmlWriter->writeAttribute('xmlns:a', 'http://schemas.openxmlformats.org/drawingml/2006/main'); + $xmlWriter->startElement('a:graphicData'); + $xmlWriter->writeAttribute('uri', 'http://schemas.openxmlformats.org/drawingml/2006/picture'); + $xmlWriter->startElement('pic:pic'); + $xmlWriter->writeAttribute('xmlns:pic', 'http://schemas.openxmlformats.org/drawingml/2006/picture'); + + + $xmlWriter->startElement('pic:nvPicPr'); + $xmlWriter->startElement('pic:cNvPr'); + $xmlWriter->writeAttribute('id', 3); + $xmlWriter->writeAttribute('desc', 'aa'); + $xmlWriter->writeAttribute('name', 'name'); + $xmlWriter->endElement(); //pic:cNvPr + $xmlWriter->startElement('pic:cNvPicPr'); + $xmlWriter->startElement('a:picLocks'); + $xmlWriter->writeAttribute('noChangeAspect', '1'); + $xmlWriter->endElement(); //a:picLocks + $xmlWriter->endElement(); //pic:cNvPicPr + $xmlWriter->endElement(); //pic:nvPicPr + + + $xmlWriter->startElement('pic:blipFill'); + + $xmlWriter->startElement('a:blip'); + $xmlWriter->writeAttribute('r:embed', 'rId' .$rId); + $xmlWriter->endElement(); //a:blip + + $xmlWriter->startElement('a:stretch'); + $xmlWriter->startElement('a:fillRect'); + $xmlWriter->endElement(); //a:fillRect + $xmlWriter->endElement(); //a:stretch + + $xmlWriter->endElement(); //pic:blipFill + + $xmlWriter->startElement('pic:spPr'); + $xmlWriter->startElement('a:xfrm'); + + $xmlWriter->startElement('a:off'); + $xmlWriter->writeAttribute('x', 0); + $xmlWriter->writeAttribute('y', 0); + $xmlWriter->endElement(); //a:off + + $xmlWriter->startElement('a:ext'); + $xmlWriter->writeAttribute('cx', $cx); + $xmlWriter->writeAttribute('cy', $cy); + $xmlWriter->endElement(); //a:ext + + $xmlWriter->endElement(); //a:xfrm + + $xmlWriter->startElement('a:prstGeom'); + $xmlWriter->writeAttribute('prst', 'rect'); + $xmlWriter->startElement('a:avLst'); + $xmlWriter->endElement(); //a:avLst + $xmlWriter->endElement(); //a:prstGeom + + $xmlWriter->endElement(); //pic:spPr + + $xmlWriter->endElement(); //pic:pic + $xmlWriter->endElement(); //a:graphicData + $xmlWriter->endElement(); //a:graphic + $xmlWriter->endElement(); //wp:inline + $xmlWriter->endElement(); //w:drawing + + $xmlWriter->endElement(); //w:r + $xmlWriter->endElement(); //w:p } } +