diff --git a/samples/Sample_03_Image.php b/samples/Sample_03_Image.php index 964a25095..61f2de05f 100644 --- a/samples/Sample_03_Image.php +++ b/samples/Sample_03_Image.php @@ -4,6 +4,7 @@ use PhpOffice\PhpPresentation\PhpPresentation; use PhpOffice\PhpPresentation\Shape\Drawing; +use PhpOffice\PhpPresentation\Shape\Media; use PhpOffice\PhpPresentation\Shape\MemoryDrawing; // Create new PHPPresentation object @@ -24,23 +25,34 @@ echo date('H:i:s') . ' Add a drawing to the slide'.EOL; $shape = new MemoryDrawing(); $shape->setName('Sample image') - ->setDescription('Sample image') - ->setImageResource($gdImage) - ->setRenderingFunction(MemoryDrawing::RENDERING_JPEG) - ->setMimeType(MemoryDrawing::MIMETYPE_DEFAULT) - ->setHeight(36) - ->setOffsetX(10) - ->setOffsetY(10); + ->setDescription('Sample image') + ->setImageResource($gdImage) + ->setRenderingFunction(MemoryDrawing::RENDERING_JPEG) + ->setMimeType(MemoryDrawing::MIMETYPE_DEFAULT) + ->setHeight(36) + ->setOffsetX(10) + ->setOffsetY(10); $currentSlide->addShape($shape); // Add a file drawing (GIF) to the slide $shape = new Drawing(); $shape->setName('PHPPresentation logo') - ->setDescription('PHPPresentation logo') - ->setPath('./resources/phppowerpoint_logo.gif') - ->setHeight(36) - ->setOffsetX(10) - ->setOffsetY(100); + ->setDescription('PHPPresentation logo') + ->setPath('./resources/phppowerpoint_logo.gif') + ->setHeight(36) + ->setOffsetX(10) + ->setOffsetY(100); +$currentSlide->addShape($shape); + +// Add a video to the slide +$shape = new Media(); +$shape->setName('Video') + ->setDescription('Video') + ->setPath('./resources/ed_hd_512kb.mp4') + ->setResizeProportional(false) + ->setWidth(36) + ->setOffsetX(10) + ->setOffsetY(200); $currentSlide->addShape($shape); // Save file diff --git a/samples/resources/ed_hd.ogv b/samples/resources/ed_hd.ogv new file mode 100644 index 000000000..946e9d88f Binary files /dev/null and b/samples/resources/ed_hd.ogv differ diff --git a/samples/resources/ed_hd_512kb.mp4 b/samples/resources/ed_hd_512kb.mp4 new file mode 100644 index 000000000..42de8e514 Binary files /dev/null and b/samples/resources/ed_hd_512kb.mp4 differ diff --git a/src/PhpPresentation/Shape/Media.php b/src/PhpPresentation/Shape/Media.php new file mode 100644 index 000000000..9ad9d5866 --- /dev/null +++ b/src/PhpPresentation/Shape/Media.php @@ -0,0 +1,27 @@ +getDrawingHashTable()->count(); ++$i) { $shape = $this->getDrawingHashTable()->getByIndex($i); - if ($shape instanceof Drawing) { + if ($shape instanceof Drawing || $shape instanceof Media) { $imagePath = $shape->getPath(); if (strpos($imagePath, 'zip://') !== false) { $imagePath = substr($imagePath, 6); diff --git a/src/PhpPresentation/Writer/PowerPoint2007/PptSlides.php b/src/PhpPresentation/Writer/PowerPoint2007/PptSlides.php index c24903b6e..9964e9588 100644 --- a/src/PhpPresentation/Writer/PowerPoint2007/PptSlides.php +++ b/src/PhpPresentation/Writer/PowerPoint2007/PptSlides.php @@ -10,6 +10,7 @@ use PhpOffice\PhpPresentation\Shape\Drawing as ShapeDrawing; use PhpOffice\PhpPresentation\Shape\Group; use PhpOffice\PhpPresentation\Shape\Line; +use PhpOffice\PhpPresentation\Shape\Media; use PhpOffice\PhpPresentation\Shape\MemoryDrawing as MemoryDrawing; use PhpOffice\PhpPresentation\Shape\RichText; use PhpOffice\PhpPresentation\Shape\RichText\BreakElement; @@ -683,65 +684,92 @@ private function writeShapePic(XMLWriter $objWriter, AbstractDrawing $shape, $sh $objWriter->endElement(); // p:nvPr - $objWriter->writeElement('p:nvPr', null); + if (!$shape instanceof Media) { + $objWriter->writeElement('p:nvPr', null); + } else { + // p:nvPr + $objWriter->startElement('p:nvPr'); + // p:nvPr > a:videoFile + $objWriter->startElement('a:videoFile'); + $objWriter->writeAttribute('r:link', 'rId1'); + $objWriter->endElement(); + // p:nvPr > p:extLst + $objWriter->startElement('p:extLst'); + // p:nvPr > p:extLst > p:ext + $objWriter->startElement('p:ext'); + $objWriter->writeAttribute('uri', '{DAA4B4D4-6D71-4841-9C94-3DE7FCFB9230}'); + // p:nvPr > p:extLst > p:ext > p14:media + $objWriter->startElement('p14:media'); + $objWriter->writeAttribute('xmlns:p14', 'http://schemas.microsoft.com/office/powerpoint/2010/main'); + $objWriter->writeAttribute('r:embed', 'rId2'); + // p:nvPr > p:extLst > p:ext > ##p14:media + $objWriter->endElement(); + // p:nvPr > p:extLst > ##p:ext + $objWriter->endElement(); + // p:nvPr > ##p:extLst + $objWriter->endElement(); + // ##p:nvPr + $objWriter->endElement(); + } $objWriter->endElement(); - // p:blipFill - $objWriter->startElement('p:blipFill'); + if (!$shape instanceof Media) { + // p:blipFill + $objWriter->startElement('p:blipFill'); - // a:blip - $objWriter->startElement('a:blip'); - $objWriter->writeAttribute('r:embed', $shape->relationId); - $objWriter->endElement(); - - // a:stretch - $objWriter->startElement('a:stretch'); - $objWriter->writeElement('a:fillRect', null); - $objWriter->endElement(); + // a:blip + $objWriter->startElement('a:blip'); + $objWriter->writeAttribute('r:embed', $shape->relationId); + $objWriter->endElement(); - $objWriter->endElement(); + // a:stretch + $objWriter->startElement('a:stretch'); + $objWriter->writeElement('a:fillRect', null); + $objWriter->endElement(); - // p:spPr - $objWriter->startElement('p:spPr'); + $objWriter->endElement(); - // a:xfrm - $objWriter->startElement('a:xfrm'); - $objWriter->writeAttribute('rot', CommonDrawing::degreesToAngle($shape->getRotation())); + // p:spPr + $objWriter->startElement('p:spPr'); + // a:xfrm + $objWriter->startElement('a:xfrm'); + $objWriter->writeAttribute('rot', CommonDrawing::degreesToAngle($shape->getRotation())); - // a:off - $objWriter->startElement('a:off'); - $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX())); - $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY())); - $objWriter->endElement(); + // a:off + $objWriter->startElement('a:off'); + $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX())); + $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY())); + $objWriter->endElement(); - // a:ext - $objWriter->startElement('a:ext'); - $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($shape->getWidth())); - $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($shape->getHeight())); - $objWriter->endElement(); + // a:ext + $objWriter->startElement('a:ext'); + $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($shape->getWidth())); + $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($shape->getHeight())); + $objWriter->endElement(); - $objWriter->endElement(); + $objWriter->endElement(); - // a:prstGeom - $objWriter->startElement('a:prstGeom'); - $objWriter->writeAttribute('prst', 'rect'); + // a:prstGeom + $objWriter->startElement('a:prstGeom'); + $objWriter->writeAttribute('prst', 'rect'); - // a:avLst - $objWriter->writeElement('a:avLst', null); + // a:avLst + $objWriter->writeElement('a:avLst', null); - $objWriter->endElement(); + $objWriter->endElement(); - if ($shape->getBorder()->getLineStyle() != Border::LINE_NONE) { - $this->writeBorder($objWriter, $shape->getBorder(), ''); - } + if ($shape->getBorder()->getLineStyle() != Border::LINE_NONE) { + $this->writeBorder($objWriter, $shape->getBorder(), ''); + } - if ($shape->getShadow()->isVisible()) { - $this->writeShadow($objWriter, $shape->getShadow()); - } + if ($shape->getShadow()->isVisible()) { + $this->writeShadow($objWriter, $shape->getShadow()); + } - $objWriter->endElement(); + $objWriter->endElement(); - $objWriter->endElement(); + $objWriter->endElement(); + } } /**