0
我想爲我正在開發的一個PM工具創建一個圖(Risk Matrix,Risk Waterfall in PowerPoint)。如何在PHPPowerPoint中增加矩形邊框的厚度?
在Y軸上創建的瀑布中,旋轉標籤。但是這些標籤對代碼中的厚度變化沒有反應。矩形看起來很奇怪,沒有統一的厚度,而是有奇怪的邊緣。
我如何將厚度與第一個圖形(左側)的厚度相匹配?
風險瀑布標籤測量
/*
-+- -+- -+- -+-
| | | |
| 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);
}