【问题标题】:PHPWord - Changing color of chartPHPWord - 改变图表的颜色
【发布时间】:2015-12-06 11:02:51
【问题描述】:

我正在使用 PHPWord,我在其中创建了一个包含一系列数据的图表(区域)。按照标准,这是图表上的蓝色系列,但我需要它是橙色的。

有人知道如何改变系列的颜色吗?想想我一直在到处搜索,没有结果。

$chart = $section->addChart($chartType, $categories, $series1);
$chart->getStyle()->setWidth(Converter::inchToEmu(6.5))->setHeight(Converter::inchToEmu(2));

感谢您阅读本文,特别是如果您得到了答案:)

【问题讨论】:

    标签: php charts phpword


    【解决方案1】:

    我在 github 问题中发布了这个,但也在这里发布以防万一。在 0.15.0 版本中,您似乎可以使用 chart->getStyle()->setColors() 更改颜色:

    $categories = array('A', 'B', 'C', 'D', 'E');
    $series1 = array(1, 3, 2, 5, 4);
    $chartType = 'pie';
    $section->addTitle(ucfirst($chartType), 2);
    $chart = $section->addChart($chartType, $categories, $series1);
    $chart->getStyle()->setColors( array( 'FFFFFF', '000000', 'FF0000', '00FF00', '0000FF' ) );
    $chart->getStyle()->setWidth(Converter::inchToEmu(2.5))->setHeight(Converter::inchToEmu(2));
    

    【讨论】:

      【解决方案2】:

      如果您修改文件PhpWord\Writer\Word2007\Part\Chart.php,您可以更改图表的颜色。

      添加此代码:

      if ($type == 'pie') 
      {
          $elementColors = $this->element->getColors();
      
          if($elementColors !== null) 
          {
              $colorIndex = 0;
              foreach ($elementColors as $color) 
              {
                  $xmlWriter->startElement('c:dPt');
                      $xmlWriter->writeElementBlock('c:idx', 'val', $colorIndex);
                      $xmlWriter->startElement('c:spPr');
                          $xmlWriter->startElement('a:solidFill');
                              $xmlWriter->writeElementBlock('a:srgbClr', 'val', $color);
                          $xmlWriter->endElement(); // a:solidFill
                      $xmlWriter->endElement(); // c:spPr
                  $xmlWriter->endElement(); // c:dPt
      
                  $colorIndex++;
              }
          }
      }
      else if($type == 'area')
      {
          $color = $seriesItem['color'];
      
          if($color!=null)
          {
              $xmlWriter->startElement('c:spPr');
                  $xmlWriter->startElement('a:solidFill');
                      $xmlWriter->startElement('a:srgbClr');
                          $xmlWriter->writeAttribute('val',$color);
                      $xmlWriter->endElement();
                  $xmlWriter->endElement();
              $xmlWriter->endElement();
          }
      }
      else
      {
          $color = $seriesItem['color'];
      
          if($color!=null)
          {
              $xmlWriter->startElement('c:spPr');
                  $xmlWriter->startElement('a:ln');
                      $xmlWriter->writeAttribute('w', 20000);
                      $xmlWriter->startElement('a:solidFill');
                          $xmlWriter->startElement('a:srgbClr');
                              $xmlWriter->writeAttribute('val',$color);
                          $xmlWriter->endElement();
                      $xmlWriter->endElement();
                  $xmlWriter->endElement();
              $xmlWriter->endElement();
      
          }   
      }
      

      在这之后:

      if ($scatter === true) {
          $this->writeSeriesItem($xmlWriter, 'xVal', $categories);
          $this->writeSeriesItem($xmlWriter, 'yVal', $values);
      } else {
          $this->writeSeriesItem($xmlWriter, 'cat', $categories,$name);
          $this->writeSeriesItem($xmlWriter, 'val', $values);
      

      你必须定义你的颜色。我在 PhpWord\Element\Chart.php 类中定义了这个。

      我希望这对你有帮助。

      【讨论】:

        【解决方案3】:

        phpWord 图表似乎不支持自定义颜色定义。

        如果您可以并且想要自己稍微修改一下 PhpWord 代码,这里有一个示例如何为 Word2007 编写器执行此操作:Define custom pie chart colors

        【讨论】:

        • 没有人知道如何用面积图做到这一点?
        猜你喜欢
        • 1970-01-01
        • 2013-03-26
        • 1970-01-01
        • 1970-01-01
        • 2019-05-06
        • 1970-01-01
        • 2023-01-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多