Skip to content

Commit

Permalink
PHPOffice#123 : Implementation of Media (start)
Browse files Browse the repository at this point in the history
  • Loading branch information
Progi1984 committed Mar 4, 2016
1 parent 9ac06b0 commit b40b887
Show file tree
Hide file tree
Showing 6 changed files with 123 additions and 56 deletions.
36 changes: 24 additions & 12 deletions samples/Sample_03_Image.php
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down
Binary file added samples/resources/ed_hd.ogv
Binary file not shown.
Binary file added samples/resources/ed_hd_512kb.mp4
Binary file not shown.
27 changes: 27 additions & 0 deletions src/PhpPresentation/Shape/Media.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?php
/**
* This file is part of PHPPresentation - A pure PHP library for reading and writing
* presentations documents.
*
* PHPPresentation is free software distributed under the terms of the GNU Lesser
* General Public License version 3 as published by the Free Software Foundation.
*
* For the full copyright and license information, please read the LICENSE
* file that was distributed with this source code. For the full list of
* contributors, visit https://github.com/PHPOffice/PHPPresentation/contributors.
*
* @link https://github.com/PHPOffice/PHPPresentation
* @copyright 2009-2015 PHPPresentation contributors
* @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3
*/

namespace PhpOffice\PhpPresentation\Shape;

use PhpOffice\PhpPresentation\ComparableInterface;

/**
* Media element
*/
class Media extends Drawing implements ComparableInterface
{
}
2 changes: 1 addition & 1 deletion src/PhpPresentation/Writer/PowerPoint2007/PptMedia.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ public function render()
{
for ($i = 0; $i < $this->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);
Expand Down
114 changes: 71 additions & 43 deletions src/PhpPresentation/Writer/PowerPoint2007/PptSlides.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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();
}
}

/**
Expand Down

0 comments on commit b40b887

Please sign in to comment.