Пример #1
0
 public function testHashCode()
 {
     $oSeries = new Series();
     $object = new Bar();
     $object->addSeries($oSeries);
     $this->assertEquals(md5($oSeries->getHashCode() . get_class($object)), $object->getHashCode());
 }
Пример #2
0
 public function testTypeBar()
 {
     $seriesData = array('A' => 1, 'B' => 2, 'C' => 4, 'D' => 3, 'E' => 2);
     $oPhpPresentation = new PhpPresentation();
     $oSlide = $oPhpPresentation->getActiveSlide();
     $oShape = $oSlide->createChartShape();
     $oShape->setResizeProportional(false)->setHeight(550)->setWidth(700)->setOffsetX(120)->setOffsetY(80);
     $oBar = new Bar();
     $oSeries = new Series('Downloads', $seriesData);
     $oSeries->getDataPointFill(0)->setFillType(Fill::FILL_SOLID)->setStartColor(new Color(Color::COLOR_BLUE));
     $oSeries->getDataPointFill(1)->setFillType(Fill::FILL_SOLID)->setStartColor(new Color(Color::COLOR_DARKBLUE));
     $oSeries->getDataPointFill(2)->setFillType(Fill::FILL_SOLID)->setStartColor(new Color(Color::COLOR_DARKGREEN));
     $oSeries->getDataPointFill(3)->setFillType(Fill::FILL_SOLID)->setStartColor(new Color(Color::COLOR_DARKRED));
     $oSeries->getDataPointFill(4)->setFillType(Fill::FILL_SOLID)->setStartColor(new Color(Color::COLOR_DARKYELLOW));
     $oBar->addSeries($oSeries);
     $oShape->getPlotArea()->setType($oBar);
     $oXMLDoc = TestHelperDOCX::getDocument($oPhpPresentation, 'PowerPoint2007');
     $element = '/p:sld/p:cSld/p:spTree/p:graphicFrame/a:graphic/a:graphicData';
     $this->assertTrue($oXMLDoc->elementExists($element, 'ppt/slides/slide1.xml'));
     $element = '/c:chartSpace/c:chart/c:plotArea/c:barChart';
     $this->assertTrue($oXMLDoc->elementExists($element, 'ppt/charts/' . $oShape->getIndexedFilename()));
     $element = '/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser';
     $this->assertTrue($oXMLDoc->elementExists($element, 'ppt/charts/' . $oShape->getIndexedFilename()));
     $element = '/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:dPt/c:spPr';
     $this->assertTrue($oXMLDoc->elementExists($element, 'ppt/charts/' . $oShape->getIndexedFilename()));
     $element = '/c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser/c:tx/c:v';
     $this->assertEquals($oSeries->getTitle(), $oXMLDoc->getElement($element, 'ppt/charts/' . $oShape->getIndexedFilename())->nodeValue);
 }
Пример #3
0
 public function testChartBarHorizontal()
 {
     $oSeries = new Series('Series', array('Jan' => 1, 'Feb' => 5, 'Mar' => 2));
     $oSeries->setShowSeriesName(true);
     $oSeries->getDataPointFill(0)->setFillType(Fill::FILL_SOLID)->setStartColor(new Color('FF4672A8'));
     $oSeries->getDataPointFill(1)->setFillType(Fill::FILL_SOLID)->setStartColor(new Color('FFAB4744'));
     $oSeries->getDataPointFill(2)->setFillType(Fill::FILL_SOLID)->setStartColor(new Color('FF8AA64F'));
     $oBar = new Bar();
     $oBar->setBarDirection(Bar::DIRECTION_HORIZONTAL);
     $oBar->addSeries($oSeries);
     $phpPresentation = new PhpPresentation();
     $oSlide = $phpPresentation->getActiveSlide();
     $oChart = $oSlide->createChartShape();
     $oChart->getPlotArea()->setType($oBar);
     $pres = TestHelperDOCX::getDocument($phpPresentation, 'ODPresentation');
     $element = '/office:document-content/office:body/office:chart/chart:chart';
     $this->assertTrue($pres->elementExists($element, 'Object 1/content.xml'));
     $this->assertEquals('chart:bar', $pres->getElementAttribute($element, 'chart:class', 'Object 1/content.xml'));
     $element = '/office:document-content/office:automatic-styles/style:style[@style:name=\'stylePlotArea\']/style:chart-properties';
     $this->assertTrue($pres->elementExists($element, 'Object 1/content.xml'));
     $this->assertEquals('true', $pres->getElementAttribute($element, 'chart:vertical', 'Object 1/content.xml'));
     $this->assertFalse($pres->attributeElementExists($element, 'chart:three-dimensional', 'Object 1/content.xml'));
     $this->assertFalse($pres->attributeElementExists($element, 'chart:right-angled-axes', 'Object 1/content.xml'));
 }
Пример #4
0
function fnSlide_BarPercentStacked(PhpPresentation $objPHPPresentation)
{
    global $oFill;
    global $oShadow;
    // Create templated slide
    echo EOL . date('H:i:s') . ' Create templated slide' . EOL;
    $currentSlide = createTemplatedSlide($objPHPPresentation);
    // Generate sample data for first chart
    echo date('H:i:s') . ' Generate sample data for chart' . EOL;
    $series1Data = array('Jan' => 133, 'Feb' => 99, 'Mar' => 191, 'Apr' => 205, 'May' => 167, 'Jun' => 201, 'Jul' => 240, 'Aug' => 226, 'Sep' => 255, 'Oct' => 264, 'Nov' => 283, 'Dec' => 293);
    $Series1Sum = array_sum($series1Data);
    foreach ($series1Data as $CatName => $Value) {
        $series1Data[$CatName] = round($Value / $Series1Sum, 2);
    }
    $series2Data = array('Jan' => 266, 'Feb' => 198, 'Mar' => 271, 'Apr' => 305, 'May' => 267, 'Jun' => 301, 'Jul' => 340, 'Aug' => 326, 'Sep' => 344, 'Oct' => 364, 'Nov' => 383, 'Dec' => 379);
    $Series2Sum = array_sum($series2Data);
    foreach ($series2Data as $CatName => $Value) {
        $series2Data[$CatName] = round($Value / $Series2Sum, 2);
    }
    $series3Data = array('Jan' => 233, 'Feb' => 146, 'Mar' => 238, 'Apr' => 175, 'May' => 108, 'Jun' => 257, 'Jul' => 199, 'Aug' => 201, 'Sep' => 88, 'Oct' => 147, 'Nov' => 287, 'Dec' => 105);
    $Series3Sum = array_sum($series3Data);
    foreach ($series3Data as $CatName => $Value) {
        $series3Data[$CatName] = round($Value / $Series3Sum, 2);
    }
    // Create a bar chart (that should be inserted in a shape)
    echo date('H:i:s') . ' Create a percent stacked horizontal bar chart (that should be inserted in a chart shape)' . EOL;
    $PercentStackedBarChartHoriz = new Bar();
    $series1 = new Series('2009', $series1Data);
    $series1->setShowSeriesName(false);
    $series1->getFill()->setFillType(Fill::FILL_SOLID)->setStartColor(new Color('FF4F81BD'));
    $series1->getFont()->getColor()->setRGB('00FF00');
    $series1->setShowValue(true);
    $series1->setShowPercentage(false);
    // Set Data Label Format For Chart To Display Percent
    $series1->setDlblNumFormat('#%');
    $series2 = new Series('2010', $series2Data);
    $series2->setShowSeriesName(false);
    $series2->getFont()->getColor()->setRGB('FF0000');
    $series2->getFill()->setFillType(Fill::FILL_SOLID)->setStartColor(new Color('FFC0504D'));
    $series2->setShowValue(true);
    $series2->setShowPercentage(false);
    $series2->setDlblNumFormat('#%');
    $series3 = new Series('2011', $series3Data);
    $series3->setShowSeriesName(false);
    $series3->getFont()->getColor()->setRGB('FF0000');
    $series3->getFill()->setFillType(Fill::FILL_SOLID)->setStartColor(new Color('FF804DC0'));
    $series3->setShowValue(true);
    $series3->setShowPercentage(false);
    $series3->setDlblNumFormat('#%');
    $PercentStackedBarChartHoriz->addSeries($series1);
    $PercentStackedBarChartHoriz->addSeries($series2);
    $PercentStackedBarChartHoriz->addSeries($series3);
    $PercentStackedBarChartHoriz->setBarGrouping(Bar::GROUPING_PERCENTSTACKED);
    $PercentStackedBarChartHoriz->setBarDirection(Bar3D::DIRECTION_HORIZONTAL);
    // Create a shape (chart)
    echo date('H:i:s') . ' Create a shape (chart)' . EOL;
    $shape = $currentSlide->createChartShape();
    $shape->setName('PHPPresentation Monthly Downloads')->setResizeProportional(false)->setHeight(550)->setWidth(700)->setOffsetX(120)->setOffsetY(80);
    $shape->setShadow($oShadow);
    $shape->setFill($oFill);
    $shape->getBorder()->setLineStyle(Border::LINE_SINGLE);
    $shape->getTitle()->setText('PHPPresentation Monthly Downloads');
    $shape->getTitle()->getFont()->setItalic(true);
    $shape->getTitle()->getAlignment()->setHorizontal(Alignment::HORIZONTAL_RIGHT);
    $shape->getPlotArea()->getAxisX()->setTitle('Month');
    $shape->getPlotArea()->getAxisY()->setTitle('Downloads');
    $shape->getPlotArea()->setType($PercentStackedBarChartHoriz);
    $shape->getLegend()->getBorder()->setLineStyle(Border::LINE_SINGLE);
    $shape->getLegend()->getFont()->setItalic(true);
}
Пример #5
0
 /**
  * Write Type Bar3D
  *
  * @param  \PhpOffice\Common\XMLWriter       $objWriter    XML Writer
  * @param  \PhpOffice\PhpPresentation\Shape\Chart\Type\Bar $subject
  * @param  boolean                              $includeSheet
  * @throws \Exception
  */
 protected function writeTypeBar(XMLWriter $objWriter, Bar $subject, $includeSheet = false)
 {
     // c:bar3DChart
     $objWriter->startElement('c:barChart');
     // c:barDir
     $objWriter->startElement('c:barDir');
     $objWriter->writeAttribute('val', $subject->getBarDirection());
     $objWriter->endElement();
     // c:grouping
     $objWriter->startElement('c:grouping');
     $objWriter->writeAttribute('val', $subject->getBarGrouping());
     $objWriter->endElement();
     // Write series
     $seriesIndex = 0;
     foreach ($subject->getData() as $series) {
         // c:ser
         $objWriter->startElement('c:ser');
         // c:idx
         $objWriter->startElement('c:idx');
         $objWriter->writeAttribute('val', $seriesIndex);
         $objWriter->endElement();
         // c:order
         $objWriter->startElement('c:order');
         $objWriter->writeAttribute('val', $seriesIndex);
         $objWriter->endElement();
         // c:tx
         $objWriter->startElement('c:tx');
         $coords = $includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex(1 + $seriesIndex) . '$1' : '';
         $this->writeSingleValueOrReference($objWriter, $includeSheet, $series->getTitle(), $coords);
         $objWriter->endElement();
         // Fills for points?
         $dataPointFills = $series->getDataPointFills();
         foreach ($dataPointFills as $key => $value) {
             // c:dPt
             $objWriter->startElement('c:dPt');
             // c:idx
             $this->writeElementWithValAttribute($objWriter, 'c:idx', $key);
             if ($value->getFillType() != Fill::FILL_NONE) {
                 // c:spPr
                 $objWriter->startElement('c:spPr');
                 // Write fill
                 $this->writeFill($objWriter, $value);
                 // ## c:spPr
                 $objWriter->endElement();
             }
             // ## c:dPt
             $objWriter->endElement();
         }
         // c:dLbls
         $objWriter->startElement('c:dLbls');
         if ($series->hasDlblNumFormat()) {
             //c:numFmt
             $objWriter->startElement('c:numFmt');
             $objWriter->writeAttribute('formatCode', $series->getDlblNumFormat());
             $objWriter->writeAttribute('sourceLinked', '0');
             $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->startElement('a:defRPr');
         $objWriter->writeAttribute('b', $series->getFont()->isBold() ? 'true' : 'false');
         $objWriter->writeAttribute('i', $series->getFont()->isItalic() ? 'true' : 'false');
         $objWriter->writeAttribute('strike', $series->getFont()->isStrikethrough() ? 'sngStrike' : 'noStrike');
         $objWriter->writeAttribute('sz', $series->getFont()->getSize() * 100);
         $objWriter->writeAttribute('u', $series->getFont()->getUnderline());
         if ($series->getFont()->isSuperScript() || $series->getFont()->isSubScript()) {
             if ($series->getFont()->isSuperScript()) {
                 $objWriter->writeAttribute('baseline', '30000');
             } elseif ($series->getFont()->isSubScript()) {
                 $objWriter->writeAttribute('baseline', '-25000');
             }
         }
         // Font - a:solidFill
         $objWriter->startElement('a:solidFill');
         // a:srgbClr
         $objWriter->startElement('a:srgbClr');
         $objWriter->writeAttribute('val', $series->getFont()->getColor()->getRGB());
         $objWriter->endElement();
         $objWriter->endElement();
         // Font - a:latin
         $objWriter->startElement('a:latin');
         $objWriter->writeAttribute('typeface', $series->getFont()->getName());
         $objWriter->endElement();
         $objWriter->endElement();
         $objWriter->endElement();
         // a:endParaRPr
         $objWriter->startElement('a:endParaRPr');
         $objWriter->writeAttribute('lang', 'en-US');
         $objWriter->writeAttribute('dirty', '0');
         $objWriter->endElement();
         $objWriter->endElement();
         $objWriter->endElement();
         // c:showVal
         $this->writeElementWithValAttribute($objWriter, 'c:showVal', $series->hasShowValue() ? '1' : '0');
         // c:showCatName
         $this->writeElementWithValAttribute($objWriter, 'c:showCatName', $series->hasShowCategoryName() ? '1' : '0');
         // c:showSerName
         $this->writeElementWithValAttribute($objWriter, 'c:showSerName', $series->hasShowSeriesName() ? '1' : '0');
         // c:showPercent
         $this->writeElementWithValAttribute($objWriter, 'c:showPercent', $series->hasShowPercentage() ? '1' : '0');
         // c:showLeaderLines
         $this->writeElementWithValAttribute($objWriter, 'c:showLeaderLines', $series->hasShowLeaderLines() ? '1' : '0');
         $objWriter->endElement();
         // c:spPr
         if ($series->getFill()->getFillType() != Fill::FILL_NONE) {
             // c:spPr
             $objWriter->startElement('c:spPr');
             // Write fill
             $this->writeFill($objWriter, $series->getFill());
             // ## c:spPr
             $objWriter->endElement();
         }
         // Write X axis data
         $axisXData = array_keys($series->getValues());
         // c:cat
         $objWriter->startElement('c:cat');
         $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisXData, 'Sheet1!$A$2:$A$' . (1 + count($axisXData)));
         $objWriter->endElement();
         // Write Y axis data
         $axisYData = array_values($series->getValues());
         // c:val
         $objWriter->startElement('c:val');
         $coords = $includeSheet ? 'Sheet1!$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$2:$' . \PHPExcel_Cell::stringFromColumnIndex($seriesIndex + 1) . '$' . (1 + count($axisYData)) : '';
         $this->writeMultipleValuesOrReference($objWriter, $includeSheet, $axisYData, $coords);
         $objWriter->endElement();
         $objWriter->endElement();
         ++$seriesIndex;
     }
     // c:overlap
     $objWriter->startElement('c:overlap');
     if ($subject->getBarGrouping() == Bar::GROUPING_CLUSTERED) {
         $objWriter->writeAttribute('val', '0');
     } elseif ($subject->getBarGrouping() == Bar::GROUPING_STACKED || $subject->getBarGrouping() == Bar::GROUPING_PERCENTSTACKED) {
         $objWriter->writeAttribute('val', '100');
     }
     $objWriter->endElement();
     // c:gapWidth
     $objWriter->startElement('c:gapWidth');
     $objWriter->writeAttribute('val', '75');
     $objWriter->endElement();
     // c:shape
     $objWriter->startElement('c:shape');
     $objWriter->writeAttribute('val', 'box');
     $objWriter->endElement();
     // c:axId
     $objWriter->startElement('c:axId');
     $objWriter->writeAttribute('val', '52743552');
     $objWriter->endElement();
     // c:axId
     $objWriter->startElement('c:axId');
     $objWriter->writeAttribute('val', '52749440');
     $objWriter->endElement();
     // c:axId
     $objWriter->startElement('c:axId');
     $objWriter->writeAttribute('val', '0');
     $objWriter->endElement();
     $objWriter->endElement();
 }