/** * Write Title * * @param \PhpOffice\Common\XMLWriter $objWriter XML Writer * @param \PhpOffice\PhpPresentation\Shape\Chart\Title $subject * @throws \Exception */ protected function writeTitle(XMLWriter $objWriter, Title $subject) { // c:title $objWriter->startElement('c:title'); // c:tx $objWriter->startElement('c:tx'); // c:rich $objWriter->startElement('c:rich'); // a:bodyPr $objWriter->writeElement('a:bodyPr', null); // a:lstStyle $objWriter->writeElement('a:lstStyle', null); // a:p $objWriter->startElement('a:p'); // a:pPr $objWriter->startElement('a:pPr'); $objWriter->writeAttribute('algn', $subject->getAlignment()->getHorizontal()); $objWriter->writeAttribute('fontAlgn', $subject->getAlignment()->getVertical()); $objWriter->writeAttribute('marL', CommonDrawing::pixelsToEmu($subject->getAlignment()->getMarginLeft())); $objWriter->writeAttribute('marR', CommonDrawing::pixelsToEmu($subject->getAlignment()->getMarginRight())); $objWriter->writeAttribute('indent', CommonDrawing::pixelsToEmu($subject->getAlignment()->getIndent())); $objWriter->writeAttribute('lvl', $subject->getAlignment()->getLevel()); // a:defRPr $objWriter->writeElement('a:defRPr', null); $objWriter->endElement(); // a:r $objWriter->startElement('a:r'); // a:rPr $objWriter->startElement('a:rPr'); $objWriter->writeAttribute('lang', 'en-US'); $objWriter->writeAttribute('dirty', '0'); $objWriter->writeAttribute('b', $subject->getFont()->isBold() ? 'true' : 'false'); $objWriter->writeAttribute('i', $subject->getFont()->isItalic() ? 'true' : 'false'); $objWriter->writeAttribute('strike', $subject->getFont()->isStrikethrough() ? 'sngStrike' : 'noStrike'); $objWriter->writeAttribute('sz', $subject->getFont()->getSize() * 100); $objWriter->writeAttribute('u', $subject->getFont()->getUnderline()); $objWriter->writeAttributeIf($subject->getFont()->isSuperScript(), 'baseline', '30000'); $objWriter->writeAttributeIf($subject->getFont()->isSubScript(), 'baseline', '-25000'); // Font - a:solidFill $objWriter->startElement('a:solidFill'); $this->writeColor($objWriter, $subject->getFont()->getColor()); $objWriter->endElement(); // Font - a:latin $objWriter->startElement('a:latin'); $objWriter->writeAttribute('typeface', $subject->getFont()->getName()); $objWriter->endElement(); $objWriter->endElement(); // a:t $objWriter->writeElement('a:t', $subject->getText()); $objWriter->endElement(); // a:endParaRPr $objWriter->startElement('a:endParaRPr'); $objWriter->writeAttribute('lang', 'en-US'); $objWriter->writeAttribute('dirty', '0'); $objWriter->endElement(); $objWriter->endElement(); $objWriter->endElement(); $objWriter->endElement(); // Write layout $this->writeLayout($objWriter, $subject); // c:overlay $objWriter->startElement('c:overlay'); $objWriter->writeAttribute('val', '0'); $objWriter->endElement(); $objWriter->endElement(); }
/** * Write polyline. * * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Style\Shape $style * @return void */ private function writePolyline(XMLWriter $xmlWriter, ShapeStyle $style) { $xmlWriter->writeAttributeIf($style->getPoints() !== null, 'points', $style->getPoints()); }
/** */ private function writeTable() { // table:table $this->xmlContent->startElement('table:table'); $this->xmlContent->writeAttribute('table:name', 'table-local'); // table:table-header-columns $this->xmlContent->startElement('table:table-header-columns'); // table:table-column $this->xmlContent->startElement('table:table-column'); // > table:table-column $this->xmlContent->endElement(); // > table:table-header-columns $this->xmlContent->endElement(); // table:table-columns $this->xmlContent->startElement('table:table-columns'); // table:table-column $this->xmlContent->startElement('table:table-column'); if (!empty($this->arrayData)) { $rowFirst = reset($this->arrayData); $this->xmlContent->writeAttribute('table:number-columns-repeated', count($rowFirst) - 1); } // > table:table-column $this->xmlContent->endElement(); // > table:table-columns $this->xmlContent->endElement(); // table:table-header-rows $this->xmlContent->startElement('table:table-header-rows'); // table:table-row $this->xmlContent->startElement('table:table-row'); if (!empty($this->arrayData)) { $rowFirst = reset($this->arrayData); foreach ($rowFirst as $key => $cell) { // table:table-cell $this->xmlContent->startElement('table:table-cell'); if (isset($this->arrayTitle[$key - 1])) { $this->xmlContent->writeAttribute('office:value-type', 'string'); } // text:p $this->xmlContent->startElement('text:p'); if (isset($this->arrayTitle[$key - 1])) { $this->xmlContent->text($this->arrayTitle[$key - 1]); } // > text:p $this->xmlContent->endElement(); // > table:table-cell $this->xmlContent->endElement(); } } // > table:table-row $this->xmlContent->endElement(); // > table:table-header-rows $this->xmlContent->endElement(); // table:table-rows $this->xmlContent->startElement('table:table-rows'); foreach ($this->arrayData as $row) { // table:table-row $this->xmlContent->startElement('table:table-row'); foreach ($row as $cell) { // table:table-cell $this->xmlContent->startElement('table:table-cell'); $cellNumeric = is_numeric($cell); $this->xmlContent->writeAttributeIf(!$cellNumeric, 'office:value-type', 'string'); $this->xmlContent->writeAttributeIf($cellNumeric, 'office:value-type', 'float'); $this->xmlContent->writeAttributeIf($cellNumeric, 'office:value', $cell); // text:p $this->xmlContent->startElement('text:p'); $this->xmlContent->text($cell); // > text:p $this->xmlContent->endElement(); // > table:table-cell $this->xmlContent->endElement(); } // > table:table-row $this->xmlContent->endElement(); } // > table:table-rows $this->xmlContent->endElement(); // > table:table $this->xmlContent->endElement(); }
/** * Write chart * * @param \PhpOffice\Common\XMLWriter $objWriter XML Writer * @param \PhpOffice\PhpPresentation\Shape\Chart $shape * @param int $shapeId */ protected function writeShapeChart(XMLWriter $objWriter, ShapeChart $shape, $shapeId) { // p:graphicFrame $objWriter->startElement('p:graphicFrame'); // p:nvGraphicFramePr $objWriter->startElement('p:nvGraphicFramePr'); // p:cNvPr $objWriter->startElement('p:cNvPr'); $objWriter->writeAttribute('id', $shapeId); $objWriter->writeAttribute('name', $shape->getName()); $objWriter->writeAttribute('descr', $shape->getDescription()); $objWriter->endElement(); // p:cNvGraphicFramePr $objWriter->writeElement('p:cNvGraphicFramePr', null); // p:nvPr $objWriter->writeElement('p:nvPr', null); $objWriter->endElement(); // p:xfrm $objWriter->startElement('p:xfrm'); $objWriter->writeAttributeIf($shape->getRotation() != 0, 'rot', CommonDrawing::degreesToAngle($shape->getRotation())); // a:off $objWriter->startElement('a:off'); $objWriter->writeAttribute('x', CommonDrawing::pixelsToEmu($shape->getOffsetX())); $objWriter->writeAttribute('y', CommonDrawing::pixelsToEmu($shape->getOffsetY())); $objWriter->endElement(); // a:ext $objWriter->startElement('a:ext'); $objWriter->writeAttribute('cx', CommonDrawing::pixelsToEmu($shape->getWidth())); $objWriter->writeAttribute('cy', CommonDrawing::pixelsToEmu($shape->getHeight())); $objWriter->endElement(); $objWriter->endElement(); // a:graphic $objWriter->startElement('a:graphic'); // a:graphicData $objWriter->startElement('a:graphicData'); $objWriter->writeAttribute('uri', 'http://schemas.openxmlformats.org/drawingml/2006/chart'); // c:chart $objWriter->startElement('c:chart'); $objWriter->writeAttribute('xmlns:c', 'http://schemas.openxmlformats.org/drawingml/2006/chart'); $objWriter->writeAttribute('xmlns:r', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships'); $objWriter->writeAttribute('r:id', $shape->relationId); $objWriter->endElement(); $objWriter->endElement(); $objWriter->endElement(); $objWriter->endElement(); }
/** * 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 level font. * * @since 0.11.0 * * @param \PhpOffice\Common\XMLWriter $xmlWriter * @param \PhpOffice\PhpWord\Style\NumberingLevel $level * @return void * @todo Use font style writer */ private function writeFont(XMLWriter $xmlWriter, NumberingLevel $level) { $font = $level->getFont(); $hint = $level->getHint(); $xmlWriter->startElement('w:rPr'); $xmlWriter->startElement('w:rFonts'); $xmlWriter->writeAttributeIf($font !== null, 'w:ascii', $font); $xmlWriter->writeAttributeIf($font !== null, 'w:hAnsi', $font); $xmlWriter->writeAttributeIf($font !== null, 'w:cs', $font); $xmlWriter->writeAttributeIf($hint !== null, 'w:hint', $hint); $xmlWriter->endElement(); // w:rFonts $xmlWriter->endElement(); // w:rPr }
/** * Write style of a slide * @param XMLWriter $objWriter * @param Slide $slide * @param int $incPage */ public function writeStyleSlide(XMLWriter $objWriter, Slide $slide, $incPage) { // style:style $objWriter->startElement('style:style'); $objWriter->writeAttribute('style:family', 'drawing-page'); $objWriter->writeAttribute('style:name', 'stylePage' . $incPage); // style:style/style:drawing-page-properties $objWriter->startElement('style:drawing-page-properties'); $objWriter->writeAttributeIf(!$slide->isVisible(), 'presentation:visibility', 'hidden'); if (!is_null($oTransition = $slide->getTransition())) { $objWriter->writeAttribute('presentation:duration', 'PT' . number_format($oTransition->getAdvanceTimeTrigger() / 1000, 6, '.', '') . 'S'); $objWriter->writeAttributeIf($oTransition->hasManualTrigger(), 'presentation:transition-type', 'manual'); $objWriter->writeAttributeIf($oTransition->hasTimeTrigger(), 'presentation:transition-type', 'automatic'); switch ($oTransition->getSpeed()) { case Transition::SPEED_FAST: $objWriter->writeAttribute('presentation:transition-speed', 'fast'); break; case Transition::SPEED_MEDIUM: $objWriter->writeAttribute('presentation:transition-speed', 'medium'); break; case Transition::SPEED_SLOW: $objWriter->writeAttribute('presentation:transition-speed', 'slow'); break; } /** * http://docs.oasis-open.org/office/v1.2/os/OpenDocument-v1.2-os-part1.html#property-presentation_transition-style */ switch ($oTransition->getTransitionType()) { case Transition::TRANSITION_BLINDS_HORIZONTAL: $objWriter->writeAttribute('presentation:transition-style', 'horizontal-stripes'); break; case Transition::TRANSITION_BLINDS_VERTICAL: $objWriter->writeAttribute('presentation:transition-style', 'vertical-stripes'); break; case Transition::TRANSITION_CHECKER_HORIZONTAL: $objWriter->writeAttribute('presentation:transition-style', 'horizontal-checkerboard'); break; case Transition::TRANSITION_CHECKER_VERTICAL: $objWriter->writeAttribute('presentation:transition-style', 'vertical-checkerboard'); break; case Transition::TRANSITION_CIRCLE_HORIZONTAL: $objWriter->writeAttribute('presentation:transition-style', 'none'); break; case Transition::TRANSITION_CIRCLE_VERTICAL: $objWriter->writeAttribute('presentation:transition-style', 'none'); break; case Transition::TRANSITION_COMB_HORIZONTAL: $objWriter->writeAttribute('presentation:transition-style', 'none'); break; case Transition::TRANSITION_COMB_VERTICAL: $objWriter->writeAttribute('presentation:transition-style', 'none'); break; case Transition::TRANSITION_COVER_DOWN: $objWriter->writeAttribute('presentation:transition-style', 'uncover-to-bottom'); break; case Transition::TRANSITION_COVER_LEFT: $objWriter->writeAttribute('presentation:transition-style', 'uncover-to-left'); break; case Transition::TRANSITION_COVER_LEFT_DOWN: $objWriter->writeAttribute('presentation:transition-style', 'uncover-to-lowerleft'); break; case Transition::TRANSITION_COVER_LEFT_UP: $objWriter->writeAttribute('presentation:transition-style', 'uncover-to-upperleft'); break; case Transition::TRANSITION_COVER_RIGHT: $objWriter->writeAttribute('presentation:transition-style', 'uncover-to-right'); break; case Transition::TRANSITION_COVER_RIGHT_DOWN: $objWriter->writeAttribute('presentation:transition-style', 'uncover-to-lowerright'); break; case Transition::TRANSITION_COVER_RIGHT_UP: $objWriter->writeAttribute('presentation:transition-style', 'uncover-to-upperright'); break; case Transition::TRANSITION_COVER_UP: $objWriter->writeAttribute('presentation:transition-style', 'uncover-to-top'); break; case Transition::TRANSITION_CUT: $objWriter->writeAttribute('presentation:transition-style', 'none'); break; case Transition::TRANSITION_DIAMOND: $objWriter->writeAttribute('presentation:transition-style', 'none'); break; case Transition::TRANSITION_DISSOLVE: $objWriter->writeAttribute('presentation:transition-style', 'dissolve'); break; case Transition::TRANSITION_FADE: $objWriter->writeAttribute('presentation:transition-style', 'fade-from-center'); break; case Transition::TRANSITION_NEWSFLASH: $objWriter->writeAttribute('presentation:transition-style', 'none'); break; case Transition::TRANSITION_PLUS: $objWriter->writeAttribute('presentation:transition-style', 'close'); break; case Transition::TRANSITION_PULL_DOWN: $objWriter->writeAttribute('presentation:transition-style', 'stretch-from-bottom'); break; case Transition::TRANSITION_PULL_LEFT: $objWriter->writeAttribute('presentation:transition-style', 'stretch-from-left'); break; case Transition::TRANSITION_PULL_RIGHT: $objWriter->writeAttribute('presentation:transition-style', 'stretch-from-right'); break; case Transition::TRANSITION_PULL_UP: $objWriter->writeAttribute('presentation:transition-style', 'stretch-from-top'); break; case Transition::TRANSITION_PUSH_DOWN: $objWriter->writeAttribute('presentation:transition-style', 'roll-from-bottom'); break; case Transition::TRANSITION_PUSH_LEFT: $objWriter->writeAttribute('presentation:transition-style', 'roll-from-left'); break; case Transition::TRANSITION_PUSH_RIGHT: $objWriter->writeAttribute('presentation:transition-style', 'roll-from-right'); break; case Transition::TRANSITION_PUSH_UP: $objWriter->writeAttribute('presentation:transition-style', 'roll-from-top'); break; case Transition::TRANSITION_RANDOM: $objWriter->writeAttribute('presentation:transition-style', 'random'); break; case Transition::TRANSITION_RANDOMBAR_HORIZONTAL: $objWriter->writeAttribute('presentation:transition-style', 'horizontal-lines'); break; case Transition::TRANSITION_RANDOMBAR_VERTICAL: $objWriter->writeAttribute('presentation:transition-style', 'vertical-lines'); break; case Transition::TRANSITION_SPLIT_IN_HORIZONTAL: $objWriter->writeAttribute('presentation:transition-style', 'close-horizontal'); break; case Transition::TRANSITION_SPLIT_OUT_HORIZONTAL: $objWriter->writeAttribute('presentation:transition-style', 'open-horizontal'); break; case Transition::TRANSITION_SPLIT_IN_VERTICAL: $objWriter->writeAttribute('presentation:transition-style', 'close-vertical'); break; case Transition::TRANSITION_SPLIT_OUT_VERTICAL: $objWriter->writeAttribute('presentation:transition-style', 'open-vertical'); break; case Transition::TRANSITION_STRIPS_LEFT_DOWN: $objWriter->writeAttribute('presentation:transition-style', 'none'); break; case Transition::TRANSITION_STRIPS_LEFT_UP: $objWriter->writeAttribute('presentation:transition-style', 'none'); break; case Transition::TRANSITION_STRIPS_RIGHT_DOWN: $objWriter->writeAttribute('presentation:transition-style', 'none'); break; case Transition::TRANSITION_STRIPS_RIGHT_UP: $objWriter->writeAttribute('presentation:transition-style', 'none'); break; case Transition::TRANSITION_WEDGE: $objWriter->writeAttribute('presentation:transition-style', 'none'); break; case Transition::TRANSITION_WIPE_DOWN: $objWriter->writeAttribute('presentation:transition-style', 'fade-from-bottom'); break; case Transition::TRANSITION_WIPE_LEFT: $objWriter->writeAttribute('presentation:transition-style', 'fade-from-left'); break; case Transition::TRANSITION_WIPE_RIGHT: $objWriter->writeAttribute('presentation:transition-style', 'fade-from-right'); break; case Transition::TRANSITION_WIPE_UP: $objWriter->writeAttribute('presentation:transition-style', 'fade-from-top'); break; case Transition::TRANSITION_ZOOM_IN: $objWriter->writeAttribute('presentation:transition-style', 'none'); break; case Transition::TRANSITION_ZOOM_OUT: $objWriter->writeAttribute('presentation:transition-style', 'none'); break; } } $oBackground = $slide->getBackground(); if ($oBackground instanceof Slide\AbstractBackground) { $objWriter->writeAttribute('presentation:background-visible', 'true'); if ($oBackground instanceof Slide\Background\Color) { $objWriter->writeAttribute('draw:fill', 'solid'); $objWriter->writeAttribute('draw:fill-color', '#' . $oBackground->getColor()->getRGB()); } if ($oBackground instanceof Slide\Background\Image) { $objWriter->writeAttribute('draw:fill', 'bitmap'); $objWriter->writeAttribute('draw:fill-image-name', 'background_' . $incPage); $objWriter->writeAttribute('style:repeat', 'stretch'); } } $objWriter->endElement(); // > style:style $objWriter->endElement(); }