phppowerpoint饼图爆炸

时间:2014-08-31 06:17:25

标签: php powerpoint

我有一个项目,其中数据显示在饼图中。它可以从饼图导出饼图到powerpoint。但饼图通过爆炸显示。我想展示它而不爆炸它。有可能吗?

我正在使用PowerPoint2007。代码如下 -

  <?php
require_once 'iconnect.php';
require_once 'QueryHandler.php';
require_once 'ResultTypes.php';

include_once 'Sample_Header.php';

use PhpOffice\PhpPowerpoint\PhpPowerpoint;
use PhpOffice\PhpPowerpoint\Shape\Chart\Type\Pie3D;
use PhpOffice\PhpPowerpoint\Style\Fill;
use PhpOffice\PhpPowerpoint\Style\Color;
use PhpOffice\PhpPowerpoint\Style\Shadow;
use PhpOffice\PhpPowerpoint\Shape\Chart\Series;
use PhpOffice\PhpPowerpoint\Style\Border;
use PhpOffice\PhpPowerpoint\Style\Alignment;
use PhpOffice\PhpPowerpoint\IOFactory;

Connect(3);

global $linkid;
$queryHandler=new QueryHandler();

$query="SELECT sku,value ".
    "FROM ferrero_booker t1,booker_sku t2 ".
    "WHERE t1.skuID=t2.skuID ".
    "LIMIT 10";


$result = $queryHandler->runQuery($query,$linkid,ResultTypes::$TYPE_ARRAY);

$data=array();
for($i=0;$i<count($result);$i++)
{
    $id=$result[$i][0];
    $data[$id]=(float)$result[$i][1];
}

$objPHPPowerPoint = new PhpPowerpoint();

$objPHPPowerPoint->getProperties()->setCreator('PHPOffice')
                              ->setLastModifiedBy('PHPPowerPoint Team')
                              ->setTitle('Sample 07 Title')
                              ->setSubject('Sample 07 Subject')
                              ->setDescription('Sample 07 Description')
                              ->setKeywords('office 2007 openxml libreoffice odt php')
                              ->setCategory('Sample Category');


$objPHPPowerPoint->removeSlideByIndex(0);


$currentSlide = createTemplatedSlide($objPHPPowerPoint);

$pie3DChart = new Pie3D();
$series = new Series('', $data);
$series->setShowSeriesName(true);
$series->getDataPointFill(0)->setFillType(Fill::FILL_SOLID)->setStartColor(new Color('FF4672A8'));
$series->getDataPointFill(1)->setFillType(Fill::FILL_SOLID)->setStartColor(new Color('FFAB4744'));
$series->getDataPointFill(2)->setFillType(Fill::FILL_SOLID)->setStartColor(new Color('FF8AA64F'));
$series->getDataPointFill(3)->setFillType(Fill::FILL_SOLID)->setStartColor(new Color('FF725990'));
$series->getDataPointFill(4)->setFillType(Fill::FILL_SOLID)->setStartColor(new Color('FF4299B0'));
$series->getDataPointFill(5)->setFillType(Fill::FILL_SOLID)->setStartColor(new Color('FFDC853E'));
$series->getDataPointFill(6)->setFillType(Fill::FILL_SOLID)->setStartColor(new Color('FF93A9CE'));
$pie3DChart->addSeries($series);


$shape = $currentSlide->createChartShape();
$shape->setName('PHPPowerPoint Daily Downloads')
      ->setResizeProportional(false)
      ->setHeight(550)
      ->setWidth(700)
      ->setOffsetX(120)
      ->setOffsetY(80);
$shape->getBorder()->setLineStyle(Border::LINE_SINGLE);
$shape->getTitle()->setText('Booker Sales');
$shape->getTitle()->getFont()->setItalic(true);
$shape->getPlotArea()->setType($pie3DChart);
$shape->getView3D()->setRotationX(90);
$shape->getView3D()->setPerspective(90);
$shape->getLegend()->getBorder()->setLineStyle(Border::LINE_SINGLE);
$shape->getLegend()->getFont()->setItalic(true);


$oWriterPPTX = IOFactory::createWriter($objPHPPowerPoint, 'PowerPoint2007');
$oWriterPPTX->save("sample.pptx");

print_r($data);

&GT;

1 个答案:

答案 0 :(得分:0)

我还没有看到在代码中执行此操作的方法,但修改源代码很容易。你是否应该是另一回事,但我不会在这里触及那个话题。

饼图爆炸由爆炸&#34;爆炸控制。标记写入xml,这发生在编写器中。特别是这个文件(在我的安装/版本上):

PHPPowerPoint/src/PhpPowerpoint/Writer/PowerPoint2007/Chart.php

在该文件中,以下行添加了爆炸效果:

        // c:explosion
        $objWriter->startElement('c:explosion');
        $objWriter->writeAttribute('val', '20');
        $objWriter->endElement();

因此,您可以通过抑制上述行来消除爆炸。如果您只是希望此属性无条件消失,请将上述行注释掉,或删除它们。如果要扩展API,则将相关方法添加到饼图类并检查此处的值,根据这些设置有条件地执行上述行。

我希望这会有所帮助。