/** * Write font faces declaration. * * @param \PhpOffice\Common\XMLWriter $xmlWriter * @return void */ protected function writeFontFaces(XMLWriter $xmlWriter) { $xmlWriter->startElement('office:font-face-decls'); $fontTable = array(); $styles = Style::getStyles(); $numFonts = 0; if (count($styles) > 0) { foreach ($styles as $style) { // Font if ($style instanceof Font) { $numFonts++; $name = $style->getName(); if (!in_array($name, $fontTable)) { $fontTable[] = $name; // style:font-face $xmlWriter->startElement('style:font-face'); $xmlWriter->writeAttribute('style:name', $name); $xmlWriter->writeAttribute('svg:font-family', $name); $xmlWriter->endElement(); } } } } if (!in_array(Settings::getDefaultFontName(), $fontTable)) { $xmlWriter->startElement('style:font-face'); $xmlWriter->writeAttribute('style:name', Settings::getDefaultFontName()); $xmlWriter->writeAttribute('svg:font-family', Settings::getDefaultFontName()); $xmlWriter->endElement(); } $xmlWriter->endElement(); }
/** * 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(); }
/** * Test method exceptions */ public function testMethodExceptions() { $styles = array('Frame' => 'writeAlignment', 'Line' => 'writeStroke', 'TextBox' => 'writeBorder'); foreach ($styles as $style => $method) { $objectClass = 'PhpOffice\\PhpWord\\Writer\\Word2007\\Style\\' . $style; $xmlWriter = new XMLWriter(); $object = new $objectClass($xmlWriter); $object->{$method}(); $this->assertEquals('', $xmlWriter->getData()); } }
/** * Test empty styles */ public function testEmptyStyles() { $styles = array('Font', 'Paragraph', 'Image', 'Section', 'Table'); foreach ($styles as $style) { $objectClass = 'PhpOffice\\PhpWord\\Writer\\ODText\\Style\\' . $style; $xmlWriter = new XMLWriter(); $object = new $objectClass($xmlWriter); $object->write(); $this->assertEquals('', $xmlWriter->getData()); } }
/** * Write content types element * * @param \PhpOffice\Common\XMLWriter $xmlWriter XML Writer * @param array $parts * @param boolean $isDefault * @return void */ private function writeContentType(XMLWriter $xmlWriter, $parts, $isDefault) { foreach ($parts as $partName => $contentType) { $partType = $isDefault ? 'Default' : 'Override'; $partAttribute = $isDefault ? 'Extension' : 'PartName'; $xmlWriter->startElement($partType); $xmlWriter->writeAttribute($partAttribute, $partName); $xmlWriter->writeAttribute('ContentType', $contentType); $xmlWriter->endElement(); } }
/** * Test unmatched elements */ public function testUnmatchedElements() { $elements = array('Image', 'Link', 'Table', 'Text', 'Title'); foreach ($elements as $element) { $objectClass = 'PhpOffice\\PhpWord\\Writer\\ODText\\Element\\' . $element; $xmlWriter = new XMLWriter(); $newElement = new \PhpOffice\PhpWord\Element\PageBreak(); $object = new $objectClass($xmlWriter, $newElement); $object->write(); $this->assertEquals('', $xmlWriter->getData()); } }
/** * Test unmatched element */ public function testUnmatchedElements() { $elements = array('CheckBox', 'Container', 'Footnote', 'Image', 'Link', 'ListItem', 'ListItemRun', 'Object', 'PreserveText', 'Table', 'Text', 'TextBox', 'TextBreak', 'Title', 'TOC', 'Field', 'Line', 'Shape', 'Chart', 'FormField', 'SDT'); foreach ($elements as $element) { $objectClass = 'PhpOffice\\PhpWord\\Writer\\Word2007\\Element\\' . $element; $xmlWriter = new XMLWriter(); $newElement = new \PhpOffice\PhpWord\Element\PageBreak(); $object = new $objectClass($xmlWriter, $newElement); $object->write(); $this->assertEquals('', $xmlWriter->getData()); } }
/** */ public function testConstruct() { // Memory $object = new XMLWriter(); $object->startElement('element'); $object->text('AAA'); $object->endElement(); $this->assertEquals('<element>AAA</element>' . chr(10), $object->getData()); // Disk $object = new XMLWriter(XMLWriter::STORAGE_DISK); $object->startElement('element'); $object->text('BBB'); $object->endElement(); $this->assertEquals('<element>BBB</element>' . chr(10), $object->getData()); }
/** * Write watermark element. * * @return void */ private function writeWatermark(XMLWriter $xmlWriter, ImageElement $element) { $rId = $element->getRelationId(); $style = $element->getStyle(); $style->setPositioning('absolute'); $styleWriter = new ImageStyleWriter($xmlWriter, $style); $xmlWriter->startElement('w:p'); $xmlWriter->startElement('w:r'); $xmlWriter->startElement('w:pict'); $xmlWriter->startElement('v:shape'); $xmlWriter->writeAttribute('type', '#_x0000_t75'); $styleWriter->write(); $xmlWriter->startElement('v:imagedata'); $xmlWriter->writeAttribute('r:id', 'rId' . $rId); $xmlWriter->writeAttribute('o:title', ''); $xmlWriter->endElement(); // v:imagedata $xmlWriter->endElement(); // v:shape $xmlWriter->endElement(); // w:pict $xmlWriter->endElement(); // w:r $xmlWriter->endElement(); // w:p }
/** * End w:p DOM element. * * @return void */ protected function endElementP() { if (!$this->withoutP) { $this->xmlWriter->endElement(); // w:p } }
/** * 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(); }
/** * Write indivual setting, recursive to any child settings. * * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param string $settingKey * @param array|string $settingValue * @return void */ protected function writeSetting($xmlWriter, $settingKey, $settingValue) { if ($settingValue == '') { $xmlWriter->writeElement($settingKey); } else { $xmlWriter->startElement($settingKey); /** @var array $settingValue Type hint */ foreach ($settingValue as $childKey => $childValue) { if ($childKey == '@attributes') { foreach ($childValue as $key => $val) { $xmlWriter->writeAttribute($key, $val); } } else { $this->writeSetting($xmlWriter, $childKey, $childValue); } } $xmlWriter->endElement(); } }
/** * 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 side. * * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param string $side * @param int $width * @param string $color * @return void */ private function writeSide(XMLWriter $xmlWriter, $side, $width, $color = null) { $xmlWriter->startElement('w:' . $side); if (!empty($this->colors)) { if ($color === null && !empty($this->attributes)) { if (isset($this->attributes['defaultColor'])) { $color = $this->attributes['defaultColor']; } } $xmlWriter->writeAttribute('w:val', 'single'); $xmlWriter->writeAttribute('w:sz', $width); $xmlWriter->writeAttribute('w:color', $color); if (!empty($this->attributes)) { if (isset($this->attributes['space'])) { $xmlWriter->writeAttribute('w:space', $this->attributes['space']); } } } else { $xmlWriter->writeAttribute('w:w', $width); $xmlWriter->writeAttribute('w:type', 'dxa'); } $xmlWriter->endElement(); }
/** * 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(); }
/** * 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'); // 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(); }
/** * @param Chart $chart */ private function writeWallStyle(Chart $chart) { $chartType = $chart->getPlotArea()->getType(); // style:style $this->xmlContent->startElement('style:style'); $this->xmlContent->writeAttribute('style:name', 'styleWall'); $this->xmlContent->writeAttribute('style:family', 'chart'); // style:chart-properties $this->xmlContent->startElement('style:graphic-properties'); //@todo : Permit edit color and size border of wall if ($chartType instanceof Line || $chartType instanceof Scatter) { $this->xmlContent->writeAttribute('draw:fill', 'solid'); $this->xmlContent->writeAttribute('draw:fill-color', '#FFFFFF'); } else { $this->xmlContent->writeAttribute('draw:fill', 'none'); $this->xmlContent->writeAttribute('draw:stroke', 'solid'); $this->xmlContent->writeAttribute('svg:stroke-width', '0.026cm'); $this->xmlContent->writeAttribute('svg:stroke-color', '#878787'); } // > style:chart-properties $this->xmlContent->endElement(); // > style:style $this->xmlContent->endElement(); }
/** * 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(); }
/** * @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; }
/** * Write shading. * * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Style\Table $style * @return void */ private function writeShading(XMLWriter $xmlWriter, TableStyle $style) { if (null !== $style->getShading()) { $xmlWriter->startElement('w:tcPr'); $styleWriter = new Shading($xmlWriter, $style->getShading()); $styleWriter->write(); $xmlWriter->endElement(); } }
/** * @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(); }
/** * Write rectangle. * * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Style\Shape $style * @return void */ private function writeRoundRect(XMLWriter $xmlWriter, ShapeStyle $style) { $xmlWriter->writeAttribute('arcsize', $style->getRoundness()); }
protected function writeStylePartShadow(XMLWriter $objWriter, Shadow $oShadow) { $objWriter->writeAttribute('draw:shadow', 'visible'); $objWriter->writeAttribute('draw:shadow-color', '#' . $oShadow->getColor()->getRGB()); if ($oShadow->getDirection() == 0 || $oShadow->getDirection() == 360) { $objWriter->writeAttribute('draw:shadow-offset-x', CommonDrawing::pixelsToCentimeters($oShadow->getDistance()) . 'cm'); $objWriter->writeAttribute('draw:shadow-offset-y', '0cm'); } elseif ($oShadow->getDirection() == 45) { $objWriter->writeAttribute('draw:shadow-offset-x', CommonDrawing::pixelsToCentimeters($oShadow->getDistance()) . 'cm'); $objWriter->writeAttribute('draw:shadow-offset-y', CommonDrawing::pixelsToCentimeters($oShadow->getDistance()) . 'cm'); } elseif ($oShadow->getDirection() == 90) { $objWriter->writeAttribute('draw:shadow-offset-x', '0cm'); $objWriter->writeAttribute('draw:shadow-offset-y', CommonDrawing::pixelsToCentimeters($oShadow->getDistance()) . 'cm'); } elseif ($oShadow->getDirection() == 135) { $objWriter->writeAttribute('draw:shadow-offset-x', '-' . CommonDrawing::pixelsToCentimeters($oShadow->getDistance()) . 'cm'); $objWriter->writeAttribute('draw:shadow-offset-y', CommonDrawing::pixelsToCentimeters($oShadow->getDistance()) . 'cm'); } elseif ($oShadow->getDirection() == 180) { $objWriter->writeAttribute('draw:shadow-offset-x', '-' . CommonDrawing::pixelsToCentimeters($oShadow->getDistance()) . 'cm'); $objWriter->writeAttribute('draw:shadow-offset-y', '0cm'); } elseif ($oShadow->getDirection() == 225) { $objWriter->writeAttribute('draw:shadow-offset-x', '-' . CommonDrawing::pixelsToCentimeters($oShadow->getDistance()) . 'cm'); $objWriter->writeAttribute('draw:shadow-offset-y', '-' . CommonDrawing::pixelsToCentimeters($oShadow->getDistance()) . 'cm'); } elseif ($oShadow->getDirection() == 270) { $objWriter->writeAttribute('draw:shadow-offset-x', '0cm'); $objWriter->writeAttribute('draw:shadow-offset-y', '-' . CommonDrawing::pixelsToCentimeters($oShadow->getDistance()) . 'cm'); } elseif ($oShadow->getDirection() == 315) { $objWriter->writeAttribute('draw:shadow-offset-x', CommonDrawing::pixelsToCentimeters($oShadow->getDistance()) . 'cm'); $objWriter->writeAttribute('draw:shadow-offset-y', '-' . CommonDrawing::pixelsToCentimeters($oShadow->getDistance()) . 'cm'); } $objWriter->writeAttribute('draw:shadow-opacity', 100 - $oShadow->getAlpha() . '%'); $objWriter->writeAttribute('style:mirror', 'none'); }
/** * 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 relationship * * @param \PhpOffice\Common\XMLWriter $objWriter XML Writer * @param int $pId Relationship ID. rId will be prepended! * @param string $pType Relationship type * @param string $pTarget Relationship target * @param string $pTargetMode Relationship target mode * @throws \Exception */ private function writeRelationship(XMLWriter $objWriter, $pId = 1, $pType = '', $pTarget = '', $pTargetMode = '') { if ($pType != '' && $pTarget != '') { if (strpos($pId, 'rId') === false) { $pId = 'rId' . $pId; } // Write relationship $objWriter->startElement('Relationship'); $objWriter->writeAttribute('Id', $pId); $objWriter->writeAttribute('Type', $pType); $objWriter->writeAttribute('Target', $pTarget); if ($pTargetMode != '') { $objWriter->writeAttribute('TargetMode', $pTargetMode); } $objWriter->endElement(); } else { throw new \Exception("Invalid parameters passed."); } }
/** * Write master style. * * @param \PhpOffice\Common\XMLWriter $xmlWriter * @return void */ private function writeMaster(XMLWriter $xmlWriter) { $xmlWriter->startElement('office:master-styles'); $xmlWriter->startElement('style:master-page'); $xmlWriter->writeAttribute('style:name', 'Standard'); $xmlWriter->writeAttribute('style:page-layout-name', 'Mpm1'); $xmlWriter->endElement(); // style:master-page $xmlWriter->endElement(); // office:master-styles }
/** * @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 cell. * * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Element\Cell $cell * @return void */ private function writeCell(XMLWriter $xmlWriter, CellElement $cell) { $xmlWriter->startElement('w:tc'); // Write style $cellStyle = $cell->getStyle(); if ($cellStyle instanceof CellStyle) { $styleWriter = new CellStyleWriter($xmlWriter, $cellStyle); $styleWriter->setWidth($cell->getWidth()); $styleWriter->write(); } // Write content $containerWriter = new Container($xmlWriter, $cell); $containerWriter->write(); $xmlWriter->endElement(); // w:tc }
/** * Write end section. * * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Element\Section $section * @return void */ private function writeSectionSettings(XMLWriter $xmlWriter, Section $section) { $xmlWriter->startElement('w:sectPr'); // Header reference foreach ($section->getHeaders() as $header) { $rId = $header->getRelationId(); $xmlWriter->startElement('w:headerReference'); $xmlWriter->writeAttribute('w:type', $header->getType()); $xmlWriter->writeAttribute('r:id', 'rId' . $rId); $xmlWriter->endElement(); } // Footer reference foreach ($section->getFooters() as $footer) { $rId = $footer->getRelationId(); $xmlWriter->startElement('w:footerReference'); $xmlWriter->writeAttribute('w:type', $footer->getType()); $xmlWriter->writeAttribute('r:id', 'rId' . $rId); $xmlWriter->endElement(); } // Different first page if ($section->hasDifferentFirstPage()) { $xmlWriter->startElement('w:titlePg'); $xmlWriter->endElement(); } // Section settings $styleWriter = new SectionStyleWriter($xmlWriter, $section->getStyle()); $styleWriter->write(); $xmlWriter->endElement(); // w:sectPr }