Как увеличить толщину границы для прямоугольника в PHPPowerPoint?

Я хочу создать график (Risk Matrix, Risk Waterfall в PowerPoint) для инструмента PM, который я разрабатываю.

В водопаде, который я создал на оси Y, повернуты надписи. Но эти метки не реагируют на изменение толщины в коде. Прямоугольники выглядят странно и не имеют одинаковой толщины, скорее они имеют странные края.

Как мне сопоставить толщину с первым графиком (левая сторона)?

Образец экспортированной графики PowerPoint
Экспортированная графика PowerPoint

Измерения этикетки водопада риска

/*
-+-    -+-             -+- -+-
|      |               |   |
|  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);
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]