Search code examples
phpphppowerpointpowerpoint-2016

How to increase thickness of border for a rectangle in PHPPowerPoint?


I want to create a graph (Risk Matrix, Risk Waterfall in PowerPoint) for a PM tool I am developing.

In the waterfall I have created on the Y axis, rotated labels. But those labels do not respond to thickness change in the code. The rectangles look strange and do not have uniform thickness, rather they have strange edges.

How do I match the thickness to that of the first graph (left side)?

Sample PowerPoint Exported Graphic Exported PowerPoint Graphic

Risk Waterfall Label Measurements

/*                           
                           -+-    -+-             -+- -+-    
                            |      |               |   |
                            |  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     |                                                |
                            +------------------------------------------------+

*/

Code

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);
}

Solution

  • The problem was solved by drawing another rectangle above the text box (with no border).

            $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);