Beispiel #1
0
 /**
  */
 public function testPixelsEMU()
 {
     $value = rand(1, 100);
     $this->assertEquals(0, Drawing::pixelsToEmu());
     $this->assertEquals(round($value * 9525), Drawing::pixelsToEmu($value));
     $this->assertEquals(0, Drawing::emuToPixels());
     $this->assertEquals(round($value / 9525), Drawing::emuToPixels($value));
 }
 /**
  * Convert EMUs to differents units
  * @param $value
  * @param string $fromUnit
  * @param string $toUnit
  */
 protected function convertUnit($value, $fromUnit, $toUnit)
 {
     // Convert from $fromUnit to EMU
     switch ($fromUnit) {
         case self::UNIT_MILLIMETER:
             $value *= 36000;
             break;
         case self::UNIT_CENTIMETER:
             $value *= 360000;
             break;
         case self::UNIT_INCH:
             $value *= 914400;
             break;
         case self::UNIT_PIXEL:
             $value = Drawing::pixelsToEmu($value);
             break;
         case self::UNIT_POINT:
             $value *= 12700;
             break;
         case self::UNIT_EMU:
         default:
             // no changes
     }
     // Convert from EMU to $toUnit
     switch ($toUnit) {
         case self::UNIT_MILLIMETER:
             $value /= 36000;
             break;
         case self::UNIT_CENTIMETER:
             $value /= 360000;
             break;
         case self::UNIT_INCH:
             $value /= 914400;
             break;
         case self::UNIT_PIXEL:
             $value = Drawing::emuToPixels($value);
             break;
         case self::UNIT_POINT:
             $value /= 12700;
             break;
         case self::UNIT_EMU:
         default:
             // no changes
     }
     return $value;
 }
Beispiel #3
0
 public function testLine()
 {
     $valEmu10 = Drawing::pixelsToEmu(10);
     $valEmu90 = Drawing::pixelsToEmu(90);
     $oPhpPresentation = new PhpPresentation();
     $oSlide = $oPhpPresentation->getActiveSlide();
     $oSlide->createLineShape(10, 10, 100, 100);
     $oSlide->createLineShape(100, 10, 10, 100);
     $oSlide->createLineShape(10, 100, 100, 10);
     $oSlide->createLineShape(100, 100, 10, 10);
     $pres = TestHelperDOCX::getDocument($oPhpPresentation, 'PowerPoint2007');
     $element = '/p:sld/p:cSld/p:spTree/p:cxnSp/p:spPr/a:prstGeom';
     $this->assertTrue($pres->elementExists($element, 'ppt/slides/slide1.xml'));
     $this->assertEquals('line', $pres->getElementAttribute($element, 'prst', 'ppt/slides/slide1.xml'));
     $element = '/p:sld/p:cSld/p:spTree/p:cxnSp/p:spPr/a:xfrm/a:ext[@cx="' . $valEmu90 . '"][@cy="' . $valEmu90 . '"]';
     $this->assertTrue($pres->elementExists($element, 'ppt/slides/slide1.xml'));
     $element = '/p:sld/p:cSld/p:spTree/p:cxnSp/p:spPr/a:xfrm/a:off[@x="' . $valEmu10 . '"][@y="' . $valEmu10 . '"]';
     $this->assertTrue($pres->elementExists($element, 'ppt/slides/slide1.xml'));
     $element = '/p:sld/p:cSld/p:spTree/p:cxnSp/p:spPr/a:xfrm[@flipV="1"]/a:off[@x="' . $valEmu10 . '"][@y="' . $valEmu10 . '"]';
     $this->assertTrue($pres->elementExists($element, 'ppt/slides/slide1.xml'));
 }
 public function testTypeScatterSeriesOutline()
 {
     $expectedWidth = rand(1, 100);
     $expectedWidthEmu = Drawing::pixelsToEmu(Drawing::pointsToPixels($expectedWidth));
     $expectedElement = '/c:chartSpace/c:chart/c:plotArea/c:scatterChart/c:ser/c:spPr/a:ln';
     $oOutline = new Outline();
     // Define the color
     $oOutline->getFill()->setFillType(Fill::FILL_SOLID);
     $oOutline->getFill()->setStartColor(new Color(Color::COLOR_YELLOW));
     // Define the width (in points)
     $oOutline->setWidth($expectedWidth);
     $oSlide = $this->oPresentation->getActiveSlide();
     $oShape = $oSlide->createChartShape();
     $oShape->setResizeProportional(false)->setHeight(550)->setWidth(700)->setOffsetX(120)->setOffsetY(80);
     $oScatter = new Scatter();
     $oSeries = new Series('Downloads', $this->seriesData);
     $oScatter->addSeries($oSeries);
     $oShape->getPlotArea()->setType($oScatter);
     $oXMLDoc = TestHelperDOCX::getDocument($this->oPresentation, 'PowerPoint2007');
     $this->assertTrue($oXMLDoc->fileExists('ppt/charts/' . $oShape->getIndexedFilename()));
     $this->assertFalse($oXMLDoc->elementExists($expectedElement, 'ppt/charts/' . $oShape->getIndexedFilename()));
     $oSeries->setOutline($oOutline);
     $oScatter->setSeries(array($oSeries));
     $oXMLDoc = TestHelperDOCX::getDocument($this->oPresentation, 'PowerPoint2007');
     $this->assertTrue($oXMLDoc->fileExists('ppt/charts/' . $oShape->getIndexedFilename()));
     $this->assertTrue($oXMLDoc->elementExists($expectedElement, 'ppt/charts/' . $oShape->getIndexedFilename()));
     $this->assertEquals($expectedWidthEmu, $oXMLDoc->getElementAttribute($expectedElement, 'w', 'ppt/charts/' . $oShape->getIndexedFilename()));
     $this->assertTrue($oXMLDoc->elementExists($expectedElement . '/a:solidFill', 'ppt/charts/' . $oShape->getIndexedFilename()));
 }
 /**
  * Write Outline
  * @param XMLWriter $objWriter
  * @param Outline $oOutline
  */
 protected function writeOutline(XMLWriter $objWriter, $oOutline)
 {
     if (!$oOutline instanceof Outline) {
         return;
     }
     // Width : pts
     $width = $oOutline->getWidth();
     // Width : pts => px
     $width = CommonDrawing::pointsToPixels($width);
     // Width : px => emu
     $width = CommonDrawing::pixelsToEmu($width);
     // a:ln
     $objWriter->startElement('a:ln');
     $objWriter->writeAttribute('w', $width);
     // Fill
     $this->writeFill($objWriter, $oOutline->getFill());
     // > a:ln
     $objWriter->endElement();
 }
 public function testNote()
 {
     $oPhpPresentation = new PhpPresentation();
     $oLayout = $oPhpPresentation->getLayout();
     $oSlide = $oPhpPresentation->getActiveSlide();
     $oNote = $oSlide->getNote();
     $oRichText = $oNote->createRichTextShape()->setHeight($oLayout->getCY($oLayout::UNIT_PIXEL))->setWidth($oLayout->getCX($oLayout::UNIT_PIXEL))->setOffsetX(170)->setOffsetY(180);
     $oRichText->createTextRun('testNote');
     $pres = TestHelperDOCX::getDocument($oPhpPresentation, 'PowerPoint2007');
     // Content Types
     // $element = '/Types/Override[@PartName="/ppt/notesSlides/notesSlide1.xml"][@ContentType="application/vnd.openxmlformats-officedocument.presentationml.notesSlide+xml"]';
     // $this->assertTrue($pres->elementExists($element, '[Content_Types].xml'));
     // Rels
     // $element = '/Relationships/Relationship[@Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesSlide"][@Target="../notesSlides/notesSlide1.xml"]';
     // $this->assertTrue($pres->elementExists($element, 'ppt/slides/_rels/slide1.xml.rels'));
     // Slide
     $element = '/p:notes';
     $this->assertTrue($pres->elementExists($element, 'ppt/notesSlides/notesSlide1.xml'));
     // Slide Image Placeholder 1
     $element = '/p:notes/p:cSld/p:spTree/p:sp/p:nvSpPr/p:cNvPr[@id="2"][@name="Slide Image Placeholder 1"]';
     $this->assertTrue($pres->elementExists($element, 'ppt/notesSlides/notesSlide1.xml'));
     $element = '/p:notes/p:cSld/p:spTree/p:sp[1]/p:spPr/a:xfrm/a:off';
     $this->assertEquals(0, $pres->getElementAttribute($element, 'x', 'ppt/notesSlides/notesSlide1.xml'));
     $this->assertEquals(0, $pres->getElementAttribute($element, 'y', 'ppt/notesSlides/notesSlide1.xml'));
     $element = '/p:notes/p:cSld/p:spTree/p:sp[1]/p:spPr/a:xfrm/a:ext';
     $this->assertEquals(Drawing::pixelsToEmu(round($oNote->getExtentX() / 2)), $pres->getElementAttribute($element, 'cx', 'ppt/notesSlides/notesSlide1.xml'));
     $this->assertEquals(Drawing::pixelsToEmu(round($oNote->getExtentY() / 2)), $pres->getElementAttribute($element, 'cy', 'ppt/notesSlides/notesSlide1.xml'));
     // Notes Placeholder
     $element = '/p:notes/p:cSld/p:spTree/p:sp/p:nvSpPr/p:cNvPr[@id="3"][@name="Notes Placeholder"]';
     $this->assertTrue($pres->elementExists($element, 'ppt/notesSlides/notesSlide1.xml'));
     // Notes
     $element = '/p:notes/p:cSld/p:spTree/p:sp[2]/p:spPr/a:xfrm/a:off';
     $this->assertEquals(Drawing::pixelsToEmu($oNote->getOffsetX()), $pres->getElementAttribute($element, 'x', 'ppt/notesSlides/notesSlide1.xml'));
     $this->assertEquals(Drawing::pixelsToEmu(round($oNote->getExtentY() / 2) + $oNote->getOffsetY()), $pres->getElementAttribute($element, 'y', 'ppt/notesSlides/notesSlide1.xml'));
     $element = '/p:notes/p:cSld/p:spTree/p:sp[2]/p:spPr/a:xfrm/a:ext';
     $this->assertEquals(5486400, $pres->getElementAttribute($element, 'cx', 'ppt/notesSlides/notesSlide1.xml'));
     $this->assertEquals(3600450, $pres->getElementAttribute($element, 'cy', 'ppt/notesSlides/notesSlide1.xml'));
     $element = '/p:notes/p:cSld/p:spTree/p:sp/p:txBody/a:p/a:r/a:t';
     $this->assertTrue($pres->elementExists($element, 'ppt/notesSlides/notesSlide1.xml'));
 }
Beispiel #7
0
 /**
  * Write Note Slide
  * @param Note $pNote
  * @throws \Exception
  * @return  string
  */
 protected function writeNote(Note $pNote)
 {
     // Create XML writer
     $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY);
     // XML header
     $objWriter->startDocument('1.0', 'UTF-8', 'yes');
     // p:notes
     $objWriter->startElement('p:notes');
     $objWriter->writeAttribute('xmlns:a', 'http://schemas.openxmlformats.org/drawingml/2006/main');
     $objWriter->writeAttribute('xmlns:p', 'http://schemas.openxmlformats.org/presentationml/2006/main');
     $objWriter->writeAttribute('xmlns:r', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships');
     // p:cSld
     $objWriter->startElement('p:cSld');
     // p:spTree
     $objWriter->startElement('p:spTree');
     // p:nvGrpSpPr
     $objWriter->startElement('p:nvGrpSpPr');
     // p:cNvPr
     $objWriter->startElement('p:cNvPr');
     $objWriter->writeAttribute('id', '1');
     $objWriter->writeAttribute('name', '');
     $objWriter->endElement();
     // p:cNvGrpSpPr
     $objWriter->writeElement('p:cNvGrpSpPr', null);
     // p:nvPr
     $objWriter->writeElement('p:nvPr', null);
     // ## p:nvGrpSpPr
     $objWriter->endElement();
     // p:grpSpPr
     $objWriter->startElement('p:grpSpPr');
     // a:xfrm
     $objWriter->startElement('a:xfrm');
     // a:off
     $objWriter->startElement('a:off');
     $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($pNote->getOffsetX()));
     $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($pNote->getOffsetY()));
     $objWriter->endElement();
     // a:off
     // a:ext
     $objWriter->startElement('a:ext');
     $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($pNote->getExtentX()));
     $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($pNote->getExtentY()));
     $objWriter->endElement();
     // a:ext
     // a:chOff
     $objWriter->startElement('a:chOff');
     $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($pNote->getOffsetX()));
     $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($pNote->getOffsetY()));
     $objWriter->endElement();
     // a:chOff
     // a:chExt
     $objWriter->startElement('a:chExt');
     $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($pNote->getExtentX()));
     $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($pNote->getExtentY()));
     $objWriter->endElement();
     // a:chExt
     // ## a:xfrm
     $objWriter->endElement();
     // ## p:grpSpPr
     $objWriter->endElement();
     // p:sp
     $objWriter->startElement('p:sp');
     // p:nvSpPr
     $objWriter->startElement('p:nvSpPr');
     $objWriter->startElement('p:cNvPr');
     $objWriter->writeAttribute('id', '1');
     $objWriter->writeAttribute('name', 'Notes Placeholder');
     $objWriter->endElement();
     // p:cNvSpPr
     $objWriter->startElement('p:cNvSpPr');
     //a:spLocks
     $objWriter->startElement('a:spLocks');
     $objWriter->writeAttribute('noGrp', '1');
     $objWriter->endElement();
     // ## p:cNvSpPr
     $objWriter->endElement();
     // p:nvPr
     $objWriter->startElement('p:nvPr');
     $objWriter->startElement('p:ph');
     $objWriter->writeAttribute('type', 'body');
     $objWriter->writeAttribute('idx', '1');
     $objWriter->endElement();
     // ## p:nvPr
     $objWriter->endElement();
     // ## p:nvSpPr
     $objWriter->endElement();
     $objWriter->writeElement('p:spPr', null);
     // p:txBody
     $objWriter->startElement('p:txBody');
     $objWriter->writeElement('a:bodyPr', null);
     $objWriter->writeElement('a:lstStyle', null);
     // Loop shapes
     $shapes = $pNote->getShapeCollection();
     foreach ($shapes as $shape) {
         // Check type
         if ($shape instanceof RichText) {
             $paragraphs = $shape->getParagraphs();
             $this->writeParagraphs($objWriter, $paragraphs);
         }
     }
     // ## p:txBody
     $objWriter->endElement();
     // ## p:sp
     $objWriter->endElement();
     // ## p:spTree
     $objWriter->endElement();
     // ## p:cSld
     $objWriter->endElement();
     // ## p:notes
     $objWriter->endElement();
     // Return
     return $objWriter->getData();
 }
Beispiel #8
0
 /**
  * Write Legend
  *
  * @param  \PhpOffice\Common\XMLWriter   $objWriter XML Writer
  * @param  \PhpOffice\PhpPresentation\Shape\Chart\Legend $subject
  * @throws \Exception
  */
 protected function writeLegend(XMLWriter $objWriter, Legend $subject)
 {
     // c:legend
     $objWriter->startElement('c:legend');
     // c:legendPos
     $objWriter->startElement('c:legendPos');
     $objWriter->writeAttribute('val', $subject->getPosition());
     $objWriter->endElement();
     // Write layout
     $this->writeLayout($objWriter, $subject);
     // c:overlay
     $objWriter->startElement('c:overlay');
     $objWriter->writeAttribute('val', '0');
     $objWriter->endElement();
     // c:spPr
     $objWriter->startElement('c:spPr');
     // Fill
     $this->writeFill($objWriter, $subject->getFill());
     // Border
     if ($subject->getBorder()->getLineStyle() != Border::LINE_NONE) {
         $this->writeBorder($objWriter, $subject->getBorder(), '');
     }
     $objWriter->endElement();
     // c:txPr
     $objWriter->startElement('c:txPr');
     // a:bodyPr
     $objWriter->writeElement('a:bodyPr', null);
     // a:lstStyle
     $objWriter->writeElement('a:lstStyle', null);
     // a:p
     $objWriter->startElement('a:p');
     // a:pPr
     $objWriter->startElement('a:pPr');
     $objWriter->writeAttribute('algn', $subject->getAlignment()->getHorizontal());
     $objWriter->writeAttribute('fontAlgn', $subject->getAlignment()->getVertical());
     $objWriter->writeAttribute('marL', CommonDrawing::pixelsToEmu($subject->getAlignment()->getMarginLeft()));
     $objWriter->writeAttribute('marR', CommonDrawing::pixelsToEmu($subject->getAlignment()->getMarginRight()));
     $objWriter->writeAttribute('indent', CommonDrawing::pixelsToEmu($subject->getAlignment()->getIndent()));
     $objWriter->writeAttribute('lvl', $subject->getAlignment()->getLevel());
     // a:defRPr
     $objWriter->startElement('a:defRPr');
     $objWriter->writeAttribute('b', $subject->getFont()->isBold() ? 'true' : 'false');
     $objWriter->writeAttribute('i', $subject->getFont()->isItalic() ? 'true' : 'false');
     $objWriter->writeAttribute('strike', $subject->getFont()->isStrikethrough() ? 'sngStrike' : 'noStrike');
     $objWriter->writeAttribute('sz', $subject->getFont()->getSize() * 100);
     $objWriter->writeAttribute('u', $subject->getFont()->getUnderline());
     if ($subject->getFont()->isSuperScript() || $subject->getFont()->isSubScript()) {
         if ($subject->getFont()->isSuperScript()) {
             $objWriter->writeAttribute('baseline', '30000');
         } elseif ($subject->getFont()->isSubScript()) {
             $objWriter->writeAttribute('baseline', '-25000');
         }
     }
     // Font - a:solidFill
     $objWriter->startElement('a:solidFill');
     // a:srgbClr
     $objWriter->startElement('a:srgbClr');
     $objWriter->writeAttribute('val', $subject->getFont()->getColor()->getRGB());
     $objWriter->endElement();
     $objWriter->endElement();
     // Font - a:latin
     $objWriter->startElement('a:latin');
     $objWriter->writeAttribute('typeface', $subject->getFont()->getName());
     $objWriter->endElement();
     $objWriter->endElement();
     $objWriter->endElement();
     // a:endParaRPr
     $objWriter->startElement('a:endParaRPr');
     $objWriter->writeAttribute('lang', 'en-US');
     $objWriter->writeAttribute('dirty', '0');
     $objWriter->endElement();
     $objWriter->endElement();
     $objWriter->endElement();
     $objWriter->endElement();
 }
 /**
  * Write group
  *
  * @param \PhpOffice\Common\XMLWriter $objWriter XML Writer
  * @param \PhpOffice\PhpPresentation\Shape\Group $group
  * @param  int $shapeId
  */
 protected function writeShapeGroup(XMLWriter $objWriter, Group $group, &$shapeId)
 {
     // p:grpSp
     $objWriter->startElement('p:grpSp');
     // p:nvGrpSpPr
     $objWriter->startElement('p:nvGrpSpPr');
     // p:cNvPr
     $objWriter->startElement('p:cNvPr');
     $objWriter->writeAttribute('name', 'Group ' . $shapeId++);
     $objWriter->writeAttribute('id', $shapeId);
     $objWriter->endElement();
     // p:cNvPr
     // NOTE: Re: $shapeId This seems to be how PowerPoint 2010 does business.
     // p:cNvGrpSpPr
     $objWriter->writeElement('p:cNvGrpSpPr', null);
     // p:nvPr
     $objWriter->writeElement('p:nvPr', null);
     $objWriter->endElement();
     // p:nvGrpSpPr
     // p:grpSpPr
     $objWriter->startElement('p:grpSpPr');
     // a:xfrm
     $objWriter->startElement('a:xfrm');
     // a:off
     $objWriter->startElement('a:off');
     $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($group->getOffsetX()));
     $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($group->getOffsetY()));
     $objWriter->endElement();
     // a:off
     // a:ext
     $objWriter->startElement('a:ext');
     $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($group->getExtentX()));
     $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($group->getExtentY()));
     $objWriter->endElement();
     // a:ext
     // a:chOff
     $objWriter->startElement('a:chOff');
     $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($group->getOffsetX()));
     $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($group->getOffsetY()));
     $objWriter->endElement();
     // a:chOff
     // a:chExt
     $objWriter->startElement('a:chExt');
     $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($group->getExtentX()));
     $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($group->getExtentY()));
     $objWriter->endElement();
     // a:chExt
     $objWriter->endElement();
     // a:xfrm
     $objWriter->endElement();
     // p:grpSpPr
     $this->writeShapeCollection($objWriter, $group->getShapeCollection(), $shapeId);
     $objWriter->endElement();
     // p:grpSp
 }
 /**
  * Write slide to XML format
  *
  * @param  \PhpOffice\PhpPresentation\Slide\SlideLayout $pSlideLayout
  * @return string XML Output
  * @throws \Exception
  */
 public function writeSlideLayout(SlideLayout $pSlideLayout)
 {
     // Create XML writer
     $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY);
     // XML header
     $objWriter->startDocument('1.0', 'UTF-8', 'yes');
     // p:sldLayout
     $objWriter->startElement('p:sldLayout');
     $objWriter->writeAttribute('xmlns:a', 'http://schemas.openxmlformats.org/drawingml/2006/main');
     $objWriter->writeAttribute('xmlns:r', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships');
     $objWriter->writeAttribute('xmlns:p', 'http://schemas.openxmlformats.org/presentationml/2006/main');
     $objWriter->writeAttribute('preserve', 1);
     // p:sldLayout\p:cSld
     $objWriter->startElement('p:cSld');
     $objWriter->writeAttributeIf($pSlideLayout->getLayoutName() != '', 'name', $pSlideLayout->getLayoutName());
     // Background
     $this->writeSlideBackground($pSlideLayout, $objWriter);
     // p:sldLayout\p:cSld\p:spTree
     $objWriter->startElement('p:spTree');
     // p:sldLayout\p:cSld\p:spTree\p:nvGrpSpPr
     $objWriter->startElement('p:nvGrpSpPr');
     // p:sldLayout\p:cSld\p:spTree\p:nvGrpSpPr\p:cNvPr
     $objWriter->startElement('p:cNvPr');
     $objWriter->writeAttribute('id', '1');
     $objWriter->writeAttribute('name', '');
     $objWriter->endElement();
     // p:sldLayout\p:cSld\p:spTree\p:nvGrpSpPr\p:cNvGrpSpPr
     $objWriter->writeElement('p:cNvGrpSpPr', null);
     // p:sldLayout\p:cSld\p:spTree\p:nvGrpSpPr\p:nvPr
     $objWriter->writeElement('p:nvPr', null);
     // p:sldLayout\p:cSld\p:spTree\p:nvGrpSpPr
     $objWriter->endElement();
     // p:sldLayout\p:cSld\p:spTree\p:grpSpPr
     $objWriter->startElement('p:grpSpPr');
     // p:sldLayout\p:cSld\p:spTree\p:grpSpPr\a:xfrm
     $objWriter->startElement('a:xfrm');
     // p:sldLayout\p:cSld\p:spTree\p:grpSpPr\a:xfrm\a:off
     $objWriter->startElement('a:off');
     $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($pSlideLayout->getOffsetX()));
     $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($pSlideLayout->getOffsetY()));
     $objWriter->endElement();
     // p:sldLayout\p:cSld\p:spTree\p:grpSpPr\a:xfrm\a:ext
     $objWriter->startElement('a:ext');
     $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($pSlideLayout->getExtentX()));
     $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($pSlideLayout->getExtentY()));
     $objWriter->endElement();
     // p:sldLayout\p:cSld\p:spTree\p:grpSpPr\a:xfrm\a:chOff
     $objWriter->startElement('a:chOff');
     $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($pSlideLayout->getOffsetX()));
     $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($pSlideLayout->getOffsetY()));
     $objWriter->endElement();
     // p:sldLayout\p:cSld\p:spTree\p:grpSpPr\a:xfrm\a:chExt
     $objWriter->startElement('a:chExt');
     $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($pSlideLayout->getExtentX()));
     $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($pSlideLayout->getExtentY()));
     $objWriter->endElement();
     // p:sldLayout\p:cSld\p:spTree\p:grpSpPr\a:xfrm\
     $objWriter->endElement();
     // p:sldLayout\p:cSld\p:spTree\p:grpSpPr\
     $objWriter->endElement();
     // Loop shapes
     $this->writeShapeCollection($objWriter, $pSlideLayout->getShapeCollection());
     // p:sldLayout\p:cSld\p:spTree\
     $objWriter->endElement();
     // p:sldLayout\p:cSld\
     $objWriter->endElement();
     // p:sldLayout\p:clrMapOvr
     $objWriter->startElement('p:clrMapOvr');
     $arrayDiff = array_diff_assoc(ColorMap::$mappingDefault, $pSlideLayout->colorMap->getMapping());
     if (!empty($arrayDiff)) {
         // p:sldLayout\p:clrMapOvr\a:overrideClrMapping
         $objWriter->startElement('a:overrideClrMapping');
         foreach ($pSlideLayout->colorMap->getMapping() as $n => $v) {
             $objWriter->writeAttribute($n, $v);
         }
         $objWriter->endElement();
     } else {
         // p:sldLayout\p:clrMapOvr\a:masterClrMapping
         $objWriter->writeElement('a:masterClrMapping');
     }
     // p:sldLayout\p:clrMapOvr\
     $objWriter->endElement();
     if (!is_null($pSlideLayout->getTransition())) {
         $this->writeTransition($objWriter, $pSlideLayout->getTransition());
     }
     // p:sldLayout\
     $objWriter->endElement();
     return $objWriter->getData();
 }
Beispiel #11
0
 /**
  * Write Note Slide
  * @param Note $pNote
  * @throws \Exception
  * @return  string
  */
 protected function writeNote(Note $pNote)
 {
     // Create XML writer
     $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY);
     // XML header
     $objWriter->startDocument('1.0', 'UTF-8', 'yes');
     // p:notes
     $objWriter->startElement('p:notes');
     $objWriter->writeAttribute('xmlns:a', 'http://schemas.openxmlformats.org/drawingml/2006/main');
     $objWriter->writeAttribute('xmlns:p', 'http://schemas.openxmlformats.org/presentationml/2006/main');
     $objWriter->writeAttribute('xmlns:r', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships');
     // p:notes/p:cSld
     $objWriter->startElement('p:cSld');
     // p:notes/p:cSld/p:spTree
     $objWriter->startElement('p:spTree');
     // p:notes/p:cSld/p:spTree/p:nvGrpSpPr
     $objWriter->startElement('p:nvGrpSpPr');
     // p:notes/p:cSld/p:spTree/p:nvGrpSpPr/p:cNvPr
     $objWriter->startElement('p:cNvPr');
     $objWriter->writeAttribute('id', '1');
     $objWriter->writeAttribute('name', '');
     $objWriter->endElement();
     // p:notes/p:cSld/p:spTree/p:nvGrpSpPr/p:cNvGrpSpPr
     $objWriter->writeElement('p:cNvGrpSpPr', null);
     // p:notes/p:cSld/p:spTree/p:nvGrpSpPr/p:nvPr
     $objWriter->writeElement('p:nvPr', null);
     // p:notes/p:cSld/p:spTree/p:nvGrpSpPr
     $objWriter->endElement();
     // p:notes/p:cSld/p:spTree/p:grpSpPr
     $objWriter->startElement('p:grpSpPr');
     // p:notes/p:cSld/p:spTree/p:grpSpPr/a:xfrm
     $objWriter->startElement('a:xfrm');
     // p:notes/p:cSld/p:spTree/p:grpSpPr/a:xfrm/a:off
     $objWriter->startElement('a:off');
     $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($pNote->getOffsetX()));
     $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($pNote->getOffsetY()));
     $objWriter->endElement();
     // a:off
     // p:notes/p:cSld/p:spTree/p:grpSpPr/a:xfrm/a:ext
     $objWriter->startElement('a:ext');
     $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($pNote->getExtentX()));
     $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($pNote->getExtentY()));
     $objWriter->endElement();
     // a:ext
     // p:notes/p:cSld/p:spTree/p:grpSpPr/a:xfrm/a:chOff
     $objWriter->startElement('a:chOff');
     $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($pNote->getOffsetX()));
     $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($pNote->getOffsetY()));
     $objWriter->endElement();
     // a:chOff
     // p:notes/p:cSld/p:spTree/p:grpSpPr/a:xfrm/a:chExt
     $objWriter->startElement('a:chExt');
     $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($pNote->getExtentX()));
     $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($pNote->getExtentY()));
     $objWriter->endElement();
     // a:chExt
     // p:notes/p:cSld/p:spTree/p:grpSpPr/a:xfrm
     $objWriter->endElement();
     // p:notes/p:cSld/p:spTree/p:grpSpPr
     $objWriter->endElement();
     // p:notes/p:cSld/p:spTree/p:sp[1]
     $objWriter->startElement('p:sp');
     // p:notes/p:cSld/p:spTree/p:sp[1]/p:nvSpPr
     $objWriter->startElement('p:nvSpPr');
     // p:notes/p:cSld/p:spTree/p:sp[1]/p:nvSpPr/p:cNvPr
     $objWriter->startElement('p:cNvPr');
     $objWriter->writeAttribute('id', '2');
     $objWriter->writeAttribute('name', 'Slide Image Placeholder 1');
     $objWriter->endElement();
     // p:notes/p:cSld/p:spTree/p:sp[1]/p:nvSpPr/p:cNvSpPr
     $objWriter->startElement('p:cNvSpPr');
     // p:notes/p:cSld/p:spTree/p:sp[1]/p:nvSpPr/p:cNvSpPr/a:spLocks
     $objWriter->startElement('a:spLocks');
     $objWriter->writeAttribute('noGrp', '1');
     $objWriter->writeAttribute('noRot', '1');
     $objWriter->writeAttribute('noChangeAspect', '1');
     $objWriter->endElement();
     // p:notes/p:cSld/p:spTree/p:sp[1]/p:nvSpPr/p:cNvSpPr
     $objWriter->endElement();
     // p:notes/p:cSld/p:spTree/p:sp[1]/p:nvSpPr/p:nvPr
     $objWriter->startElement('p:nvPr');
     // p:notes/p:cSld/p:spTree/p:sp[1]/p:nvSpPr/p:nvPr/p:ph
     $objWriter->startElement('p:ph');
     $objWriter->writeAttribute('type', 'sldImg');
     $objWriter->endElement();
     // p:notes/p:cSld/p:spTree/p:sp[1]/p:nvSpPr/p:nvPr
     $objWriter->endElement();
     // p:notes/p:cSld/p:spTree/p:sp[1]/p:nvSpPr
     $objWriter->endElement();
     // p:notes/p:cSld/p:spTree/p:sp[1]/p:spPr
     $objWriter->startElement('p:spPr');
     // p:notes/p:cSld/p:spTree/p:sp[1]/p:spPr/a:xfrm
     $objWriter->startElement('a:xfrm');
     // p:notes/p:cSld/p:spTree/p:sp[1]/p:spPr/a:xfrm/a:off
     $objWriter->startElement('a:off');
     $objWriter->writeAttribute('x', 0);
     $objWriter->writeAttribute('y', 0);
     $objWriter->endElement();
     // p:notes/p:cSld/p:spTree/p:sp[1]/p:spPr/a:xfrm/a:ext
     $objWriter->startElement('a:ext');
     $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu(round($pNote->getExtentX() / 2)));
     $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu(round($pNote->getExtentY() / 2)));
     $objWriter->endElement();
     // p:notes/p:cSld/p:spTree/p:sp[1]/p:spPr/a:xfrm
     $objWriter->endElement();
     // p:notes/p:cSld/p:spTree/p:sp[1]/p:spPr/a:prstGeom
     $objWriter->startElement('a:prstGeom');
     $objWriter->writeAttribute('prst', 'rect');
     // p:notes/p:cSld/p:spTree/p:sp[1]/p:spPr/a:prstGeom/a:avLst
     $objWriter->writeElement('a:avLst', null);
     // p:notes/p:cSld/p:spTree/p:sp[1]/p:spPr/a:prstGeom
     $objWriter->endElement();
     // p:notes/p:cSld/p:spTree/p:sp[1]/p:spPr/a:noFill
     $objWriter->writeElement('a:noFill', null);
     // p:notes/p:cSld/p:spTree/p:sp[1]/p:spPr/a:ln
     $objWriter->startElement('a:ln');
     $objWriter->writeAttribute('w', '12700');
     // p:notes/p:cSld/p:spTree/p:sp[1]/p:spPr/a:ln/a:solidFill
     $objWriter->startElement('a:solidFill');
     // p:notes/p:cSld/p:spTree/p:sp[1]/p:spPr/a:ln/a:solidFill/a:prstClr
     $objWriter->startElement('a:prstClr');
     $objWriter->writeAttribute('val', 'black');
     $objWriter->endElement();
     // p:notes/p:cSld/p:spTree/p:sp[1]/p:spPr/a:ln/a:solidFill
     $objWriter->endElement();
     // p:notes/p:cSld/p:spTree/p:sp[1]/p:spPr/a:ln
     $objWriter->endElement();
     // p:notes/p:cSld/p:spTree/p:sp[1]/p:spPr
     $objWriter->endElement();
     // p:notes/p:cSld/p:spTree/p:sp[1]
     $objWriter->endElement();
     // p:notes/p:cSld/p:spTree/p:sp[2]
     $objWriter->startElement('p:sp');
     // p:notes/p:cSld/p:spTree/p:sp[2]/p:nvSpPr
     $objWriter->startElement('p:nvSpPr');
     // p:notes/p:cSld/p:spTree/p:sp[2]/p:nvSpPr/p:cNvPr
     $objWriter->startElement('p:cNvPr');
     $objWriter->writeAttribute('id', '3');
     $objWriter->writeAttribute('name', 'Notes Placeholder');
     $objWriter->endElement();
     // p:notes/p:cSld/p:spTree/p:sp[2]/p:nvSpPr/p:cNvSpPr
     $objWriter->startElement('p:cNvSpPr');
     // p:notes/p:cSld/p:spTree/p:sp[2]/p:nvSpPr/p:cNvSpPr/a:spLocks
     $objWriter->startElement('a:spLocks');
     $objWriter->writeAttribute('noGrp', '1');
     $objWriter->endElement();
     // p:notes/p:cSld/p:spTree/p:sp[2]/p:nvSpPr/p:cNvSpPr
     $objWriter->endElement();
     // p:notes/p:cSld/p:spTree/p:sp[2]/p:nvSpPr/p:nvPr
     $objWriter->startElement('p:nvPr');
     // p:notes/p:cSld/p:spTree/p:sp[2]/p:nvSpPr/p:nvPr/p:ph
     $objWriter->startElement('p:ph');
     $objWriter->writeAttribute('type', 'body');
     $objWriter->writeAttribute('idx', '1');
     $objWriter->endElement();
     // p:notes/p:cSld/p:spTree/p:sp[2]/p:nvSpPr/p:nvPr
     $objWriter->endElement();
     // p:notes/p:cSld/p:spTree/p:sp[2]/p:nvSpPr
     $objWriter->endElement();
     // START notes print below rectangle section
     // p:notes/p:cSld/p:spTree/p:sp[2]/p:spPr
     $objWriter->startElement('p:spPr');
     // p:notes/p:cSld/p:spTree/p:sp[2]/p:spPr/a:xfrm
     $objWriter->startElement('a:xfrm');
     // p:notes/p:cSld/p:spTree/p:sp[2]/p:spPr/a:xfrm/a:off
     $objWriter->startElement('a:off');
     $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($pNote->getOffsetX()));
     $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu(round($pNote->getExtentY() / 2) + $pNote->getOffsetY()));
     $objWriter->endElement();
     // p:notes/p:cSld/p:spTree/p:sp[2]/p:spPr/a:xfrm/a:ext
     $objWriter->startElement('a:ext');
     $objWriter->writeAttribute('cx', '5486400');
     $objWriter->writeAttribute('cy', '3600450');
     $objWriter->endElement();
     // p:notes/p:cSld/p:spTree/p:sp[2]/p:spPr/a:xfrm
     $objWriter->endElement();
     // p:notes/p:cSld/p:spTree/p:sp[2]/p:spPr/a:prstGeom
     $objWriter->startElement('a:prstGeom');
     $objWriter->writeAttribute('prst', 'rect');
     // p:notes/p:cSld/p:spTree/p:sp[2]/p:spPr/a:prstGeom/a:avLst
     $objWriter->writeElement('a:avLst', null);
     // p:notes/p:cSld/p:spTree/p:sp[2]/p:spPr/a:prstGeom
     $objWriter->endElement();
     // p:notes/p:cSld/p:spTree/p:sp[2]/p:spPr
     $objWriter->endElement();
     // p:notes/p:cSld/p:spTree/p:sp[2]/p:txBody
     $objWriter->startElement('p:txBody');
     // p:notes/p:cSld/p:spTree/p:sp[2]/p:txBody/a:bodyPr
     $objWriter->writeElement('a:bodyPr', null);
     // p:notes/p:cSld/p:spTree/p:sp[2]/p:txBody/a:lstStyle
     $objWriter->writeElement('a:lstStyle', null);
     // Loop shapes
     $shapes = $pNote->getShapeCollection();
     foreach ($shapes as $shape) {
         // Check type
         if ($shape instanceof RichText) {
             $paragraphs = $shape->getParagraphs();
             $this->writeParagraphs($objWriter, $paragraphs);
         }
     }
     // p:notes/p:cSld/p:spTree/p:sp[2]/p:txBody
     $objWriter->endElement();
     // p:notes/p:cSld/p:spTree/p:sp[2]
     $objWriter->endElement();
     // p:notes/p:cSld/p:spTree
     $objWriter->endElement();
     // p:notes/p:cSld
     $objWriter->endElement();
     // p:notes
     $objWriter->endElement();
     // Return
     return $objWriter->getData();
 }
 /**
  * Write slide to XML format
  *
  * @param  \PhpOffice\PhpPresentation\Slide\SlideMaster $pSlide
  * @return string XML Output
  * @throws \Exception
  */
 public function writeSlideMaster(SlideMaster $pSlide)
 {
     // Create XML writer
     $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY);
     // XML header
     $objWriter->startDocument('1.0', 'UTF-8', 'yes');
     // p:sldMaster
     $objWriter->startElement('p:sldMaster');
     $objWriter->writeAttribute('xmlns:a', 'http://schemas.openxmlformats.org/drawingml/2006/main');
     $objWriter->writeAttribute('xmlns:r', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships');
     $objWriter->writeAttribute('xmlns:p', 'http://schemas.openxmlformats.org/presentationml/2006/main');
     // p:sldMaster\p:cSld
     $objWriter->startElement('p:cSld');
     // Background
     $this->writeSlideBackground($pSlide, $objWriter);
     // p:sldMaster\p:cSld\p:spTree
     $objWriter->startElement('p:spTree');
     // p:sldMaster\p:cSld\p:spTree\p:nvGrpSpPr
     $objWriter->startElement('p:nvGrpSpPr');
     // p:sldMaster\p:cSld\p:spTree\p:nvGrpSpPr\p:cNvPr
     $objWriter->startElement('p:cNvPr');
     $objWriter->writeAttribute('id', '1');
     $objWriter->writeAttribute('name', '');
     $objWriter->endElement();
     // p:sldMaster\p:cSld\p:spTree\p:nvGrpSpPr\p:cNvGrpSpPr
     $objWriter->writeElement('p:cNvGrpSpPr', null);
     // p:sldMaster\p:cSld\p:spTree\p:nvGrpSpPr\p:nvPr
     $objWriter->writeElement('p:nvPr', null);
     // p:sldMaster\p:cSld\p:spTree\p:nvGrpSpPr
     $objWriter->endElement();
     // p:sldMaster\p:cSld\p:spTree\p:grpSpPr
     $objWriter->startElement('p:grpSpPr');
     // p:sldMaster\p:cSld\p:spTree\p:grpSpPr\a:xfrm
     $objWriter->startElement('a:xfrm');
     // p:sldMaster\p:cSld\p:spTree\p:grpSpPr\a:xfrm\a:off
     $objWriter->startElement('a:off');
     $objWriter->writeAttribute('x', 0);
     $objWriter->writeAttribute('y', 0);
     $objWriter->endElement();
     // p:sldMaster\p:cSld\p:spTree\p:grpSpPr\a:xfrm\a:ext
     $objWriter->startElement('a:ext');
     $objWriter->writeAttribute('cx', 0);
     $objWriter->writeAttribute('cy', 0);
     $objWriter->endElement();
     // p:sldMaster\p:cSld\p:spTree\p:grpSpPr\a:xfrm\a:chOff
     $objWriter->startElement('a:chOff');
     $objWriter->writeAttribute('x', 0);
     $objWriter->writeAttribute('y', 0);
     $objWriter->endElement();
     // p:sldMaster\p:cSld\p:spTree\p:grpSpPr\a:xfrm\a:chExt
     $objWriter->startElement('a:chExt');
     $objWriter->writeAttribute('cx', 0);
     $objWriter->writeAttribute('cy', 0);
     $objWriter->endElement();
     // p:sldMaster\p:cSld\p:spTree\p:grpSpPr\a:xfrm\
     $objWriter->endElement();
     // p:sldMaster\p:cSld\p:spTree\p:grpSpPr\
     $objWriter->endElement();
     // Loop shapes
     $this->writeShapeCollection($objWriter, $pSlide->getShapeCollection());
     // p:sldMaster\p:cSld\p:spTree\
     $objWriter->endElement();
     // p:sldMaster\p:cSld\
     $objWriter->endElement();
     // p:sldMaster\p:clrMap
     $objWriter->startElement('p:clrMap');
     foreach ($pSlide->colorMap->getMapping() as $n => $v) {
         $objWriter->writeAttribute($n, $v);
     }
     $objWriter->endElement();
     // p:sldMaster\p:clrMap\
     // p:sldMaster\p:sldLayoutIdLst
     $objWriter->startElement('p:sldLayoutIdLst');
     foreach ($pSlide->getAllSlideLayouts() as $layout) {
         /* @var $layout Slide\SlideLayout */
         $objWriter->startElement('p:sldLayoutId');
         $objWriter->writeAttribute('id', $layout->layoutId);
         $objWriter->writeAttribute('r:id', $layout->relationId);
         $objWriter->endElement();
     }
     $objWriter->endElement();
     // p:sldMaster\p:sldLayoutIdLst\
     // p:sldMaster\p:txStyles
     $objWriter->startElement('p:txStyles');
     foreach (array('p:titleStyle' => $pSlide->getTextStyles()->getTitleStyle(), 'p:bodyStyle' => $pSlide->getTextStyles()->getBodyStyle(), 'p:otherStyle' => $pSlide->getTextStyles()->getOtherStyle()) as $startElement => $stylesArray) {
         // titleStyle
         $objWriter->startElement($startElement);
         foreach ($stylesArray as $lvl => $oParagraph) {
             /** @var RichText\Paragraph $oParagraph */
             $elementName = $lvl == 0 ? 'a:defPPr' : 'a:lvl' . $lvl . 'pPr';
             $objWriter->startElement($elementName);
             $objWriter->writeAttribute('algn', $oParagraph->getAlignment()->getHorizontal());
             $objWriter->writeAttributeIf($oParagraph->getAlignment()->getMarginLeft() != 0, 'marL', CommonDrawing::pixelsToEmu($oParagraph->getAlignment()->getMarginLeft()));
             $objWriter->writeAttributeIf($oParagraph->getAlignment()->getMarginRight() != 0, 'marR', CommonDrawing::pixelsToEmu($oParagraph->getAlignment()->getMarginRight()));
             $objWriter->writeAttributeIf($oParagraph->getAlignment()->getIndent() != 0, 'indent', CommonDrawing::pixelsToEmu($oParagraph->getAlignment()->getIndent()));
             $objWriter->startElement('a:defRPr');
             $objWriter->writeAttributeIf($oParagraph->getFont()->getSize() != 10, 'sz', $oParagraph->getFont()->getSize() * 100);
             $objWriter->writeAttributeIf($oParagraph->getFont()->isBold(), 'b', 1);
             $objWriter->writeAttributeIf($oParagraph->getFont()->isItalic(), 'i', 1);
             $objWriter->writeAttribute('kern', '1200');
             if ($oParagraph->getFont()->getColor() instanceof SchemeColor) {
                 $objWriter->startElement('a:solidFill');
                 $objWriter->startElement('a:schemeClr');
                 $objWriter->writeAttribute('val', $oParagraph->getFont()->getColor()->getValue());
                 $objWriter->endElement();
                 $objWriter->endElement();
             }
             $objWriter->endElement();
             $objWriter->endElement();
         }
         $objWriter->writeElement('a:extLst');
         $objWriter->endElement();
     }
     $objWriter->endElement();
     // p:sldMaster\p:txStyles\
     if (!is_null($pSlide->getTransition())) {
         $this->writeTransition($objWriter, $pSlide->getTransition());
     }
     // p:sldMaster\
     $objWriter->endElement();
     return $objWriter->getData();
 }