/** * Set Slide * * @param PHPPowerPoint_Slide $pValue * @param bool $pOverrideOld If a Slide has already been assigned, overwrite it and remove image from old Slide? * @throws Exception * @return PHPPowerPoint_Shape */ public function setSlide(PHPPowerPoint_slide $pValue = null, $pOverrideOld = false) { if (is_null($this->_slide)) { // Add drawing to PHPPowerPoint_Slide $this->_slide = $pValue; $this->_slide->getShapeCollection()->append($this); } else { if ($pOverrideOld) { // Remove drawing from old PHPPowerPoint_Slide $iterator = $this->_slide->getShapeCollection()->getIterator(); while ($iterator->valid()) { if ($iterator->current()->getHashCode() == $this->getHashCode()) { $this->_slide->getShapeCollection()->offsetUnset($iterator->key()); $this->_slide = null; break; } } // Set new PHPPowerPoint_Slide $this->setSlide($pValue); } else { throw new Exception("A PHPPowerPoint_Slide has already been assigned. Shapes can only exist on one PHPPowerPoint_Slide."); } } return $this; }
/** * Write slide relationships to XML format * * Numbering is as follows: * rId1 - Drawings * * @param PHPPowerPoint_Slide $pSlide * @param int $pSlideId * @return string XML Output * @throws Exception */ public function writeSlideRelationships(PHPPowerPoint_Slide $pSlide = null, $pSlideId = 1) { // Create XML writer $objWriter = null; if ($this->getParentWriter()->getUseDiskCaching()) { $objWriter = new PHPPowerPoint_Shared_XMLWriter(PHPPowerPoint_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory()); } else { $objWriter = new PHPPowerPoint_Shared_XMLWriter(PHPPowerPoint_Shared_XMLWriter::STORAGE_MEMORY); } // XML header $objWriter->startDocument('1.0', 'UTF-8', 'yes'); // Relationships $objWriter->startElement('Relationships'); $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/package/2006/relationships'); // Starting relation id $relId = 1; // Write slideLayout relationship $layoutPack = $this->getParentWriter()->getLayoutPack(); $layoutIndex = $layoutPack->findlayoutIndex($pSlide->getSlideLayout()); $this->_writeRelationship($objWriter, $relId++, 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout', '../slideLayouts/slideLayout' . ($layoutIndex + 1) . '.xml'); // Write drawing relationships? if ($pSlide->getShapeCollection()->count() > 0) { // Loop trough images and write relationships $iterator = $pSlide->getShapeCollection()->getIterator(); while ($iterator->valid()) { if ($iterator->current() instanceof PHPPowerPoint_Shape_Drawing || $iterator->current() instanceof PHPPowerPoint_Shape_MemoryDrawing) { // Write relationship for image drawing $this->_writeRelationship($objWriter, $relId, 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image', '../media/' . str_replace(' ', '', $iterator->current()->getIndexedFilename())); } $iterator->next(); ++$relId; } } $objWriter->endElement(); // Return return $objWriter->getData(); }
/** * Write slide relationships to XML format * * @param PHPPowerPoint_Slide $pSlide * @return string XML Output * @throws Exception */ public function writeSlideRelationships(PHPPowerPoint_Slide $pSlide = null) { // Create XML writer $objWriter = null; if ($this->getParentWriter()->getUseDiskCaching()) { $objWriter = new PHPPowerPoint_Shared_XMLWriter(PHPPowerPoint_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory()); } else { $objWriter = new PHPPowerPoint_Shared_XMLWriter(PHPPowerPoint_Shared_XMLWriter::STORAGE_MEMORY); } // XML header $objWriter->startDocument('1.0', 'UTF-8', 'yes'); // Relationships $objWriter->startElement('Relationships'); $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/package/2006/relationships'); // Starting relation id $relId = 1; // Write slideLayout relationship $layoutPack = $this->getParentWriter()->getLayoutPack(); $layoutIndex = $layoutPack->findlayoutIndex($pSlide->getSlideLayout(), $pSlide->getSlideMasterId()); $this->_writeRelationship($objWriter, $relId++, 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout', '../slideLayouts/slideLayout' . ($layoutIndex + 1) . '.xml'); // Write drawing relationships? if ($pSlide->getShapeCollection()->count() > 0) { // Loop trough images and write relationships $iterator = $pSlide->getShapeCollection()->getIterator(); while ($iterator->valid()) { if ($iterator->current() instanceof PHPPowerPoint_Shape_Drawing || $iterator->current() instanceof PHPPowerPoint_Shape_MemoryDrawing) { // Write relationship for image drawing $this->_writeRelationship($objWriter, $relId, 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image', '../media/' . str_replace(' ', '_', $iterator->current()->getIndexedFilename())); $iterator->current()->__relationId = 'rId' . $relId; ++$relId; } elseif ($iterator->current() instanceof PHPPowerPoint_Shape_Chart) { // Write relationship for chart drawing $this->_writeRelationship($objWriter, $relId, 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart', '../charts/' . $iterator->current()->getIndexedFilename()); $iterator->current()->__relationId = 'rId' . $relId; ++$relId; } $iterator->next(); } } // Write hyperlink relationships? if ($pSlide->getShapeCollection()->count() > 0) { // Loop trough hyperlinks and write relationships $iterator = $pSlide->getShapeCollection()->getIterator(); while ($iterator->valid()) { // Hyperlink on shape if ($iterator->current()->hasHyperlink()) { // Write relationship for hyperlink $hyperlink = $iterator->current()->getHyperlink(); $hyperlink->__relationId = 'rId' . $relId; if (!$hyperlink->isInternal()) { $this->_writeRelationship($objWriter, $relId, 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink', $hyperlink->getUrl(), 'External'); } else { $this->_writeRelationship($objWriter, $relId, 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide', 'slide' . $hyperlink->getSlideNumber() . '.xml'); } ++$relId; } // Hyperlink on rich text run if ($iterator->current() instanceof PHPPowerPoint_Shape_RichText) { foreach ($iterator->current()->getParagraphs() as $paragraph) { foreach ($paragraph->getRichTextElements() as $element) { if ($element instanceof PHPPowerPoint_Shape_RichText_Run || $element instanceof PHPPowerPoint_Shape_RichText_TextElement) { if ($element->hasHyperlink()) { // Write relationship for hyperlink $hyperlink = $element->getHyperlink(); $hyperlink->__relationId = 'rId' . $relId; if (!$hyperlink->isInternal()) { $this->_writeRelationship($objWriter, $relId, 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink', $hyperlink->getUrl(), 'External'); } else { $this->_writeRelationship($objWriter, $relId, 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide', 'slide' . $hyperlink->getSlideNumber() . '.xml'); } ++$relId; } } } } } $iterator->next(); } } $objWriter->endElement(); // Return return $objWriter->getData(); }