/** * Write presentation relationships to XML format * * @return string XML Output * @throws \Exception */ public function writePresentationRelationships() { // Create XML writer $objWriter = new XMLWriter(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'); // Relation id $relationId = 1; $oLayoutPack = new PackDefault(); $masterSlides = $oLayoutPack->getMasterSlides(); foreach ($masterSlides as $masterSlide) { // Relationship slideMasters/slideMasterX.xml $this->writeRelationship($objWriter, $relationId++, 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster', 'slideMasters/slideMaster' . $masterSlide['masterid'] . '.xml'); } // Add slide theme (only one!) // Relationship theme/theme1.xml $this->writeRelationship($objWriter, $relationId++, 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme', 'theme/theme1.xml'); // Relationships with slides $slideCount = $this->getPresentation()->getSlideCount(); for ($i = 0; $i < $slideCount; ++$i) { $this->writeRelationship($objWriter, $relationId++, 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide', 'slides/slide' . ($i + 1) . '.xml'); } $this->writeRelationship($objWriter, $relationId++, 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/presProps', 'presProps.xml'); $this->writeRelationship($objWriter, $relationId++, 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/viewProps', 'viewProps.xml'); $this->writeRelationship($objWriter, $relationId, 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/tableStyles', 'tableStyles.xml'); $objWriter->endElement(); // Return return $objWriter->getData(); }
/** * @return \PhpOffice\Common\Adapter\Zip\ZipInterface */ public function render() { // Create XML writer $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY); // XML header $objWriter->startDocument('1.0', 'UTF-8', 'yes'); // Properties $objWriter->startElement('Properties'); $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/officeDocument/2006/custom-properties'); $objWriter->writeAttribute('xmlns:vt', 'http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes'); if ($this->getPresentation()->getPresentationProperties()->isMarkedAsFinal()) { // property $objWriter->startElement('property'); $objWriter->writeAttribute('fmtid', '{D5CDD505-2E9C-101B-9397-08002B2CF9AE}'); $objWriter->writeAttribute('pid', 2); $objWriter->writeAttribute('name', '_MarkAsFinal'); // property > vt:bool $objWriter->writeElement('vt:bool', 'true'); // > property $objWriter->endElement(); } // > Properties $objWriter->endElement(); $this->oZip->addFromString('docProps/custom.xml', $objWriter->getData()); // Return return $this->oZip; }
/** * @return \PhpOffice\Common\Adapter\Zip\ZipInterface */ public function render() { // Create XML writer $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY); // XML header $objWriter->startDocument('1.0', 'UTF-8', 'yes'); // a:tblStyleLst $objWriter->startElement('a:tblStyleLst'); $objWriter->writeAttribute('xmlns:a', 'http://schemas.openxmlformats.org/drawingml/2006/main'); $objWriter->writeAttribute('def', '{5C22544A-7EE6-4342-B048-85BDC9FD1C3A}'); $objWriter->endElement(); $this->getZip()->addFromString('ppt/tableStyles.xml', $objWriter->getData()); return $this->getZip(); }
/** * Write relationships. * * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param array $xmlRels * @param array $mediaRels * @param int $relId * @return void */ protected function writeRels(XMLWriter $xmlWriter, $xmlRels = array(), $mediaRels = array(), $relId = 1) { $xmlWriter->startDocument('1.0', 'UTF-8', 'yes'); $xmlWriter->startElement('Relationships'); $xmlWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/package/2006/relationships'); // XML files relationships foreach ($xmlRels as $target => $type) { $this->writeRel($xmlWriter, $relId++, $type, $target); } // Media relationships foreach ($mediaRels as $mediaRel) { $this->writeMediaRel($xmlWriter, $relId++, $mediaRel); } $xmlWriter->endElement(); // Relationships }
/** * @return \PhpOffice\Common\Adapter\Zip\ZipInterface */ public function render() { $presentationPpts = $this->oPresentation->getPresentationProperties(); // Create XML writer $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY); // XML header $objWriter->startDocument('1.0', 'UTF-8', 'yes'); // p:presentationPr $objWriter->startElement('p:presentationPr'); $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:presentationPr > p:showPr if ($presentationPpts->isLoopContinuouslyUntilEsc()) { $objWriter->startElement('p:showPr'); $objWriter->writeAttribute('loop', '1'); $objWriter->endElement(); } // p:extLst $objWriter->startElement('p:extLst'); // p:ext $objWriter->startElement('p:ext'); $objWriter->writeAttribute('uri', '{E76CE94A-603C-4142-B9EB-6D1370010A27}'); // p14:discardImageEditData $objWriter->startElement('p14:discardImageEditData'); $objWriter->writeAttribute('xmlns:p14', 'http://schemas.microsoft.com/office/powerpoint/2010/main'); $objWriter->writeAttribute('val', '0'); $objWriter->endElement(); // > p:ext $objWriter->endElement(); // p:ext $objWriter->startElement('p:ext'); $objWriter->writeAttribute('uri', '{D31A062A-798A-4329-ABDD-BBA856620510}'); // p14:defaultImageDpi $objWriter->startElement('p14:defaultImageDpi'); $objWriter->writeAttribute('xmlns:p14', 'http://schemas.microsoft.com/office/powerpoint/2010/main'); $objWriter->writeAttribute('val', '220'); $objWriter->endElement(); // > p:ext $objWriter->endElement(); // > p:extLst $objWriter->endElement(); // > p:presentationPr $objWriter->endElement(); $this->getZip()->addFromString('ppt/presProps.xml', $objWriter->getData()); return $this->getZip(); }
/** * @return \PhpOffice\Common\Adapter\Zip\ZipInterface */ public function render() { // Create XML writer $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY); // XML header $objWriter->startDocument('1.0', 'UTF-8', 'yes'); // cp:coreProperties $objWriter->startElement('cp:coreProperties'); $objWriter->writeAttribute('xmlns:cp', 'http://schemas.openxmlformats.org/package/2006/metadata/core-properties'); $objWriter->writeAttribute('xmlns:dc', 'http://purl.org/dc/elements/1.1/'); $objWriter->writeAttribute('xmlns:dcterms', 'http://purl.org/dc/terms/'); $objWriter->writeAttribute('xmlns:dcmitype', 'http://purl.org/dc/dcmitype/'); $objWriter->writeAttribute('xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance'); // dc:creator $objWriter->writeElement('dc:creator', $this->oPresentation->getDocumentProperties()->getCreator()); // cp:lastModifiedBy $objWriter->writeElement('cp:lastModifiedBy', $this->oPresentation->getDocumentProperties()->getLastModifiedBy()); // dcterms:created $objWriter->startElement('dcterms:created'); $objWriter->writeAttribute('xsi:type', 'dcterms:W3CDTF'); $objWriter->writeRaw(gmdate("Y-m-d\\TH:i:s\\Z", $this->oPresentation->getDocumentProperties()->getCreated())); $objWriter->endElement(); // dcterms:modified $objWriter->startElement('dcterms:modified'); $objWriter->writeAttribute('xsi:type', 'dcterms:W3CDTF'); $objWriter->writeRaw(gmdate("Y-m-d\\TH:i:s\\Z", $this->oPresentation->getDocumentProperties()->getModified())); $objWriter->endElement(); // dc:title $objWriter->writeElement('dc:title', $this->oPresentation->getDocumentProperties()->getTitle()); // dc:description $objWriter->writeElement('dc:description', $this->oPresentation->getDocumentProperties()->getDescription()); // dc:subject $objWriter->writeElement('dc:subject', $this->oPresentation->getDocumentProperties()->getSubject()); // cp:keywords $objWriter->writeElement('cp:keywords', $this->oPresentation->getDocumentProperties()->getKeywords()); // cp:category $objWriter->writeElement('cp:category', $this->oPresentation->getDocumentProperties()->getCategory()); if ($this->oPresentation->getPresentationProperties()->isMarkedAsFinal()) { // cp:contentStatus = Final $objWriter->writeElement('cp:contentStatus', 'Final'); } $objWriter->endElement(); $this->oZip->addFromString('docProps/core.xml', $objWriter->getData()); // Return return $this->oZip; }
/** * @return \PhpOffice\Common\Adapter\Zip\ZipInterface */ public function render() { // Create XML writer $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY); // XML header $objWriter->startDocument('1.0', 'UTF-8', 'yes'); // p:viewPr $objWriter->startElement('p:viewPr'); $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('showComments', $this->getPresentation()->getPresentationProperties()->isCommentVisible() ? 1 : 0); $objWriter->writeAttribute('lastView', $this->getPresentation()->getPresentationProperties()->getLastView()); // p:viewPr > p:slideViewPr $objWriter->startElement('p:slideViewPr'); // p:viewPr > p:slideViewPr > p:cSldViewPr $objWriter->startElement('p:cSldViewPr'); // p:viewPr > p:slideViewPr > p:cSldViewPr > p:cViewPr $objWriter->startElement('p:cViewPr'); // p:viewPr > p:slideViewPr > p:cSldViewPr > p:cViewPr > p:scale $objWriter->startElement('p:scale'); $objWriter->startElement('a:sx'); $objWriter->writeAttribute('d', '100'); $objWriter->writeAttribute('n', (int) ($this->getPresentation()->getPresentationProperties()->getZoom() * 100)); $objWriter->endElement(); $objWriter->startElement('a:sy'); $objWriter->writeAttribute('d', '100'); $objWriter->writeAttribute('n', (int) ($this->getPresentation()->getPresentationProperties()->getZoom() * 100)); $objWriter->endElement(); // > // p:viewPr > p:slideViewPr > p:cSldViewPr > p:cViewPr > p:scale $objWriter->endElement(); $objWriter->startElement('p:origin'); $objWriter->writeAttribute('x', '0'); $objWriter->writeAttribute('y', '0'); $objWriter->endElement(); // > // p:viewPr > p:slideViewPr > p:cSldViewPr > p:cViewPr $objWriter->endElement(); // > // p:viewPr > p:slideViewPr > p:cSldViewPr $objWriter->endElement(); // > // p:viewPr > p:slideViewPr $objWriter->endElement(); // > // p:viewPr $objWriter->endElement(); $this->getZip()->addFromString('ppt/viewProps.xml', $objWriter->getData()); return $this->getZip(); }
/** * @return ZipInterface */ public function render() { // Create XML writer $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY); $objWriter->startDocument('1.0', 'UTF-8'); // office:document-meta $objWriter->startElement('office:document-meta'); $objWriter->writeAttribute('xmlns:office', 'urn:oasis:names:tc:opendocument:xmlns:office:1.0'); $objWriter->writeAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink'); $objWriter->writeAttribute('xmlns:dc', 'http://purl.org/dc/elements/1.1/'); $objWriter->writeAttribute('xmlns:meta', 'urn:oasis:names:tc:opendocument:xmlns:meta:1.0'); $objWriter->writeAttribute('xmlns:presentation', 'urn:oasis:names:tc:opendocument:xmlns:presentation:1.0'); $objWriter->writeAttribute('xmlns:ooo', 'http://openoffice.org/2004/office'); $objWriter->writeAttribute('xmlns:smil', 'urn:oasis:names:tc:opendocument:xmlns:smil-compatible:1.0'); $objWriter->writeAttribute('xmlns:anim', 'urn:oasis:names:tc:opendocument:xmlns:animation:1.0'); $objWriter->writeAttribute('xmlns:grddl', 'http://www.w3.org/2003/g/data-view#'); $objWriter->writeAttribute('xmlns:officeooo', 'http://openoffice.org/2009/office'); $objWriter->writeAttribute('xmlns:drawooo', 'http://openoffice.org/2010/draw'); $objWriter->writeAttribute('office:version', '1.2'); // office:meta $objWriter->startElement('office:meta'); // dc:creator $objWriter->writeElement('dc:creator', $this->getPresentation()->getDocumentProperties()->getLastModifiedBy()); // dc:date $objWriter->writeElement('dc:date', gmdate('Y-m-d\\TH:i:s.000', $this->getPresentation()->getDocumentProperties()->getModified())); // dc:description $objWriter->writeElement('dc:description', $this->getPresentation()->getDocumentProperties()->getDescription()); // dc:subject $objWriter->writeElement('dc:subject', $this->getPresentation()->getDocumentProperties()->getSubject()); // dc:title $objWriter->writeElement('dc:title', $this->getPresentation()->getDocumentProperties()->getTitle()); // meta:creation-date $objWriter->writeElement('meta:creation-date', gmdate('Y-m-d\\TH:i:s.000', $this->getPresentation()->getDocumentProperties()->getCreated())); // meta:initial-creator $objWriter->writeElement('meta:initial-creator', $this->getPresentation()->getDocumentProperties()->getCreator()); // meta:keyword $objWriter->writeElement('meta:keyword', $this->getPresentation()->getDocumentProperties()->getKeywords()); // @todo : Where these properties are written ? // $this->getPresentation()->getDocumentProperties()->getCategory() // $this->getPresentation()->getDocumentProperties()->getCompany() $objWriter->endElement(); $objWriter->endElement(); $this->getZip()->addFromString('meta.xml', $objWriter->getData()); return $this->getZip(); }
/** * Write presentation relationships to XML format * * @return string XML Output * @throws \Exception */ public function writePresentationRelationships() { // Create XML writer $objWriter = new XMLWriter(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'); // Relation id $relationId = 1; foreach ($this->getPresentation()->getAllMasterSlides() as $oMasterSlide) { // Relationship slideMasters/slideMasterX.xml $this->writeRelationship($objWriter, $relationId++, 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster', 'slideMasters/slideMaster' . $oMasterSlide->getRelsIndex() . '.xml'); } // Add slide theme (only one!) // Relationship theme/theme1.xml $this->writeRelationship($objWriter, $relationId++, 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme', 'theme/theme1.xml'); // Relationships with slides $slideCount = $this->getPresentation()->getSlideCount(); for ($i = 0; $i < $slideCount; ++$i) { $this->writeRelationship($objWriter, $relationId++, 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide', 'slides/slide' . ($i + 1) . '.xml'); } $this->writeRelationship($objWriter, $relationId++, 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/presProps', 'presProps.xml'); $this->writeRelationship($objWriter, $relationId++, 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/viewProps', 'viewProps.xml'); $this->writeRelationship($objWriter, $relationId++, 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/tableStyles', 'tableStyles.xml'); // Comments Authors foreach ($this->getPresentation()->getAllSlides() as $oSlide) { foreach ($oSlide->getShapeCollection() as $oShape) { if (!$oShape instanceof Comment) { continue; } $oAuthor = $oShape->getAuthor(); if (!$oAuthor instanceof Author) { continue; } $this->writeRelationship($objWriter, $relationId++, 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/commentAuthors', 'commentAuthors.xml'); break 2; } } $objWriter->endElement(); // Return return $objWriter->getData(); }
/** * @param Slide $oSlide * @return string */ protected function writeSlideComments(Slide $oSlide) { /** * @var Comment[] */ $arrayComment = array(); foreach ($oSlide->getShapeCollection() as $oShape) { if ($oShape instanceof Comment) { $arrayComment[] = $oShape; } } if (empty($arrayComment)) { return ''; } $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY); $objWriter->startDocument('1.0', 'UTF-8', 'yes'); // p:cmLst $objWriter->startElement('p:cmLst'); $objWriter->writeAttribute('xmlns:p', 'http://schemas.openxmlformats.org/presentationml/2006/main'); foreach ($arrayComment as $idxComment => $oComment) { $oAuthor = $oComment->getAuthor(); // p:cmLst > p:cm $objWriter->startElement('p:cm'); $objWriter->writeAttribute('authorId', $oAuthor instanceof Comment\Author ? $oAuthor->getIndex() : 0); $objWriter->writeAttribute('dt', date('Y-m-d\\TH:i:s.000000000', $oComment->getDate())); $objWriter->writeAttribute('idx', $idxComment); // p:cmLst > p:cm > p:pos // Uses 1/8pt for positionning // @link : https://social.msdn.microsoft.com/Forums/fr-FR/ebdc12f2-0cff-4fa8-b901-fa6e3198364e/comment-position-units $objWriter->startElement('p:pos'); $objWriter->writeAttribute('x', (int) CommonDrawing::pixelsToPoints($oComment->getOffsetX() * 8)); $objWriter->writeAttribute('y', (int) CommonDrawing::pixelsToPoints($oComment->getOffsetY() * 8)); $objWriter->endElement(); // p:cmLst > p:cm > p:text $objWriter->writeElement('p:text', $oComment->getText()); // p:cmLst > ## p:cm $objWriter->endElement(); } // ## p:cmLst $objWriter->endElement(); return $objWriter->getData(); }
/** * Write theme relationships to XML format * * @param int $masterId Master slide id * @return string XML Output * @throws \Exception */ public function writeThemeRelationships($masterId = 1) { // Create XML writer $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY); // Layout pack $oLayoutPack = new PackDefault(); // XML header $objWriter->startDocument('1.0', 'UTF-8', 'yes'); // Relationships $objWriter->startElement('Relationships'); $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/package/2006/relationships'); // Other relationships $otherRelations = $oLayoutPack->getThemeRelations(); foreach ($otherRelations as $otherRelation) { if ($otherRelation['masterid'] == $masterId) { $this->writeRelationship($objWriter, $otherRelation['id'], $otherRelation['type'], $otherRelation['target']); } } $objWriter->endElement(); // Return return $objWriter->getData(); }
/** * Write slide layout relationships to XML format * * @param int $slideLayoutIndex * @param int $masterId * @return string XML Output * @throws \Exception */ public function writeSlideLayoutRelationships($slideLayoutIndex, $masterId = 1) { // Create XML writer $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY); // Layout pack $oLayoutPack = new PackDefault(); // XML header $objWriter->startDocument('1.0', 'UTF-8', 'yes'); // Relationships $objWriter->startElement('Relationships'); $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/package/2006/relationships'); // Write slideMaster relationship $this->writeRelationship($objWriter, 1, 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster', '../slideMasters/slideMaster' . $masterId . '.xml'); // Other relationships foreach ($oLayoutPack->getLayoutRelations() as $otherRelation) { if ($otherRelation['layoutId'] == $slideLayoutIndex) { $this->writeRelationship($objWriter, $otherRelation['id'], $otherRelation['type'], $otherRelation['target']); } } $objWriter->endElement(); // Return return $objWriter->getData(); }
/** * @param Author[] $arrayAuthors * @return string */ protected function writeCommentsAuthors($arrayAuthors) { $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY); $objWriter->startDocument('1.0', 'UTF-8', 'yes'); // p:cmAuthorLst $objWriter->startElement('p:cmAuthorLst'); $objWriter->writeAttribute('xmlns:p', 'http://schemas.openxmlformats.org/presentationml/2006/main'); $idxAuthor = 0; foreach ($arrayAuthors as $oAuthor) { $oAuthor->setIndex($idxAuthor++); // p:cmAuthor $objWriter->startElement('p:cmAuthor'); $objWriter->writeAttribute('id', $oAuthor->getIndex()); $objWriter->writeAttribute('name', $oAuthor->getName()); $objWriter->writeAttribute('initials', $oAuthor->getInitials()); $objWriter->writeAttribute('lastIdx', "2"); $objWriter->writeAttribute('clrIdx', 0); $objWriter->endElement(); } // ## p:cmAuthorLst $objWriter->endElement(); return $objWriter->getData(); }
/** * Write slide master relationships to XML format * * @param int $masterId Master slide id * @return string XML Output * @throws \Exception */ public function writeSlideMasterRelationships($masterId = 1) { // Create XML writer $objWriter = new XMLWriter(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'); // Keep content id $contentId = 0; // Lookup layouts $layouts = array(); $oLayoutPack = new PackDefault(); foreach ($oLayoutPack->getLayouts() as $key => $layout) { if ($layout['masterid'] == $masterId) { $layouts[$key] = $layout; } } // Write slideLayout relationships foreach ($layouts as $key => $layout) { $this->writeRelationship($objWriter, ++$contentId, 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout', '../slideLayouts/slideLayout' . $key . '.xml'); } // Relationship theme/theme1.xml $this->writeRelationship($objWriter, ++$contentId, 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme', '../theme/theme' . $masterId . '.xml'); // Other relationships $otherRelations = $oLayoutPack->getMasterSlideRelations(); foreach ($otherRelations as $otherRelation) { if ($otherRelation['masterid'] == $masterId) { $this->writeRelationship($objWriter, ++$contentId, $otherRelation['type'], $otherRelation['target']); } } $objWriter->endElement(); // Return return $objWriter->getData(); }
/** * @return \PhpOffice\Common\Adapter\Zip\ZipInterface */ public function render() { // Create XML writer $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY); // XML header $objWriter->startDocument('1.0', 'UTF-8', 'yes'); // p:presentation $objWriter->startElement('p:presentation'); $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:sldMasterIdLst $objWriter->startElement('p:sldMasterIdLst'); // Add slide masters $relationId = 1; $slideMasterId = 2147483648.0; $oLayoutPack = new PackDefault(); $masterSlides = $oLayoutPack->getMasterSlides(); $masterSlidesCount = count($masterSlides); // @todo foreach ($masterSlides as $masterSlide) for ($i = 0; $i < $masterSlidesCount; $i++) { // p:sldMasterId $objWriter->startElement('p:sldMasterId'); $objWriter->writeAttribute('id', $slideMasterId); $objWriter->writeAttribute('r:id', 'rId' . $relationId++); $objWriter->endElement(); // Increase identifier $slideMasterId += 12; } $objWriter->endElement(); // theme $relationId++; // p:sldIdLst $objWriter->startElement('p:sldIdLst'); // Write slides $slideCount = $this->oPresentation->getSlideCount(); for ($i = 0; $i < $slideCount; ++$i) { // p:sldId $objWriter->startElement('p:sldId'); $objWriter->writeAttribute('id', $i + 256); $objWriter->writeAttribute('r:id', 'rId' . ($i + $relationId)); $objWriter->endElement(); } $objWriter->endElement(); // p:sldSz $objWriter->startElement('p:sldSz'); $objWriter->writeAttribute('cx', $this->oPresentation->getLayout()->getCX()); $objWriter->writeAttribute('cy', $this->oPresentation->getLayout()->getCY()); if ($this->oPresentation->getLayout()->getDocumentLayout() != DocumentLayout::LAYOUT_CUSTOM) { $objWriter->writeAttribute('type', $this->oPresentation->getLayout()->getDocumentLayout()); } $objWriter->endElement(); // p:notesSz $objWriter->startElement('p:notesSz'); $objWriter->writeAttribute('cx', '6858000'); $objWriter->writeAttribute('cy', '9144000'); $objWriter->endElement(); $objWriter->endElement(); $this->oZip->addFromString('ppt/presentation.xml', $objWriter->getData()); // Return return $this->oZip; }
/** * Serialize PhpPresentation object to XML * * @param PhpPresentation $pPhpPresentation * @param string $pFilename * @return string XML Output * @throws \Exception */ private function writeSerialized(PhpPresentation $pPhpPresentation = null, $pFilename = '') { // Clone $pPhpPresentation $pPhpPresentation = clone $pPhpPresentation; // Update media links $slideCount = $pPhpPresentation->getSlideCount(); for ($i = 0; $i < $slideCount; ++$i) { for ($j = 0; $j < $pPhpPresentation->getSlide($i)->getShapeCollection()->count(); ++$j) { if ($pPhpPresentation->getSlide($i)->getShapeCollection()->offsetGet($j) instanceof AbstractDrawing) { $pPhpPresentation->getSlide($i)->getShapeCollection()->offsetGet($j)->setPath('zip://' . $pFilename . '#media/' . $pPhpPresentation->getSlide($i)->getShapeCollection()->offsetGet($j)->getFilename(), false); } } } // Create XML writer $objWriter = new XMLWriter(); $objWriter->openMemory(); $objWriter->setIndent(true); // XML header $objWriter->startDocument('1.0', 'UTF-8', 'yes'); // PhpPresentation $objWriter->startElement('PhpPresentation'); $objWriter->writeAttribute('version', '##VERSION##'); // Comment $objWriter->writeComment('This file has been generated using PhpPresentation v##VERSION## (http://github.com/PHPOffice/PhpPresentation). It contains a base64 encoded serialized version of the PhpPresentation internal object.'); // Data $objWriter->startElement('data'); $objWriter->writeCData(base64_encode(serialize($pPhpPresentation))); $objWriter->endElement(); $objWriter->endElement(); // Return return $objWriter->getData(); }
/** * Write theme to XML format * * @param Slide\SlideMaster $oMasterSlide * @return string XML Output */ protected function writeTheme(Slide\SlideMaster $oMasterSlide) { $arrayFont = array('Jpan' => 'MS Pゴシック', 'Hang' => '맑은 고딕', 'Hans' => '宋体', 'Hant' => '新細明體', 'Arab' => 'Times New Roman', 'Hebr' => 'Times New Roman', 'Thai' => 'Angsana New', 'Ethi' => 'Nyala', 'Beng' => 'Vrinda', 'Gujr' => 'Shruti', 'Khmr' => 'MoolBoran', 'Knda' => 'Tunga', 'Guru' => 'Raavi', 'Cans' => 'Euphemia', 'Cher' => 'Plantagenet Cherokee', 'Yiii' => 'Microsoft Yi Baiti', 'Tibt' => 'Microsoft Himalaya', 'Thaa' => 'MV Boli', 'Deva' => 'Mangal', 'Telu' => 'Gautami', 'Taml' => 'Latha', 'Syrc' => 'Estrangelo Edessa', 'Orya' => 'Kalinga', 'Mlym' => 'Kartika', 'Laoo' => 'DokChampa', 'Sinh' => 'Iskoola Pota', 'Mong' => 'Mongolian Baiti', 'Viet' => 'Times New Roman', 'Uigh' => 'Microsoft Uighur'); // Create XML writer $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY); $name = 'Theme' . rand(1, 100); // XML header $objWriter->startDocument('1.0', 'UTF-8', 'yes'); // a:theme $objWriter->startElement('a:theme'); $objWriter->writeAttribute('xmlns:a', 'http://schemas.openxmlformats.org/drawingml/2006/main'); $objWriter->writeAttribute('name', $name); // a:theme/a:themeElements $objWriter->startElement('a:themeElements'); // a:theme/a:themeElements/a:clrScheme $objWriter->startElement('a:clrScheme'); $objWriter->writeAttribute('name', $name); foreach ($oMasterSlide->getAllSchemeColors() as $oSchemeColor) { // a:theme/a:themeElements/a:clrScheme/a:* $objWriter->startElement('a:' . $oSchemeColor->getValue()); if (in_array($oSchemeColor->getValue(), array('dk1', 'lt1'))) { $objWriter->startElement('a:sysClr'); $objWriter->writeAttribute('val', $oSchemeColor->getValue() == 'dk1' ? 'windowText' : 'window'); $objWriter->writeAttribute('lastClr', $oSchemeColor->getRGB()); $objWriter->endElement(); } else { $objWriter->startElement('a:srgbClr'); $objWriter->writeAttribute('val', $oSchemeColor->getRGB()); $objWriter->endElement(); } // a:theme/a:themeElements/a:clrScheme/a:*/ $objWriter->endElement(); } // a:theme/a:themeElements/a:clrScheme/ $objWriter->endElement(); // a:theme/a:themeElements/a:fontScheme $objWriter->startElement('a:fontScheme'); $objWriter->writeAttribute('name', $name); // a:theme/a:themeElements/a:fontScheme/a:majorFont $objWriter->startElement('a:majorFont'); // a:theme/a:themeElements/a:fontScheme/a:majorFont/a:latin $objWriter->startElement('a:latin'); $objWriter->writeAttribute('typeface', 'Calibri'); $objWriter->endElement(); // a:theme/a:themeElements/a:fontScheme/a:majorFont/a:ea $objWriter->startElement('a:ea'); $objWriter->writeAttribute('typeface', ''); $objWriter->endElement(); // a:theme/a:themeElements/a:fontScheme/a:majorFont/a:cs $objWriter->startElement('a:cs'); $objWriter->writeAttribute('typeface', ''); $objWriter->endElement(); foreach ($arrayFont as $script => $typeface) { // a:theme/a:themeElements/a:fontScheme/a:majorFont/a:font $objWriter->startElement('a:font'); $objWriter->writeAttribute('script', $script); $objWriter->writeAttribute('typeface', $typeface); $objWriter->endElement(); } // a:theme/a:themeElements/a:fontScheme/a:majorFont/ $objWriter->endElement(); // a:theme/a:themeElements/a:fontScheme/a:minorFont $objWriter->startElement('a:minorFont'); // a:theme/a:themeElements/a:fontScheme/a:majorFont/a:latin $objWriter->startElement('a:latin'); $objWriter->writeAttribute('typeface', 'Calibri'); $objWriter->endElement(); // a:theme/a:themeElements/a:fontScheme/a:majorFont/a:ea $objWriter->startElement('a:ea'); $objWriter->writeAttribute('typeface', ''); $objWriter->endElement(); // a:theme/a:themeElements/a:fontScheme/a:majorFont/a:cs $objWriter->startElement('a:cs'); $objWriter->writeAttribute('typeface', ''); $objWriter->endElement(); foreach ($arrayFont as $script => $typeface) { // a:theme/a:themeElements/a:fontScheme/a:majorFont/a:font $objWriter->startElement('a:font'); $objWriter->writeAttribute('script', $script); $objWriter->writeAttribute('typeface', $typeface); $objWriter->endElement(); } // a:theme/a:themeElements/a:fontScheme/a:minorFont/ $objWriter->endElement(); // a:theme/a:themeElements/a:fontScheme/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme $objWriter->startElement('a:fmtScheme'); $objWriter->writeAttribute('name', $name); // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst $objWriter->startElement('a:fillStyleLst'); // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:solidFill $objWriter->startElement('a:solidFill'); // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:solidFill/a:schemeClr $objWriter->startElement('a:schemeClr'); $objWriter->writeAttribute('val', 'phClr'); // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:solidFill/a:schemeClr/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:solidFill/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill $objWriter->startElement('a:gradFill'); $objWriter->writeAttribute('rotWithShape', 1); // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst $objWriter->startElement('a:gsLst'); // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs $objWriter->startElement('a:gs'); $objWriter->writeAttribute('pos', 0); // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr $objWriter->startElement('a:schemeClr'); $objWriter->writeAttribute('val', 'phClr'); // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:tint $objWriter->startElement('a:tint'); $objWriter->writeAttribute('val', 50000); $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:satMod $objWriter->startElement('a:satMod'); $objWriter->writeAttribute('val', 300000); $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs $objWriter->startElement('a:gs'); $objWriter->writeAttribute('pos', 35000); // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr $objWriter->startElement('a:schemeClr'); $objWriter->writeAttribute('val', 'phClr'); // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:tint $objWriter->startElement('a:tint'); $objWriter->writeAttribute('val', 37000); $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:satMod $objWriter->startElement('a:satMod'); $objWriter->writeAttribute('val', 300000); $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs $objWriter->startElement('a:gs'); $objWriter->writeAttribute('pos', 100000); // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr $objWriter->startElement('a:schemeClr'); $objWriter->writeAttribute('val', 'phClr'); // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:tint $objWriter->startElement('a:tint'); $objWriter->writeAttribute('val', 15000); $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:satMod $objWriter->startElement('a:satMod'); $objWriter->writeAttribute('val', 350000); $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:lin $objWriter->startElement('a:lin'); $objWriter->writeAttribute('ang', 16200000); $objWriter->writeAttribute('scaled', 1); $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill $objWriter->startElement('a:gradFill'); $objWriter->writeAttribute('rotWithShape', 1); // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst $objWriter->startElement('a:gsLst'); // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs $objWriter->startElement('a:gs'); $objWriter->writeAttribute('pos', 0); // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr $objWriter->startElement('a:schemeClr'); $objWriter->writeAttribute('val', 'phClr'); // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:shade $objWriter->startElement('a:shade'); $objWriter->writeAttribute('val', 51000); $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:satMod $objWriter->startElement('a:satMod'); $objWriter->writeAttribute('val', 130000); $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs $objWriter->startElement('a:gs'); $objWriter->writeAttribute('pos', 80000); // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr $objWriter->startElement('a:schemeClr'); $objWriter->writeAttribute('val', 'phClr'); // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:shade $objWriter->startElement('a:shade'); $objWriter->writeAttribute('val', 93000); $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:satMod $objWriter->startElement('a:satMod'); $objWriter->writeAttribute('val', 130000); $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs $objWriter->startElement('a:gs'); $objWriter->writeAttribute('pos', 100000); // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr $objWriter->startElement('a:schemeClr'); $objWriter->writeAttribute('val', 'phClr'); // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:shade $objWriter->startElement('a:shade'); $objWriter->writeAttribute('val', 94000); $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:satMod $objWriter->startElement('a:satMod'); $objWriter->writeAttribute('val', 135000); $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:lin $objWriter->startElement('a:lin'); $objWriter->writeAttribute('ang', 16200000); $objWriter->writeAttribute('scaled', 0); $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst $objWriter->startElement('a:lnStyleLst'); // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln $objWriter->startElement('a:ln'); $objWriter->writeAttribute('w', 9525); $objWriter->writeAttribute('cap', 'flat'); $objWriter->writeAttribute('cmpd', 'sng'); $objWriter->writeAttribute('algn', 'ctr'); // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill $objWriter->startElement('a:solidFill'); // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill/a:schemeClr $objWriter->startElement('a:schemeClr'); $objWriter->writeAttribute('val', 'phClr'); // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:shade $objWriter->startElement('a:shade'); $objWriter->writeAttribute('val', 95000); $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:fillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:satMod $objWriter->startElement('a:satMod'); $objWriter->writeAttribute('val', 105000); $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill/a:schemeClr/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:prstDash $objWriter->startElement('a:prstDash'); $objWriter->writeAttribute('val', 'solid'); $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln $objWriter->startElement('a:ln'); $objWriter->writeAttribute('w', 25400); $objWriter->writeAttribute('cap', 'flat'); $objWriter->writeAttribute('cmpd', 'sng'); $objWriter->writeAttribute('algn', 'ctr'); // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill $objWriter->startElement('a:solidFill'); // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill/a:schemeClr $objWriter->startElement('a:schemeClr'); $objWriter->writeAttribute('val', 'phClr'); // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill/a:schemeClr/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:prstDash $objWriter->startElement('a:prstDash'); $objWriter->writeAttribute('val', 'solid'); $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln $objWriter->startElement('a:ln'); $objWriter->writeAttribute('w', 38100); $objWriter->writeAttribute('cap', 'flat'); $objWriter->writeAttribute('cmpd', 'sng'); $objWriter->writeAttribute('algn', 'ctr'); // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill $objWriter->startElement('a:solidFill'); // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill/a:schemeClr $objWriter->startElement('a:schemeClr'); $objWriter->writeAttribute('val', 'phClr'); // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill/a:schemeClr/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:solidFill/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/a:prstDash $objWriter->startElement('a:prstDash'); $objWriter->writeAttribute('val', 'solid'); $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/a:ln/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:lnStyleLst/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst $objWriter->startElement('a:effectStyleLst'); // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle $objWriter->startElement('a:effectStyle'); // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst $objWriter->startElement('a:effectLst'); // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw $objWriter->startElement('a:outerShdw'); $objWriter->writeAttribute('blurRad', 40000); $objWriter->writeAttribute('dir', 5400000); $objWriter->writeAttribute('dist', 20000); $objWriter->writeAttribute('rotWithShape', 0); // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr $objWriter->startElement('a:srgbClr'); $objWriter->writeAttribute('val', '000000'); // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr/a:alpha $objWriter->startElement('a:alpha'); $objWriter->writeAttribute('val', 38000); // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr/a:alpha/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle $objWriter->startElement('a:effectStyle'); // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst $objWriter->startElement('a:effectLst'); // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw $objWriter->startElement('a:outerShdw'); $objWriter->writeAttribute('blurRad', 40000); $objWriter->writeAttribute('dir', 5400000); $objWriter->writeAttribute('dist', 23000); $objWriter->writeAttribute('rotWithShape', 0); // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr $objWriter->startElement('a:srgbClr'); $objWriter->writeAttribute('val', '000000'); // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr/a:alpha $objWriter->startElement('a:alpha'); $objWriter->writeAttribute('val', 35000); // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr/a:alpha/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle $objWriter->startElement('a:effectStyle'); // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst $objWriter->startElement('a:effectLst'); // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw $objWriter->startElement('a:outerShdw'); $objWriter->writeAttribute('blurRad', 40000); $objWriter->writeAttribute('dir', 5400000); $objWriter->writeAttribute('dist', 23000); $objWriter->writeAttribute('rotWithShape', 0); // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr $objWriter->startElement('a:srgbClr'); $objWriter->writeAttribute('val', '000000'); // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr/a:alpha $objWriter->startElement('a:alpha'); $objWriter->writeAttribute('val', 35000); // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr/a:alpha/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/a:srgbClr/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/a:outerShdw/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:effectLst/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:scene3d $objWriter->startElement('a:scene3d'); // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:scene3d/a:camera $objWriter->startElement('a:camera'); $objWriter->writeAttribute('prst', 'orthographicFront'); // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:scene3d/a:camera/a:rot $objWriter->startElement('a:rot'); $objWriter->writeAttribute('lat', 0); $objWriter->writeAttribute('lon', 0); $objWriter->writeAttribute('rev', 0); $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:scene3d/a:camera/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:scene3d/a:lightRig $objWriter->startElement('a:lightRig'); $objWriter->writeAttribute('dir', 't'); $objWriter->writeAttribute('rig', 'threePt'); // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:scene3d/a:lightRig/a:rot $objWriter->startElement('a:rot'); $objWriter->writeAttribute('lat', 0); $objWriter->writeAttribute('lon', 0); $objWriter->writeAttribute('rev', 1200000); $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:scene3d/a:lightRig/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:scene3d/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:sp3d $objWriter->startElement('a:sp3d'); // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:sp3d/a:bevelT $objWriter->startElement('a:bevelT'); $objWriter->writeAttribute('h', 25400); $objWriter->writeAttribute('w', 63500); $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/a:sp3d/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/a:effectStyle/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:effectStyleLst/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst $objWriter->startElement('a:bgFillStyleLst'); // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:solidFill $objWriter->startElement('a:solidFill'); // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:solidFill/a:schemeClr $objWriter->startElement('a:schemeClr'); $objWriter->writeAttribute('val', 'phClr'); // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:solidFill/a:schemeClr/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:solidFill/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill $objWriter->startElement('a:gradFill'); $objWriter->writeAttribute('rotWithShape', 1); // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst $objWriter->startElement('a:gsLst'); // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs $objWriter->startElement('a:gs'); $objWriter->writeAttribute('pos', 0); // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr $objWriter->startElement('a:schemeClr'); $objWriter->writeAttribute('val', 'phClr'); // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:tint $objWriter->startElement('a:tint'); $objWriter->writeAttribute('val', 40000); $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:satMod $objWriter->startElement('a:satMod'); $objWriter->writeAttribute('val', 350000); $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs $objWriter->startElement('a:gs'); $objWriter->writeAttribute('pos', 40000); // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr $objWriter->startElement('a:schemeClr'); $objWriter->writeAttribute('val', 'phClr'); // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:shade $objWriter->startElement('a:tint'); $objWriter->writeAttribute('val', 45000); $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:shade $objWriter->startElement('a:shade'); $objWriter->writeAttribute('val', 99000); $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:satMod $objWriter->startElement('a:satMod'); $objWriter->writeAttribute('val', 350000); $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs $objWriter->startElement('a:gs'); $objWriter->writeAttribute('pos', 100000); // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr $objWriter->startElement('a:schemeClr'); $objWriter->writeAttribute('val', 'phClr'); // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:shade $objWriter->startElement('a:shade'); $objWriter->writeAttribute('val', 20000); $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:satMod $objWriter->startElement('a:satMod'); $objWriter->writeAttribute('val', 255000); $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:path $objWriter->startElement('a:path'); $objWriter->writeAttribute('path', 'circle'); // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:path/a:fillToRect $objWriter->startElement('a:fillToRect'); $objWriter->writeAttribute('b', 180000); $objWriter->writeAttribute('l', 50000); $objWriter->writeAttribute('r', 50000); $objWriter->writeAttribute('t', -80000); $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:path/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill $objWriter->startElement('a:gradFill'); $objWriter->writeAttribute('rotWithShape', 1); // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst $objWriter->startElement('a:gsLst'); // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs $objWriter->startElement('a:gs'); $objWriter->writeAttribute('pos', 0); // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr $objWriter->startElement('a:schemeClr'); $objWriter->writeAttribute('val', 'phClr'); // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:tint $objWriter->startElement('a:tint'); $objWriter->writeAttribute('val', 80000); $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:satMod $objWriter->startElement('a:satMod'); $objWriter->writeAttribute('val', 300000); $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs $objWriter->startElement('a:gs'); $objWriter->writeAttribute('pos', 100000); // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr $objWriter->startElement('a:schemeClr'); $objWriter->writeAttribute('val', 'phClr'); // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:shade $objWriter->startElement('a:shade'); $objWriter->writeAttribute('val', 30000); $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/a:satMod $objWriter->startElement('a:satMod'); $objWriter->writeAttribute('val', 200000); $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/a:schemeClr/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/a:gs/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:gsLst/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:path $objWriter->startElement('a:path'); $objWriter->writeAttribute('path', 'circle'); // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:path/a:fillToRect $objWriter->startElement('a:fillToRect'); $objWriter->writeAttribute('b', 50000); $objWriter->writeAttribute('l', 50000); $objWriter->writeAttribute('r', 50000); $objWriter->writeAttribute('t', 50000); $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/a:path/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/a:gradFill/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/a:bgFillStyleLst/ $objWriter->endElement(); // a:theme/a:themeElements/a:fmtScheme/ $objWriter->endElement(); // a:theme/a:themeElements/ $objWriter->endElement(); // a:theme/a:themeElements $objWriter->writeElement('a:objectDefaults'); // a:theme/a:extraClrSchemeLst $objWriter->writeElement('a:extraClrSchemeLst'); // a:theme/ $objWriter->endElement(); // Return return $objWriter->getData(); }
/** * Write content file to XML format * * @return string XML Output * @throws \Exception */ public function writeContent() { // Create XML writer $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY); $objWriter->startDocument('1.0', 'UTF-8'); // office:document-content $objWriter->startElement('office:document-content'); $objWriter->writeAttribute('xmlns:office', 'urn:oasis:names:tc:opendocument:xmlns:office:1.0'); $objWriter->writeAttribute('xmlns:style', 'urn:oasis:names:tc:opendocument:xmlns:style:1.0'); $objWriter->writeAttribute('xmlns:text', 'urn:oasis:names:tc:opendocument:xmlns:text:1.0'); $objWriter->writeAttribute('xmlns:table', 'urn:oasis:names:tc:opendocument:xmlns:table:1.0'); $objWriter->writeAttribute('xmlns:draw', 'urn:oasis:names:tc:opendocument:xmlns:drawing:1.0'); $objWriter->writeAttribute('xmlns:fo', 'urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0'); $objWriter->writeAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink'); $objWriter->writeAttribute('xmlns:dc', 'http://purl.org/dc/elements/1.1/'); $objWriter->writeAttribute('xmlns:meta', 'urn:oasis:names:tc:opendocument:xmlns:meta:1.0'); $objWriter->writeAttribute('xmlns:number', 'urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0'); $objWriter->writeAttribute('xmlns:presentation', 'urn:oasis:names:tc:opendocument:xmlns:presentation:1.0'); $objWriter->writeAttribute('xmlns:svg', 'urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0'); $objWriter->writeAttribute('xmlns:chart', 'urn:oasis:names:tc:opendocument:xmlns:chart:1.0'); $objWriter->writeAttribute('xmlns:dr3d', 'urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0'); $objWriter->writeAttribute('xmlns:math', 'http://www.w3.org/1998/Math/MathML'); $objWriter->writeAttribute('xmlns:form', 'urn:oasis:names:tc:opendocument:xmlns:form:1.0'); $objWriter->writeAttribute('xmlns:script', 'urn:oasis:names:tc:opendocument:xmlns:script:1.0'); $objWriter->writeAttribute('xmlns:ooo', 'http://openoffice.org/2004/office'); $objWriter->writeAttribute('xmlns:ooow', 'http://openoffice.org/2004/writer'); $objWriter->writeAttribute('xmlns:oooc', 'http://openoffice.org/2004/calc'); $objWriter->writeAttribute('xmlns:dom', 'http://www.w3.org/2001/xml-events'); $objWriter->writeAttribute('xmlns:xforms', 'http://www.w3.org/2002/xforms'); $objWriter->writeAttribute('xmlns:xsd', 'http://www.w3.org/2001/XMLSchema'); $objWriter->writeAttribute('xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance'); $objWriter->writeAttribute('xmlns:smil', 'urn:oasis:names:tc:opendocument:xmlns:smil-compatible:1.0'); $objWriter->writeAttribute('xmlns:anim', 'urn:oasis:names:tc:opendocument:xmlns:animation:1.0'); $objWriter->writeAttribute('xmlns:rpt', 'http://openoffice.org/2005/report'); $objWriter->writeAttribute('xmlns:of', 'urn:oasis:names:tc:opendocument:xmlns:of:1.2'); $objWriter->writeAttribute('xmlns:rdfa', 'http://docs.oasis-open.org/opendocument/meta/rdfa#'); $objWriter->writeAttribute('xmlns:field', 'urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0'); $objWriter->writeAttribute('xmlns:officeooo', 'http://openoffice.org/2009/office'); $objWriter->writeAttribute('office:version', '1.2'); // office:automatic-styles $objWriter->startElement('office:automatic-styles'); $this->shapeId = 0; $incSlide = 0; foreach ($this->getPresentation()->getAllSlides() as $pSlide) { // Slides $this->writeStyleSlide($objWriter, $pSlide, $incSlide); // Images $shapes = $pSlide->getShapeCollection(); foreach ($shapes as $shape) { // Increment $this->shapeId ++$this->shapeId; // Check type if ($shape instanceof RichText) { $this->writeTxtStyle($objWriter, $shape); } if ($shape instanceof AbstractDrawing) { $this->writeDrawingStyle($objWriter, $shape); } if ($shape instanceof Line) { $this->writeLineStyle($objWriter, $shape); } if ($shape instanceof Table) { $this->writeTableStyle($objWriter, $shape); } if ($shape instanceof Group) { $this->writeGroupStyle($objWriter, $shape); } } $incSlide++; } // Style : Bullet if (!empty($this->arrStyleBullet)) { foreach ($this->arrStyleBullet as $key => $item) { $oStyle = $item['oStyle']; $arrLevel = explode(';', $item['level']); // style:style $objWriter->startElement('text:list-style'); $objWriter->writeAttribute('style:name', 'L_' . $key); foreach ($arrLevel as $level) { if ($level != '') { $oAlign = $item['oAlign_' . $level]; // text:list-level-style-bullet $objWriter->startElement('text:list-level-style-bullet'); $objWriter->writeAttribute('text:level', $level + 1); $objWriter->writeAttribute('text:bullet-char', $oStyle->getBulletChar()); // style:list-level-properties $objWriter->startElement('style:list-level-properties'); if ($oAlign->getIndent() < 0) { $objWriter->writeAttribute('text:space-before', CommonDrawing::pixelsToCentimeters($oAlign->getMarginLeft() - -1 * $oAlign->getIndent()) . 'cm'); $objWriter->writeAttribute('text:min-label-width', CommonDrawing::pixelsToCentimeters(-1 * $oAlign->getIndent()) . 'cm'); } else { $objWriter->writeAttribute('text:space-before', CommonDrawing::pixelsToCentimeters($oAlign->getMarginLeft() - $oAlign->getIndent()) . 'cm'); $objWriter->writeAttribute('text:min-label-width', CommonDrawing::pixelsToCentimeters($oAlign->getIndent()) . 'cm'); } $objWriter->endElement(); // style:text-properties $objWriter->startElement('style:text-properties'); $objWriter->writeAttribute('fo:font-family', $oStyle->getBulletFont()); $objWriter->writeAttribute('style:font-family-generic', 'swiss'); $objWriter->writeAttribute('style:use-window-font-color', 'true'); $objWriter->writeAttribute('fo:font-size', '100'); $objWriter->endElement(); $objWriter->endElement(); } } $objWriter->endElement(); } } // Style : Paragraph if (!empty($this->arrStyleParagraph)) { foreach ($this->arrStyleParagraph as $key => $item) { // style:style $objWriter->startElement('style:style'); $objWriter->writeAttribute('style:name', 'P_' . $key); $objWriter->writeAttribute('style:family', 'paragraph'); // style:paragraph-properties $objWriter->startElement('style:paragraph-properties'); switch ($item->getAlignment()->getHorizontal()) { case Alignment::HORIZONTAL_LEFT: $objWriter->writeAttribute('fo:text-align', 'left'); break; case Alignment::HORIZONTAL_RIGHT: $objWriter->writeAttribute('fo:text-align', 'right'); break; case Alignment::HORIZONTAL_CENTER: $objWriter->writeAttribute('fo:text-align', 'center'); break; case Alignment::HORIZONTAL_JUSTIFY: $objWriter->writeAttribute('fo:text-align', 'justify'); break; case Alignment::HORIZONTAL_DISTRIBUTED: $objWriter->writeAttribute('fo:text-align', 'justify'); break; default: $objWriter->writeAttribute('fo:text-align', 'left'); break; } $objWriter->endElement(); $objWriter->endElement(); } } // Style : Text : Font if (!empty($this->arrStyleTextFont)) { foreach ($this->arrStyleTextFont as $key => $item) { // style:style $objWriter->startElement('style:style'); $objWriter->writeAttribute('style:name', 'T_' . $key); $objWriter->writeAttribute('style:family', 'text'); // style:text-properties $objWriter->startElement('style:text-properties'); $objWriter->writeAttribute('fo:color', '#' . $item->getFont()->getColor()->getRGB()); $objWriter->writeAttribute('fo:font-family', $item->getFont()->getName()); $objWriter->writeAttribute('fo:font-size', $item->getFont()->getSize() . 'pt'); // @todo : fo:font-style if ($item->getFont()->isBold()) { $objWriter->writeAttribute('fo:font-weight', 'bold'); } $objWriter->writeAttribute('fo:language', $item->getLanguage() ? $item->getLanguage() : 'en-US'); // @todo : style:text-underline-style $objWriter->endElement(); $objWriter->endElement(); } } $objWriter->endElement(); //=============================================== // Body //=============================================== // office:body $objWriter->startElement('office:body'); // office:presentation $objWriter->startElement('office:presentation'); // Write slides $slideCount = $this->getPresentation()->getSlideCount(); $this->shapeId = 0; for ($i = 0; $i < $slideCount; ++$i) { $pSlide = $this->getPresentation()->getSlide($i); $objWriter->startElement('draw:page'); $name = $pSlide->getName(); if (!is_null($name)) { $objWriter->writeAttribute('draw:name', $name); } $objWriter->writeAttribute('draw:master-page-name', 'Standard'); $objWriter->writeAttribute('draw:style-name', 'stylePage' . $i); // Images $shapes = $pSlide->getShapeCollection(); foreach ($shapes as $shape) { // Increment $this->shapeId ++$this->shapeId; // Check type if ($shape instanceof RichText) { $this->writeShapeTxt($objWriter, $shape); } elseif ($shape instanceof Table) { $this->writeShapeTable($objWriter, $shape); } elseif ($shape instanceof Line) { $this->writeShapeLine($objWriter, $shape); } elseif ($shape instanceof Chart) { $this->writeShapeChart($objWriter, $shape); } elseif ($shape instanceof Media) { $this->writeShapeMedia($objWriter, $shape); } elseif ($shape instanceof ShapeDrawing\AbstractDrawingAdapter) { $this->writeShapeDrawing($objWriter, $shape); } elseif ($shape instanceof Group) { $this->writeShapeGroup($objWriter, $shape); } elseif ($shape instanceof Comment) { $this->writeShapeComment($objWriter, $shape); } } // Slide Note if ($pSlide->getNote() instanceof Note) { $this->writeSlideNote($objWriter, $pSlide->getNote()); } $objWriter->endElement(); } if ($this->getPresentation()->getPresentationProperties()->isLoopContinuouslyUntilEsc()) { $objWriter->startElement('presentation:settings'); $objWriter->writeAttribute('presentation:endless', 'true'); $objWriter->writeAttribute('presentation:pause', 'P0s'); $objWriter->writeAttribute('presentation:mouse-visible', 'false'); $objWriter->endElement(); } // > office:presentation $objWriter->endElement(); // > office:body $objWriter->endElement(); // > office:document-content $objWriter->endElement(); // Return return $objWriter->getData(); }
/** * @return \PhpOffice\Common\Adapter\Zip\ZipInterface * @throws \Exception */ public function render() { // Create XML writer $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY); // XML header $objWriter->startDocument('1.0', 'UTF-8', 'yes'); // Types $objWriter->startElement('Types'); $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/package/2006/content-types'); // Rels $this->writeDefaultContentType($objWriter, 'rels', 'application/vnd.openxmlformats-package.relationships+xml'); // XML $this->writeDefaultContentType($objWriter, 'xml', 'application/xml'); // Presentation $this->writeOverrideContentType($objWriter, '/ppt/presentation.xml', 'application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml'); // PptProps $this->writeOverrideContentType($objWriter, '/ppt/presProps.xml', 'application/vnd.openxmlformats-officedocument.presentationml.presProps+xml'); $this->writeOverrideContentType($objWriter, '/ppt/tableStyles.xml', 'application/vnd.openxmlformats-officedocument.presentationml.tableStyles+xml'); $this->writeOverrideContentType($objWriter, '/ppt/viewProps.xml', 'application/vnd.openxmlformats-officedocument.presentationml.viewProps+xml'); // DocProps $this->writeOverrideContentType($objWriter, '/docProps/app.xml', 'application/vnd.openxmlformats-officedocument.extended-properties+xml'); $this->writeOverrideContentType($objWriter, '/docProps/core.xml', 'application/vnd.openxmlformats-package.core-properties+xml'); $this->writeOverrideContentType($objWriter, '/docProps/custom.xml', 'application/vnd.openxmlformats-officedocument.custom-properties+xml'); // Slide masters $sldLayoutNr = 0; $sldLayoutId = time() + 689016272; // requires minimum value of 2 147 483 648 foreach ($this->oPresentation->getAllMasterSlides() as $idx => $oSlideMaster) { $oSlideMaster->setRelsIndex($idx + 1); $this->writeOverrideContentType($objWriter, '/ppt/slideMasters/slideMaster' . $oSlideMaster->getRelsIndex() . '.xml', 'application/vnd.openxmlformats-officedocument.presentationml.slideMaster+xml'); $this->writeOverrideContentType($objWriter, '/ppt/theme/theme' . $oSlideMaster->getRelsIndex() . '.xml', 'application/vnd.openxmlformats-officedocument.theme+xml'); foreach ($oSlideMaster->getAllSlideLayouts() as $oSlideLayout) { $oSlideLayout->layoutNr = ++$sldLayoutNr; $oSlideLayout->layoutId = ++$sldLayoutId; $this->writeOverrideContentType($objWriter, '/ppt/slideLayouts/slideLayout' . $oSlideLayout->layoutNr . '.xml', 'application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml'); } } // Slides $slideCount = $this->oPresentation->getSlideCount(); for ($i = 0; $i < $slideCount; ++$i) { $this->writeOverrideContentType($objWriter, '/ppt/slides/slide' . ($i + 1) . '.xml', 'application/vnd.openxmlformats-officedocument.presentationml.slide+xml'); if ($this->oPresentation->getSlide($i)->getNote()->getShapeCollection()->count() > 0) { $this->writeOverrideContentType($objWriter, '/ppt/notesSlides/notesSlide' . ($i + 1) . '.xml', 'application/vnd.openxmlformats-officedocument.presentationml.notesSlide+xml'); } } // Add media content-types $aMediaContentTypes = array(); // GIF, JPEG, PNG $aMediaContentTypes['gif'] = 'image/gif'; $aMediaContentTypes['jpg'] = 'image/jpeg'; $aMediaContentTypes['jpeg'] = 'image/jpeg'; $aMediaContentTypes['png'] = 'image/png'; foreach ($aMediaContentTypes as $key => $value) { $this->writeDefaultContentType($objWriter, $key, $value); } // XLSX $this->writeDefaultContentType($objWriter, 'xlsx', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); // Other media content types $mediaCount = $this->getDrawingHashTable()->count(); for ($i = 0; $i < $mediaCount; ++$i) { $shapeIndex = $this->getDrawingHashTable()->getByIndex($i); if ($shapeIndex instanceof ShapeChart) { // Chart content type $this->writeOverrideContentType($objWriter, '/ppt/charts/chart' . $shapeIndex->getImageIndex() . '.xml', 'application/vnd.openxmlformats-officedocument.drawingml.chart+xml'); } else { $extension = strtolower($shapeIndex->getExtension()); $mimeType = $shapeIndex->getMimeType(); if (!isset($aMediaContentTypes[$extension])) { $aMediaContentTypes[$extension] = $mimeType; $this->writeDefaultContentType($objWriter, $extension, $mimeType); } } } $objWriter->endElement(); $this->oZip->addFromString('[Content_Types].xml', $objWriter->getData()); return $this->oZip; }
/** * 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(); }
/** * @return ZipInterface */ public function render() { // Create XML writer $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY); // XML header $objWriter->startDocument('1.0', 'UTF-8'); // manifest:manifest $objWriter->startElement('manifest:manifest'); $objWriter->writeAttribute('xmlns:manifest', 'urn:oasis:names:tc:opendocument:xmlns:manifest:1.0'); $objWriter->writeAttribute('manifest:version', '1.2'); // manifest:file-entry $objWriter->startElement('manifest:file-entry'); $objWriter->writeAttribute('manifest:media-type', 'application/vnd.oasis.opendocument.presentation'); $objWriter->writeAttribute('manifest:full-path', '/'); $objWriter->writeAttribute('manifest:version', '1.2'); $objWriter->endElement(); // manifest:file-entry $objWriter->startElement('manifest:file-entry'); $objWriter->writeAttribute('manifest:media-type', 'text/xml'); $objWriter->writeAttribute('manifest:full-path', 'content.xml'); $objWriter->endElement(); // manifest:file-entry $objWriter->startElement('manifest:file-entry'); $objWriter->writeAttribute('manifest:media-type', 'text/xml'); $objWriter->writeAttribute('manifest:full-path', 'meta.xml'); $objWriter->endElement(); // manifest:file-entry $objWriter->startElement('manifest:file-entry'); $objWriter->writeAttribute('manifest:media-type', 'text/xml'); $objWriter->writeAttribute('manifest:full-path', 'styles.xml'); $objWriter->endElement(); // Charts foreach ($this->getArrayChart() as $key => $shape) { $objWriter->startElement('manifest:file-entry'); $objWriter->writeAttribute('manifest:media-type', 'application/vnd.oasis.opendocument.chart'); $objWriter->writeAttribute('manifest:full-path', 'Object ' . $key . '/'); $objWriter->endElement(); $objWriter->startElement('manifest:file-entry'); $objWriter->writeAttribute('manifest:media-type', 'text/xml'); $objWriter->writeAttribute('manifest:full-path', 'Object ' . $key . '/content.xml'); $objWriter->endElement(); } $arrMedia = array(); for ($i = 0; $i < $this->getDrawingHashTable()->count(); ++$i) { $shape = $this->getDrawingHashTable()->getByIndex($i); if (!$shape instanceof ShapeDrawing\AbstractDrawingAdapter) { continue; } $arrMedia[] = $shape->getIndexedFilename(); $objWriter->startElement('manifest:file-entry'); $objWriter->writeAttribute('manifest:media-type', $shape->getMimeType()); $objWriter->writeAttribute('manifest:full-path', 'Pictures/' . $shape->getIndexedFilename()); $objWriter->endElement(); } foreach ($this->getPresentation()->getAllSlides() as $numSlide => $oSlide) { $oBkgImage = $oSlide->getBackground(); if ($oBkgImage instanceof Image) { $arrayImage = getimagesize($oBkgImage->getPath()); $mimeType = image_type_to_mime_type($arrayImage[2]); $objWriter->startElement('manifest:file-entry'); $objWriter->writeAttribute('manifest:media-type', $mimeType); $objWriter->writeAttribute('manifest:full-path', 'Pictures/' . str_replace(' ', '_', $oBkgImage->getIndexedFilename($numSlide))); $objWriter->endElement(); } } if ($this->getPresentation()->getPresentationProperties()->getThumbnailPath()) { $pathThumbnail = $this->getPresentation()->getPresentationProperties()->getThumbnailPath(); // Size : 128x128 pixel // PNG : 8bit, non-interlaced with full alpha transparency $gdImage = imagecreatefromstring(file_get_contents($pathThumbnail)); if ($gdImage) { imagedestroy($gdImage); $objWriter->startElement('manifest:file-entry'); $objWriter->writeAttribute('manifest:media-type', 'image/png'); $objWriter->writeAttribute('manifest:full-path', 'Thumbnails/thumbnail.png'); $objWriter->endElement(); } } $objWriter->endElement(); $this->getZip()->addFromString('META-INF/manifest.xml', $objWriter->getData()); return $this->getZip(); }
/** * 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(); }
/** * Write chart relationships to XML format * * @param \PhpOffice\PhpPresentation\Shape\Chart $pChart * @return string XML Output * @throws \Exception */ public function writeChartRelationships(Chart $pChart) { // Create XML writer $objWriter = new XMLWriter(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'); // Write spreadsheet relationship? if ($pChart->hasIncludedSpreadsheet()) { $this->writeRelationship($objWriter, 1, 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/package', '../embeddings/' . $pChart->getIndexedFilename() . '.xlsx'); } $objWriter->endElement(); // Return return $objWriter->getData(); }
/** * Write Meta file to XML format * * @return string XML Output * @throws \Exception */ protected function writePart() { // Create XML writer $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY); $objWriter->startDocument('1.0', 'UTF-8'); // office:document-meta $objWriter->startElement('office:document-styles'); $objWriter->writeAttribute('xmlns:office', 'urn:oasis:names:tc:opendocument:xmlns:office:1.0'); $objWriter->writeAttribute('xmlns:style', 'urn:oasis:names:tc:opendocument:xmlns:style:1.0'); $objWriter->writeAttribute('xmlns:text', 'urn:oasis:names:tc:opendocument:xmlns:text:1.0'); $objWriter->writeAttribute('xmlns:table', 'urn:oasis:names:tc:opendocument:xmlns:table:1.0'); $objWriter->writeAttribute('xmlns:draw', 'urn:oasis:names:tc:opendocument:xmlns:drawing:1.0'); $objWriter->writeAttribute('xmlns:fo', 'urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0'); $objWriter->writeAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink'); $objWriter->writeAttribute('xmlns:dc', 'http://purl.org/dc/elements/1.1/'); $objWriter->writeAttribute('xmlns:meta', 'urn:oasis:names:tc:opendocument:xmlns:meta:1.0'); $objWriter->writeAttribute('xmlns:number', 'urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0'); $objWriter->writeAttribute('xmlns:presentation', 'urn:oasis:names:tc:opendocument:xmlns:presentation:1.0'); $objWriter->writeAttribute('xmlns:svg', 'urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0'); $objWriter->writeAttribute('xmlns:chart', 'urn:oasis:names:tc:opendocument:xmlns:chart:1.0'); $objWriter->writeAttribute('xmlns:dr3d', 'urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0'); $objWriter->writeAttribute('xmlns:math', 'http://www.w3.org/1998/Math/MathML'); $objWriter->writeAttribute('xmlns:form', 'urn:oasis:names:tc:opendocument:xmlns:form:1.0'); $objWriter->writeAttribute('xmlns:script', 'urn:oasis:names:tc:opendocument:xmlns:script:1.0'); $objWriter->writeAttribute('xmlns:ooo', 'http://openoffice.org/2004/office'); $objWriter->writeAttribute('xmlns:ooow', 'http://openoffice.org/2004/writer'); $objWriter->writeAttribute('xmlns:oooc', 'http://openoffice.org/2004/calc'); $objWriter->writeAttribute('xmlns:dom', 'http://www.w3.org/2001/xml-events'); $objWriter->writeAttribute('xmlns:smil', 'urn:oasis:names:tc:opendocument:xmlns:smil-compatible:1.0'); $objWriter->writeAttribute('xmlns:anim', 'urn:oasis:names:tc:opendocument:xmlns:animation:1.0'); $objWriter->writeAttribute('xmlns:rpt', 'http://openoffice.org/2005/report'); $objWriter->writeAttribute('xmlns:of', 'urn:oasis:names:tc:opendocument:xmlns:of:1.2'); $objWriter->writeAttribute('xmlns:xhtml', 'http://www.w3.org/1999/xhtml'); $objWriter->writeAttribute('xmlns:grddl', 'http://www.w3.org/2003/g/data-view#'); $objWriter->writeAttribute('xmlns:officeooo', 'http://openoffice.org/2009/office'); $objWriter->writeAttribute('xmlns:tableooo', 'http://openoffice.org/2009/table'); $objWriter->writeAttribute('xmlns:drawooo', 'http://openoffice.org/2010/draw'); $objWriter->writeAttribute('xmlns:css3t', 'http://www.w3.org/TR/css3-text/'); $objWriter->writeAttribute('office:version', '1.2'); // Variables $stylePageLayout = $this->getPresentation()->getLayout()->getDocumentLayout(); if (empty($stylePageLayout)) { $stylePageLayout = 'sPL0'; } // office:styles $objWriter->startElement('office:styles'); // style:style $objWriter->startElement('style:style'); $objWriter->writeAttribute('style:name', 'sPres0'); $objWriter->writeAttribute('style:display-name', 'sPres0'); $objWriter->writeAttribute('style:family', 'presentation'); // style:graphic-properties $objWriter->startElement('style:graphic-properties'); $objWriter->writeAttribute('draw:fill-color', '#ffffff'); // > style:graphic-properties $objWriter->endElement(); // > style:style $objWriter->endElement(); foreach ($this->getPresentation()->getAllSlides() as $keySlide => $oSlide) { foreach ($oSlide->getShapeCollection() as $shape) { if ($shape instanceof Table) { $this->writeTableStyle($objWriter, $shape); } elseif ($shape instanceof Group) { $this->writeGroupStyle($objWriter, $shape); } elseif ($shape instanceof RichText) { $this->writeRichTextStyle($objWriter, $shape); } } $oBkgImage = $oSlide->getBackground(); if ($oBkgImage instanceof Image) { $this->writeBackgroundStyle($objWriter, $oBkgImage, $keySlide); } } // > office:styles $objWriter->endElement(); // office:automatic-styles $objWriter->startElement('office:automatic-styles'); // style:page-layout $objWriter->startElement('style:page-layout'); $objWriter->writeAttribute('style:name', $stylePageLayout); // style:page-layout-properties $objWriter->startElement('style:page-layout-properties'); $objWriter->writeAttribute('fo:margin-top', '0cm'); $objWriter->writeAttribute('fo:margin-bottom', '0cm'); $objWriter->writeAttribute('fo:margin-left', '0cm'); $objWriter->writeAttribute('fo:margin-right', '0cm'); $objWriter->writeAttribute('fo:page-width', Text::numberFormat(CommonDrawing::pixelsToCentimeters(CommonDrawing::emuToPixels($this->getPresentation()->getLayout()->getCX())), 1) . 'cm'); $objWriter->writeAttribute('fo:page-height', Text::numberFormat(CommonDrawing::pixelsToCentimeters(CommonDrawing::emuToPixels($this->getPresentation()->getLayout()->getCY())), 1) . 'cm'); $printOrientation = 'portrait'; if ($this->getPresentation()->getLayout()->getCX() > $this->getPresentation()->getLayout()->getCY()) { $printOrientation = 'landscape'; } $objWriter->writeAttribute('style:print-orientation', $printOrientation); $objWriter->endElement(); $objWriter->endElement(); $objWriter->endElement(); // office:master-styles $objWriter->startElement('office:master-styles'); // style:master-page $objWriter->startElement('style:master-page'); $objWriter->writeAttribute('style:name', 'Standard'); $objWriter->writeAttribute('style:display-name', 'Standard'); $objWriter->writeAttribute('style:page-layout-name', $stylePageLayout); $objWriter->writeAttribute('draw:style-name', 'sPres0'); $objWriter->endElement(); $objWriter->endElement(); $objWriter->endElement(); // Return return $objWriter->getData(); }
/** * @return \PhpOffice\Common\Adapter\Zip\ZipInterface */ public function render() { // Create XML writer $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY); // XML header $objWriter->startDocument('1.0', 'UTF-8', 'yes'); // p:presentation $objWriter->startElement('p:presentation'); $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:sldMasterIdLst $objWriter->startElement('p:sldMasterIdLst'); // Add slide masters $relationId = 1; $slideMasterId = 2147483648; $countMasterSlides = count($this->oPresentation->getAllMasterSlides()); for ($inc = 1; $inc <= $countMasterSlides; $inc++) { // p:sldMasterId $objWriter->startElement('p:sldMasterId'); $objWriter->writeAttribute('id', $slideMasterId); $objWriter->writeAttribute('r:id', 'rId' . $relationId++); $objWriter->endElement(); // Increase identifier $slideMasterId += 12; } $objWriter->endElement(); // theme $relationId++; // p:sldIdLst $objWriter->startElement('p:sldIdLst'); // Write slides $slideCount = $this->oPresentation->getSlideCount(); for ($i = 0; $i < $slideCount; ++$i) { // p:sldId $objWriter->startElement('p:sldId'); $objWriter->writeAttribute('id', $i + 256); $objWriter->writeAttribute('r:id', 'rId' . ($i + $relationId)); $objWriter->endElement(); } $objWriter->endElement(); // p:sldSz $objWriter->startElement('p:sldSz'); $objWriter->writeAttribute('cx', $this->oPresentation->getLayout()->getCX()); $objWriter->writeAttribute('cy', $this->oPresentation->getLayout()->getCY()); if ($this->oPresentation->getLayout()->getDocumentLayout() != DocumentLayout::LAYOUT_CUSTOM) { $objWriter->writeAttribute('type', $this->oPresentation->getLayout()->getDocumentLayout()); } $objWriter->endElement(); // p:notesSz $objWriter->startElement('p:notesSz'); $objWriter->writeAttribute('cx', '6858000'); $objWriter->writeAttribute('cy', '9144000'); $objWriter->endElement(); $objWriter->writeRaw('<p:defaultTextStyle> <a:defPPr> <a:defRPr lang="fr-FR"/> </a:defPPr> <a:lvl1pPr algn="l" defTabSz="914400" eaLnBrk="1" hangingPunct="1" latinLnBrk="0" marL="0" rtl="0"> <a:defRPr kern="1200" sz="1800"> <a:solidFill> <a:schemeClr val="tx1"/> </a:solidFill> <a:latin typeface="+mn-lt"/> <a:ea typeface="+mn-ea"/> <a:cs typeface="+mn-cs"/> </a:defRPr> </a:lvl1pPr> <a:lvl2pPr algn="l" defTabSz="914400" eaLnBrk="1" hangingPunct="1" latinLnBrk="0" marL="457200" rtl="0"> <a:defRPr kern="1200" sz="1800"> <a:solidFill> <a:schemeClr val="tx1"/> </a:solidFill> <a:latin typeface="+mn-lt"/> <a:ea typeface="+mn-ea"/> <a:cs typeface="+mn-cs"/> </a:defRPr> </a:lvl2pPr> <a:lvl3pPr algn="l" defTabSz="914400" eaLnBrk="1" hangingPunct="1" latinLnBrk="0" marL="914400" rtl="0"> <a:defRPr kern="1200" sz="1800"> <a:solidFill> <a:schemeClr val="tx1"/> </a:solidFill> <a:latin typeface="+mn-lt"/> <a:ea typeface="+mn-ea"/> <a:cs typeface="+mn-cs"/> </a:defRPr> </a:lvl3pPr> <a:lvl4pPr algn="l" defTabSz="914400" eaLnBrk="1" hangingPunct="1" latinLnBrk="0" marL="1371600" rtl="0"> <a:defRPr kern="1200" sz="1800"> <a:solidFill> <a:schemeClr val="tx1"/> </a:solidFill> <a:latin typeface="+mn-lt"/> <a:ea typeface="+mn-ea"/> <a:cs typeface="+mn-cs"/> </a:defRPr> </a:lvl4pPr> <a:lvl5pPr algn="l" defTabSz="914400" eaLnBrk="1" hangingPunct="1" latinLnBrk="0" marL="1828800" rtl="0"> <a:defRPr kern="1200" sz="1800"> <a:solidFill> <a:schemeClr val="tx1"/> </a:solidFill> <a:latin typeface="+mn-lt"/> <a:ea typeface="+mn-ea"/> <a:cs typeface="+mn-cs"/> </a:defRPr> </a:lvl5pPr> <a:lvl6pPr algn="l" defTabSz="914400" eaLnBrk="1" hangingPunct="1" latinLnBrk="0" marL="2286000" rtl="0"> <a:defRPr kern="1200" sz="1800"> <a:solidFill> <a:schemeClr val="tx1"/> </a:solidFill> <a:latin typeface="+mn-lt"/> <a:ea typeface="+mn-ea"/> <a:cs typeface="+mn-cs"/> </a:defRPr> </a:lvl6pPr> <a:lvl7pPr algn="l" defTabSz="914400" eaLnBrk="1" hangingPunct="1" latinLnBrk="0" marL="2743200" rtl="0"> <a:defRPr kern="1200" sz="1800"> <a:solidFill> <a:schemeClr val="tx1"/> </a:solidFill> <a:latin typeface="+mn-lt"/> <a:ea typeface="+mn-ea"/> <a:cs typeface="+mn-cs"/> </a:defRPr> </a:lvl7pPr> <a:lvl8pPr algn="l" defTabSz="914400" eaLnBrk="1" hangingPunct="1" latinLnBrk="0" marL="3200400" rtl="0"> <a:defRPr kern="1200" sz="1800"> <a:solidFill> <a:schemeClr val="tx1"/> </a:solidFill> <a:latin typeface="+mn-lt"/> <a:ea typeface="+mn-ea"/> <a:cs typeface="+mn-cs"/> </a:defRPr> </a:lvl8pPr> <a:lvl9pPr algn="l" defTabSz="914400" eaLnBrk="1" hangingPunct="1" latinLnBrk="0" marL="3657600" rtl="0"> <a:defRPr kern="1200" sz="1800"> <a:solidFill> <a:schemeClr val="tx1"/> </a:solidFill> <a:latin typeface="+mn-lt"/> <a:ea typeface="+mn-ea"/> <a:cs typeface="+mn-cs"/> </a:defRPr> </a:lvl9pPr> </p:defaultTextStyle> '); $objWriter->endElement(); $this->oZip->addFromString('ppt/presentation.xml', $objWriter->getData()); // Return return $this->oZip; }
/** * @return \PhpOffice\Common\Adapter\Zip\ZipInterface * @throws \Exception */ public function render() { $oLayoutPack = new PowerPoint2007\LayoutPack\PackDefault(); // Create XML writer $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY); // XML header $objWriter->startDocument('1.0', 'UTF-8', 'yes'); // Types $objWriter->startElement('Types'); $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/package/2006/content-types'); // Rels $this->writeDefaultContentType($objWriter, 'rels', 'application/vnd.openxmlformats-package.relationships+xml'); // XML $this->writeDefaultContentType($objWriter, 'xml', 'application/xml'); // Themes $masterSlides = $oLayoutPack->getMasterSlides(); foreach ($masterSlides as $masterSlide) { $this->writeOverrideContentType($objWriter, '/ppt/theme/theme' . $masterSlide['masterid'] . '.xml', 'application/vnd.openxmlformats-officedocument.theme+xml'); } // Presentation $this->writeOverrideContentType($objWriter, '/ppt/presentation.xml', 'application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml'); // PptProps $this->writeOverrideContentType($objWriter, '/ppt/presProps.xml', 'application/vnd.openxmlformats-officedocument.presentationml.presProps+xml'); $this->writeOverrideContentType($objWriter, '/ppt/tableStyles.xml', 'application/vnd.openxmlformats-officedocument.presentationml.tableStyles+xml'); $this->writeOverrideContentType($objWriter, '/ppt/viewProps.xml', 'application/vnd.openxmlformats-officedocument.presentationml.viewProps+xml'); // DocProps $this->writeOverrideContentType($objWriter, '/docProps/app.xml', 'application/vnd.openxmlformats-officedocument.extended-properties+xml'); $this->writeOverrideContentType($objWriter, '/docProps/core.xml', 'application/vnd.openxmlformats-package.core-properties+xml'); $this->writeOverrideContentType($objWriter, '/docProps/custom.xml', 'application/vnd.openxmlformats-officedocument.custom-properties+xml'); // Slide masters $masterSlides = $oLayoutPack->getMasterSlides(); foreach ($masterSlides as $masterSlide) { $this->writeOverrideContentType($objWriter, '/ppt/slideMasters/slideMaster' . $masterSlide['masterid'] . '.xml', 'application/vnd.openxmlformats-officedocument.presentationml.slideMaster+xml'); } // Slide layouts $slideLayouts = $oLayoutPack->getLayouts(); $numSlideLayouts = count($slideLayouts); for ($i = 0; $i < $numSlideLayouts; ++$i) { $this->writeOverrideContentType($objWriter, '/ppt/slideLayouts/slideLayout' . ($i + 1) . '.xml', 'application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml'); } // Slides $slideCount = $this->oPresentation->getSlideCount(); for ($i = 0; $i < $slideCount; ++$i) { $this->writeOverrideContentType($objWriter, '/ppt/slides/slide' . ($i + 1) . '.xml', 'application/vnd.openxmlformats-officedocument.presentationml.slide+xml'); if ($this->oPresentation->getSlide($i)->getNote()->getShapeCollection()->count() > 0) { $this->writeOverrideContentType($objWriter, '/ppt/notesSlides/notesSlide' . ($i + 1) . '.xml', 'application/vnd.openxmlformats-officedocument.presentationml.notesSlide+xml'); } } // Add layoutpack content types $otherRelations = $oLayoutPack->getMasterSlideRelations(); foreach ($otherRelations as $otherRelation) { if (strpos($otherRelation['target'], 'http://') !== 0 && $otherRelation['contentType'] != '') { $this->writeOverrideContentType($objWriter, '/ppt/slideMasters/' . $otherRelation['target'], $otherRelation['contentType']); } } $otherRelations = $oLayoutPack->getThemeRelations(); foreach ($otherRelations as $otherRelation) { if (strpos($otherRelation['target'], 'http://') !== 0 && $otherRelation['contentType'] != '') { $this->writeOverrideContentType($objWriter, '/ppt/theme/' . $otherRelation['target'], $otherRelation['contentType']); } } $otherRelations = $oLayoutPack->getLayoutRelations(); foreach ($otherRelations as $otherRelation) { if (strpos($otherRelation['target'], 'http://') !== 0 && $otherRelation['contentType'] != '') { $this->writeOverrideContentType($objWriter, '/ppt/slideLayouts/' . $otherRelation['target'], $otherRelation['contentType']); } } // Add media content-types $aMediaContentTypes = array(); // GIF, JPEG, PNG $aMediaContentTypes['gif'] = 'image/gif'; $aMediaContentTypes['jpg'] = 'image/jpeg'; $aMediaContentTypes['jpeg'] = 'image/jpeg'; $aMediaContentTypes['png'] = 'image/png'; foreach ($aMediaContentTypes as $key => $value) { $this->writeDefaultContentType($objWriter, $key, $value); } // XLSX $this->writeDefaultContentType($objWriter, 'xlsx', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); // Other media content types $mediaCount = $this->getDrawingHashTable()->count(); for ($i = 0; $i < $mediaCount; ++$i) { $extension = ''; $mimeType = ''; $shapeIndex = $this->getDrawingHashTable()->getByIndex($i); if ($shapeIndex instanceof ShapeChart) { // Chart content type $this->writeOverrideContentType($objWriter, '/ppt/charts/chart' . $shapeIndex->getImageIndex() . '.xml', 'application/vnd.openxmlformats-officedocument.drawingml.chart+xml'); } else { if ($shapeIndex instanceof ShapeDrawing) { $extension = strtolower($shapeIndex->getExtension()); $mimeType = $this->getImageMimeType($shapeIndex->getPath()); } elseif ($shapeIndex instanceof MemoryDrawing) { $extension = strtolower($shapeIndex->getMimeType()); $extension = explode('/', $extension); $extension = $extension[1]; $mimeType = $shapeIndex->getMimeType(); } if (!isset($aMediaContentTypes[$extension])) { $aMediaContentTypes[$extension] = $mimeType; $this->writeDefaultContentType($objWriter, $extension, $mimeType); } } } $objWriter->endElement(); $this->oZip->addFromString('[Content_Types].xml', $objWriter->getData()); return $this->oZip; }
/** * 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(); }
/** * 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(); }
/** * @return \PhpOffice\Common\Adapter\Zip\ZipInterface */ public function render() { // Create XML writer $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY); // XML header $objWriter->startDocument('1.0', 'UTF-8', 'yes'); // Properties $objWriter->startElement('Properties'); $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/officeDocument/2006/extended-properties'); $objWriter->writeAttribute('xmlns:vt', 'http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes'); // Application $objWriter->writeElement('Application', 'Microsoft Office PowerPoint'); // Slides $objWriter->writeElement('Slides', $this->getPresentation()->getSlideCount()); // ScaleCrop $objWriter->writeElement('ScaleCrop', 'false'); // HeadingPairs $objWriter->startElement('HeadingPairs'); // Vector $objWriter->startElement('vt:vector'); $objWriter->writeAttribute('size', '4'); $objWriter->writeAttribute('baseType', 'variant'); // Variant $objWriter->startElement('vt:variant'); $objWriter->writeElement('vt:lpstr', 'Theme'); $objWriter->endElement(); // Variant $objWriter->startElement('vt:variant'); $objWriter->writeElement('vt:i4', '1'); $objWriter->endElement(); // Variant $objWriter->startElement('vt:variant'); $objWriter->writeElement('vt:lpstr', 'Slide Titles'); $objWriter->endElement(); // Variant $objWriter->startElement('vt:variant'); $objWriter->writeElement('vt:i4', '1'); $objWriter->endElement(); $objWriter->endElement(); $objWriter->endElement(); // TitlesOfParts $objWriter->startElement('TitlesOfParts'); // Vector $objWriter->startElement('vt:vector'); $objWriter->writeAttribute('size', '1'); $objWriter->writeAttribute('baseType', 'lpstr'); $objWriter->writeElement('vt:lpstr', 'Office Theme'); $objWriter->endElement(); $objWriter->endElement(); // Company $objWriter->writeElement('Company', $this->getPresentation()->getDocumentProperties()->getCompany()); // LinksUpToDate $objWriter->writeElement('LinksUpToDate', 'false'); // SharedDoc $objWriter->writeElement('SharedDoc', 'false'); // HyperlinksChanged $objWriter->writeElement('HyperlinksChanged', 'false'); // AppVersion $objWriter->writeElement('AppVersion', '12.0000'); $objWriter->endElement(); $this->oZip->addFromString('docProps/app.xml', $objWriter->getData()); // Return return $this->oZip; }