public function testIncludeSpreadsheet() { $object = new Chart(); $this->assertFalse($object->hasIncludedSpreadsheet()); $this->assertInstanceOf('PhpOffice\\PhpPowerpoint\\Shape\\Chart', $object->setIncludeSpreadsheet()); $this->assertFalse($object->hasIncludedSpreadsheet()); $this->assertInstanceOf('PhpOffice\\PhpPowerpoint\\Shape\\Chart', $object->setIncludeSpreadsheet(false)); $this->assertFalse($object->hasIncludedSpreadsheet()); $this->assertInstanceOf('PhpOffice\\PhpPowerpoint\\Shape\\Chart', $object->setIncludeSpreadsheet(true)); $this->assertTrue($object->hasIncludedSpreadsheet()); }
/** * @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(); }
/** * Write table Chart * @param XMLWriter $objWriter * @param Chart $shape */ public function writeShapeChart(XMLWriter $objWriter, Chart $shape) { $parentWriter = $this->getParentWriter(); if (!$parentWriter instanceof ODPresentation) { throw new \Exception('The $parentWriter is not an instance of \\PhpOffice\\PhpPowerpoint\\Writer\\ODPresentation'); } $parentWriter->chartArray[$this->shapeId] = $shape; // draw:frame $objWriter->startElement('draw:frame'); $objWriter->writeAttribute('draw:name', $shape->getTitle()->getText()); $objWriter->writeAttribute('svg:x', String::numberFormat(CommonDrawing::pixelsToCentimeters($shape->getOffsetX()), 3) . 'cm'); $objWriter->writeAttribute('svg:y', String::numberFormat(CommonDrawing::pixelsToCentimeters($shape->getOffsetY()), 3) . 'cm'); $objWriter->writeAttribute('svg:height', String::numberFormat(CommonDrawing::pixelsToCentimeters($shape->getHeight()), 3) . 'cm'); $objWriter->writeAttribute('svg:width', String::numberFormat(CommonDrawing::pixelsToCentimeters($shape->getWidth()), 3) . 'cm'); // draw:object $objWriter->startElement('draw:object'); $objWriter->writeAttribute('xlink:href', './Object ' . $this->shapeId); $objWriter->writeAttribute('xlink:type', 'simple'); $objWriter->writeAttribute('xlink:show', 'embed'); // > draw:object $objWriter->endElement(); // > draw:frame $objWriter->endElement(); }
/** * Write Plot Area * * @param \PhpOffice\PhpPowerpoint\Shared\XMLWriter $objWriter XML Writer * @param \PhpOffice\PhpPowerpoint\Shape\Chart\PlotArea $subject * @param \PhpOffice\PhpPowerpoint\Shape\Chart $chart * @throws \Exception */ protected function writePlotArea(XMLWriter $objWriter, PlotArea $subject, ShapeChart $chart) { // c:plotArea $objWriter->startElement('c:plotArea'); // Write layout $this->writeLayout($objWriter, $subject); // Write chart $chartType = $subject->getType(); if ($chartType instanceof Bar3D) { $this->writeTypeBar3D($objWriter, $chartType, $chart->hasIncludedSpreadsheet()); } elseif ($chartType instanceof Pie3D) { $this->writeTypePie3D($objWriter, $chartType, $chart->hasIncludedSpreadsheet()); } elseif ($chartType instanceof Line) { $this->writeTypeLine($objWriter, $chartType, $chart->hasIncludedSpreadsheet()); } elseif ($chartType instanceof Scatter) { $this->writeTypeScatter($objWriter, $chartType, $chart->hasIncludedSpreadsheet()); } else { throw new \Exception('The chart type provided could not be rendered.'); } // Write X axis? if ($chartType->hasAxisX()) { // c:catAx (Axis X) $objWriter->startElement('c:catAx'); // c:axId $objWriter->startElement('c:axId'); $objWriter->writeAttribute('val', '52743552'); $objWriter->endElement(); // c:scaling $objWriter->startElement('c:scaling'); // c:orientation $objWriter->startElement('c:orientation'); $objWriter->writeAttribute('val', 'minMax'); $objWriter->endElement(); $objWriter->endElement(); // c:axPos $objWriter->startElement('c:axPos'); $objWriter->writeAttribute('val', 'b'); $objWriter->endElement(); // c:numFmt $objWriter->startElement('c:numFmt'); $objWriter->writeAttribute('formatCode', $subject->getAxisX()->getFormatCode()); $objWriter->writeAttribute('sourceLinked', '1'); $objWriter->endElement(); // c:majorTickMark $objWriter->startElement('c:majorTickMark'); $objWriter->writeAttribute('val', 'none'); $objWriter->endElement(); // c:tickLblPos $objWriter->startElement('c:tickLblPos'); $objWriter->writeAttribute('val', 'nextTo'); $objWriter->endElement(); // c:txPr $objWriter->startElement('c:txPr'); // a:bodyPr $objWriter->writeElement('a:bodyPr', null); // a:lstStyle $objWriter->writeElement('a:lstStyle', null); // a:p $objWriter->startElement('a:p'); // a:pPr $objWriter->startElement('a:pPr'); // 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->endElement(); // a:t $objWriter->writeElement('a:t', $subject->getAxisX()->getTitle()); $objWriter->endElement(); // a:endParaRPr $objWriter->startElement('a:endParaRPr'); $objWriter->writeAttribute('lang', 'en-US'); $objWriter->writeAttribute('dirty', '0'); $objWriter->endElement(); $objWriter->endElement(); $objWriter->endElement(); // c:crossAx $objWriter->startElement('c:crossAx'); $objWriter->writeAttribute('val', '52749440'); $objWriter->endElement(); // c:crosses $objWriter->startElement('c:crosses'); $objWriter->writeAttribute('val', 'autoZero'); $objWriter->endElement(); // c:lblAlgn $objWriter->startElement('c:lblAlgn'); $objWriter->writeAttribute('val', 'ctr'); $objWriter->endElement(); // c:lblOffset $objWriter->startElement('c:lblOffset'); $objWriter->writeAttribute('val', '100'); $objWriter->endElement(); $objWriter->endElement(); } // Write Y axis? if ($chartType->hasAxisY()) { // c:valAx (Axis Y) $objWriter->startElement('c:valAx'); // c:axId $objWriter->startElement('c:axId'); $objWriter->writeAttribute('val', '52749440'); $objWriter->endElement(); // c:scaling $objWriter->startElement('c:scaling'); // c:orientation $objWriter->startElement('c:orientation'); $objWriter->writeAttribute('val', 'minMax'); $objWriter->endElement(); // c:min if ($subject->getAxisY()->getMin() !== null) { $objWriter->startElement('c:min'); $objWriter->writeAttribute('val', $subject->getAxisY()->getMin()); $objWriter->endElement(); } // c:max if ($subject->getAxisY()->getMax() !== null) { $objWriter->startElement('c:max'); $objWriter->writeAttribute('val', $subject->getAxisY()->getMax()); $objWriter->endElement(); } $objWriter->endElement(); // c:axPos $objWriter->startElement('c:axPos'); $objWriter->writeAttribute('val', 'l'); $objWriter->endElement(); // c:numFmt $objWriter->startElement('c:numFmt'); $objWriter->writeAttribute('formatCode', $subject->getAxisY()->getFormatCode()); $objWriter->writeAttribute('sourceLinked', '1'); $objWriter->endElement(); // c:majorGridlines $objWriter->startElement('c:majorGridlines'); $objWriter->startElement('c:spPr'); $objWriter->startElement('a:ln'); $objWriter->writeAttribute('w', '9525'); $objWriter->writeAttribute('cap', 'rnd'); $objWriter->startElement('a:solidFill'); $objWriter->startElement('a:schemeClr'); $objWriter->writeAttribute('val', 'bg1'); $objWriter->startElement('a:lumMod'); $objWriter->writeAttribute('val', '75000'); $objWriter->endElement(); $objWriter->endElement(); $objWriter->endElement(); $objWriter->startElement('a:prstDash'); $objWriter->writeAttribute('val', 'dash'); $objWriter->endElement(); $objWriter->endElement(); $objWriter->endElement(); $objWriter->endElement(); // c:majorTickMark $objWriter->startElement('c:majorTickMark'); $objWriter->writeAttribute('val', $subject->getAxisY()->getMajorTickMark()); $objWriter->endElement(); // c:majorTickMark $objWriter->startElement('c:minorTickMark'); $objWriter->writeAttribute('val', $subject->getAxisY()->getMinorTickMark()); $objWriter->endElement(); // c:tickLblPos $objWriter->startElement('c:tickLblPos'); $objWriter->writeAttribute('val', 'nextTo'); $objWriter->endElement(); // c:txPr $objWriter->startElement('c:txPr'); // a:bodyPr $objWriter->writeElement('a:bodyPr', null); // a:lstStyle $objWriter->writeElement('a:lstStyle', null); // a:p $objWriter->startElement('a:p'); // a:pPr $objWriter->startElement('a:pPr'); // 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->endElement(); // a:t $objWriter->writeElement('a:t', $subject->getAxisY()->getTitle()); $objWriter->endElement(); // a:endParaRPr $objWriter->startElement('a:endParaRPr'); $objWriter->writeAttribute('lang', 'en-US'); $objWriter->writeAttribute('dirty', '0'); $objWriter->endElement(); $objWriter->endElement(); $objWriter->endElement(); // c:crossAx $objWriter->startElement('c:crossAx'); $objWriter->writeAttribute('val', '52743552'); $objWriter->endElement(); // c:crosses $objWriter->startElement('c:crosses'); $objWriter->writeAttribute('val', 'autoZero'); $objWriter->endElement(); // c:crossBetween $objWriter->startElement('c:crossBetween'); $objWriter->writeAttribute('val', 'between'); $objWriter->endElement(); // c:majorUnit $objWriter->startElement('c:majorUnit'); $objWriter->writeAttribute('val', $subject->getAxisY()->getMajorUnit()); $objWriter->endElement(); // c:majorUnit $objWriter->startElement('c:minorUnit'); $objWriter->writeAttribute('val', $subject->getAxisY()->getMinorUnit()); $objWriter->endElement(); $objWriter->endElement(); } $objWriter->endElement(); }
/** * Write chart * * @param \PhpOffice\PhpPowerpoint\Shared\XMLWriter $objWriter XML Writer * @param \PhpOffice\PhpPowerpoint\Shape\Chart $shape * @param int $shapeId */ private 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->writeAttribute('rot', SharedDrawing::degreesToAngle($shape->getRotation())); // a:off $objWriter->startElement('a:off'); $objWriter->writeAttribute('x', SharedDrawing::pixelsToEmu($shape->getOffsetX())); $objWriter->writeAttribute('y', SharedDrawing::pixelsToEmu($shape->getOffsetY())); $objWriter->endElement(); // a:ext $objWriter->startElement('a:ext'); $objWriter->writeAttribute('cx', SharedDrawing::pixelsToEmu($shape->getWidth())); $objWriter->writeAttribute('cy', SharedDrawing::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 chart relationships to XML format * * @param \PhpOffice\PhpPowerpoint\Shape\Chart $pChart * @return string XML Output * @throws \Exception */ public function writeChartRelationships(ShapeChart $pChart) { // Create XML writer $objWriter = $this->getXMLWriter(); // 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 table Chart * @param XMLWriter $objWriter * @param Chart $shape * @param integer $shapeId */ public function writeShapeChart(XMLWriter $objWriter, Chart $shape, $shapeId) { $this->getParentWriter()->chartArray[$shapeId] = $shape; // draw:frame $objWriter->startElement('draw:frame'); $objWriter->writeAttribute('draw:name', $shape->getTitle()->getText()); $objWriter->writeAttribute('svg:x', String::numberFormat(SharedDrawing::pixelsToCentimeters($shape->getOffsetX()), 3) . 'cm'); $objWriter->writeAttribute('svg:y', String::numberFormat(SharedDrawing::pixelsToCentimeters($shape->getOffsetY()), 3) . 'cm'); $objWriter->writeAttribute('svg:height', String::numberFormat(SharedDrawing::pixelsToCentimeters($shape->getHeight()), 3) . 'cm'); $objWriter->writeAttribute('svg:width', String::numberFormat(SharedDrawing::pixelsToCentimeters($shape->getWidth()), 3) . 'cm'); // draw:object $objWriter->startElement('draw:object'); $objWriter->writeAttribute('xlink:href', './Object ' . $shapeId); $objWriter->writeAttribute('xlink:type', 'simple'); $objWriter->writeAttribute('xlink:show', 'embed'); // > draw:object $objWriter->endElement(); // > draw:frame $objWriter->endElement(); }