2017-10-16 101 views
0

我想爲我正在開發的一個PM工具創建一個圖(Risk Matrix,Risk Waterfall in PowerPoint)。如何在PHPPowerPoint中增加矩形邊框的厚度?

在Y軸上創建的瀑布中,旋轉標籤。但是這些標籤對代碼中的厚度變化沒有反應。矩形看起來很奇怪,沒有統一的厚度,而是有奇怪的邊緣。

我如何將厚度與第一個圖形(左側)的厚度相匹配?

樣品PowerPoint中導出的圖形 Exported PowerPoint Graphic

風險瀑布標籤測量

/*       
          -+- -+-    -+- -+-  
          |  |    | | 
          | offsetRiskY (High) | | 
          |  |    | | 
         ---+--- -+-    | offsetRiskY(Med) = offsetRiskY(High) + heightRiskHigh                
     centerRiskY --------- + heightRisk (High) | |                 
          |  |    | |                 
         ---+--- -+-    | -+-                 
          |  |    |                  
     centerRiskY --------- + heightRisk (Med)  offsetRiskYLow = offsetRiskYHigh + heightRiskHigh + heightRiskMed + waterfallHeight = heightHigh + heightMed + heightLow     
          |  |    |                  
         ---+--- -+-    -+-                  
          |  |                      
     centerRiskY --------- + heightRisk (Low)                    
          |  |                      
         ---+--- -+-                      
          * 
         /\ 
          | 
          | 
          | 
          | 
    halfLabelWidth ------+ 

          |------heightRisk/2-----+------heightRisk/2------| 
          +------------------------------------------------+ 
     halfLabelWidth  |            | 
          +     Risk Label     + 
     halfLabelWidth  |            | 
          +------------------------------------------------+ 

*/ 

代碼

public function generateRiskWaterfallLabelYAxis($heightRisk, $offsetRiskY, $labelText) 
{ 
    $halfRiskHeight = $heightRisk/2; 
    $centerRiskY = $offsetRiskY + $halfRiskHeight; 
    $labelWidth = self::$waterfallHeight - $centerRiskY; 
    $halfLabelWidth = self::$waterfallLabelWidth/2; 
    $currentSlide = $this->riskPPT->getActiveSlide(); 
    $shape = $currentSlide->createRichTextShape()->setHeight($halfLabelWidth)->setWidth($heightRisk); //swap width, height for rotation (90 degrees) 
    $shape->setOffsetX(-$halfRiskHeight); 
    $shape->setOffsetY($centerRiskY + self::$offsetWaterfallY); 
    $shape->setRotation(-90); 
    $offsetX = $shape->getOffsetX() + self::$offsetWaterfallX - $halfLabelWidth/2; 
    $offsetY = $shape->getOffsetY() - $halfLabelWidth/2; 
    $shape->setOffsetX($offsetX); 
    $shape->setOffsetY($offsetY); 
    $textRun = $shape->createTextRun($labelText); $shape->getActiveParagraph()->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER); $shape->getActiveParagraph()->getAlignment()->setVertical(Alignment::VERTICAL_CENTER);  
    $shape->getBorder()->setColor(new Color('FF'. self::$borderColor))->setLineStyle(Border::LINE_SINGLE)->setLineWidth(1); 
} 

public function generateRiskWaterfallLabelsYAxis() 
{      
    $maxRisk = 1.0; 
    //High 
    $heightHigh = self::$waterfallHeight*($maxRisk-$this->minHigh); 
    $offsetRiskHigh = 0; 
    $riskTextHigh = 'High'; 
    $this->generateRiskWaterfallLabelYAxis($heightHigh, $offsetRiskHigh, $riskTextHigh); 

    //Med 
    $heightMed = self::$waterfallHeight*($this->minHigh-$this->maxLow); 
    $offsetRiskMed = $heightHigh; 
    $riskTextMed = 'Med'; 
    $this->generateRiskWaterfallLabelYAxis($heightMed, $offsetRiskMed, $riskTextMed); 

    //Low 
    $heightLow = self::$waterfallHeight*$this->maxLow; 
    $offsetRiskLow = $heightHigh + $heightMed; 
    $riskTextLow = 'Low'; 
    $this->generateRiskWaterfallLabelYAxis($heightLow, $offsetRiskLow, $riskTextLow); 
} 

回答

0

問題通過在文本框上方繪製另一個矩形(無邊框)來解決。

 $shape = $currentSlide->createRichTextShape()->setHeight($heightRisk)->setWidth($halfLabelWidth); 
     $offsetX = self::$offsetWaterfallX - $halfLabelWidth; 
     $offsetY = self::$offsetWaterfallY + $offsetRiskY; 
     $shape->setOffsetX($offsetX); 
     $shape->setOffsetY($offsetY); 
     $shape->getBorder()->setColor(new Color('FF000000'))->setLineStyle(Border::LINE_SINGLE);