Merge pull request #1922 from csk83/develop
Add Option for Dynamic Chart Legend Position #1699
This commit is contained in:
commit
4840faa422
|
|
@ -201,6 +201,7 @@ Available Chart style options:
|
|||
- ``colors``. A list of colors to use in the chart.
|
||||
- ``title``. The title for the chart.
|
||||
- ``showLegend``. Show legend, *true* or *false*.
|
||||
- ``LegendPosition``. Legend position, *r* (default), *b*, *t*, *l* or *tr*.
|
||||
- ``categoryLabelPosition``. Label position for categories, *nextTo* (default), *low* or *high*.
|
||||
- ``valueLabelPosition``. Label position for values, *nextTo* (default), *low* or *high*.
|
||||
- ``categoryAxisTitle``. The title for the category axis.
|
||||
|
|
|
|||
|
|
@ -25,6 +25,9 @@ $series2 = array(3, 1, 7, 2, 6);
|
|||
$series3 = array(8, 3, 2, 5, 4);
|
||||
$showGridLines = false;
|
||||
$showAxisLabels = false;
|
||||
$showLegend = true;
|
||||
$legendPosition = 't';
|
||||
// r = right, l = left, t = top, b = bottom, tr = top right
|
||||
|
||||
foreach ($chartTypes as $chartType) {
|
||||
$section->addTitle(ucfirst($chartType), 2);
|
||||
|
|
@ -33,6 +36,8 @@ foreach ($chartTypes as $chartType) {
|
|||
$chart->getStyle()->setShowGridX($showGridLines);
|
||||
$chart->getStyle()->setShowGridY($showGridLines);
|
||||
$chart->getStyle()->setShowAxisLabels($showAxisLabels);
|
||||
$chart->getStyle()->setShowLegend($showLegend);
|
||||
$chart->getStyle()->setLegendPosition($legendPosition);
|
||||
if (in_array($chartType, $twoSeries)) {
|
||||
$chart->addSeries($categories, $series2);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -115,7 +115,7 @@ class Html
|
|||
// tables, cells
|
||||
if (false !== strpos($val, '%')) {
|
||||
// e.g. <table width="100%"> or <td width="50%">
|
||||
$styles['width'] = intval($val) * 50;
|
||||
$styles['width'] = (int) $val * 50;
|
||||
$styles['unit'] = \PhpOffice\PhpWord\SimpleType\TblWidth::PERCENT;
|
||||
} else {
|
||||
// e.g. <table width="250> where "250" = 250px (always pixels)
|
||||
|
|
@ -125,7 +125,7 @@ class Html
|
|||
break;
|
||||
case 'cellspacing':
|
||||
// tables e.g. <table cellspacing="2">, where "2" = 2px (always pixels)
|
||||
$val = intval($val).'px';
|
||||
$val = (int) $val . 'px';
|
||||
$styles['cellSpacing'] = Converter::cssToTwip($val);
|
||||
break;
|
||||
case 'bgcolor':
|
||||
|
|
@ -729,7 +729,7 @@ class Html
|
|||
// This may be adjusted, if better ratio or formula found.
|
||||
// BC change: up to ver. 0.17.0 was $size converted to points - Converter::cssToPoint($size)
|
||||
$size = Converter::cssToTwip($matches[1]);
|
||||
$size = intval($size / 2);
|
||||
$size = (int) ($size / 2);
|
||||
// valid variants may be e.g. borderSize, borderTopSize, borderLeftColor, etc ..
|
||||
$styles["border{$which}Size"] = $size; // twips
|
||||
$styles["border{$which}Color"] = trim($matches[2], '#');
|
||||
|
|
@ -907,9 +907,9 @@ class Html
|
|||
}
|
||||
|
||||
/**
|
||||
* Transforms a HTML/CSS alignment into a \PhpOffice\PhpWord\SimpleType\Jc
|
||||
* Transforms a HTML/CSS vertical alignment
|
||||
*
|
||||
* @param string $cssAlignment
|
||||
* @param string $alignment
|
||||
* @return string|null
|
||||
*/
|
||||
protected static function mapAlignVertical($alignment)
|
||||
|
|
@ -1008,9 +1008,9 @@ class Html
|
|||
// <hr> is implemented as an empty paragraph - extending 100% inside the section
|
||||
// Some properties may be controlled, e.g. <hr style="border-bottom: 3px #DDDDDD solid; margin-bottom: 0;">
|
||||
|
||||
$fontStyle = $styles + ['size' => 3];
|
||||
$fontStyle = $styles + array('size' => 3);
|
||||
|
||||
$paragraphStyle = $styles + [
|
||||
$paragraphStyle = $styles + array(
|
||||
'lineHeight' => 0.25, // multiply default line height - e.g. 1, 1.5 etc
|
||||
'spacing' => 0, // twip
|
||||
'spaceBefore' => 120, // twip, 240/2 (default line height)
|
||||
|
|
@ -1018,9 +1018,9 @@ class Html
|
|||
'borderBottomSize' => empty($styles['line-height']) ? 1 : $styles['line-height'],
|
||||
'borderBottomColor' => empty($styles['color']) ? '000000' : $styles['color'],
|
||||
'borderBottomStyle' => 'single', // same as "solid"
|
||||
];
|
||||
);
|
||||
|
||||
$element->addText("", $fontStyle, $paragraphStyle);
|
||||
$element->addText('', $fontStyle, $paragraphStyle);
|
||||
|
||||
// Notes: <hr/> cannot be:
|
||||
// - table - throws error "cannot be inside textruns", e.g. lists
|
||||
|
|
|
|||
|
|
@ -66,6 +66,14 @@ class Chart extends AbstractStyle
|
|||
*/
|
||||
private $showLegend = false;
|
||||
|
||||
/**
|
||||
* Chart legend Position.
|
||||
* Possible values are 'r', 't', 'b', 'l', 'tr'
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private $legendPosition = 'r';
|
||||
|
||||
/**
|
||||
* A list of display options for data labels
|
||||
*
|
||||
|
|
@ -233,6 +241,7 @@ class Chart extends AbstractStyle
|
|||
* Set the colors to use in a chart.
|
||||
*
|
||||
* @param array $value a list of colors to use in the chart
|
||||
* @return self
|
||||
*/
|
||||
public function setColors($value = array())
|
||||
{
|
||||
|
|
@ -255,6 +264,7 @@ class Chart extends AbstractStyle
|
|||
* Set the chart title
|
||||
*
|
||||
* @param string $value
|
||||
* @return self
|
||||
*/
|
||||
public function setTitle($value = null)
|
||||
{
|
||||
|
|
@ -277,6 +287,7 @@ class Chart extends AbstractStyle
|
|||
* Set chart legend visibility
|
||||
*
|
||||
* @param bool $value
|
||||
* @return self
|
||||
*/
|
||||
public function setShowLegend($value = false)
|
||||
{
|
||||
|
|
@ -285,6 +296,37 @@ class Chart extends AbstractStyle
|
|||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get chart legend position
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getLegendPosition()
|
||||
{
|
||||
return $this->legendPosition;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set chart legend position. choices:
|
||||
* "r" - right of chart
|
||||
* "b" - bottom of chart
|
||||
* "t" - top of chart
|
||||
* "l" - left of chart
|
||||
* "tr" - top right of chart
|
||||
*
|
||||
* default: right
|
||||
*
|
||||
* @param string $legendPosition
|
||||
* @return self
|
||||
*/
|
||||
public function setLegendPosition($legendPosition = 'r')
|
||||
{
|
||||
$enum = array('r', 'b', 't', 'l', 'tr');
|
||||
$this->legendPosition = $this->setEnumVal($legendPosition, $enum, $this->legendPosition);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/*
|
||||
* Show labels for axis
|
||||
*
|
||||
|
|
@ -328,7 +370,10 @@ class Chart extends AbstractStyle
|
|||
{
|
||||
foreach (array_keys($this->dataLabelOptions) as $option) {
|
||||
if (isset($values[$option])) {
|
||||
$this->dataLabelOptions[$option] = $this->setBoolVal($values[$option], $this->dataLabelOptions[$option]);
|
||||
$this->dataLabelOptions[$option] = $this->setBoolVal(
|
||||
$values[$option],
|
||||
$this->dataLabelOptions[$option]
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -131,6 +131,7 @@ class Chart extends AbstractPart
|
|||
|
||||
$title = $style->getTitle();
|
||||
$showLegend = $style->isShowLegend();
|
||||
$legendPosition = $style->getLegendPosition();
|
||||
|
||||
//Chart title
|
||||
if ($title) {
|
||||
|
|
@ -154,7 +155,7 @@ class Chart extends AbstractPart
|
|||
|
||||
//Chart legend
|
||||
if ($showLegend) {
|
||||
$xmlWriter->writeRaw('<c:legend><c:legendPos val="r"/></c:legend>');
|
||||
$xmlWriter->writeRaw('<c:legend><c:legendPos val="' . $legendPosition . '"/></c:legend>');
|
||||
}
|
||||
|
||||
$xmlWriter->startElement('c:plotArea');
|
||||
|
|
|
|||
|
|
@ -645,9 +645,9 @@ class HtmlTest extends AbstractWebServerEmbeddedTest
|
|||
public function testParseTableAndCellWidth()
|
||||
{
|
||||
$phpWord = new \PhpOffice\PhpWord\PhpWord();
|
||||
$section = $phpWord->addSection([
|
||||
$section = $phpWord->addSection(array(
|
||||
'orientation' => \PhpOffice\PhpWord\Style\Section::ORIENTATION_LANDSCAPE,
|
||||
]);
|
||||
));
|
||||
|
||||
// borders & backgrounds are here just for better visual comparison
|
||||
$html = <<<HTML
|
||||
|
|
@ -714,9 +714,9 @@ HTML;
|
|||
public function testParseCellspacingRowBgColor()
|
||||
{
|
||||
$phpWord = new \PhpOffice\PhpWord\PhpWord();
|
||||
$section = $phpWord->addSection([
|
||||
$section = $phpWord->addSection(array(
|
||||
'orientation' => \PhpOffice\PhpWord\Style\Section::ORIENTATION_LANDSCAPE,
|
||||
]);
|
||||
));
|
||||
|
||||
// borders & backgrounds are here just for better visual comparison
|
||||
$html = <<<HTML
|
||||
|
|
@ -780,7 +780,7 @@ HTML;
|
|||
$xpath = '/w:document/w:body/w:p[4]/w:pPr/w:pBdr/w:bottom';
|
||||
$this->assertTrue($doc->elementExists($xpath));
|
||||
$this->assertEquals('single', $doc->getElement($xpath)->getAttribute('w:val'));
|
||||
$this->assertEquals(intval(5 * 15 / 2), $doc->getElement($xpath)->getAttribute('w:sz'));
|
||||
$this->assertEquals((int) (5 * 15 / 2), $doc->getElement($xpath)->getAttribute('w:sz'));
|
||||
$this->assertEquals('lightblue', $doc->getElement($xpath)->getAttribute('w:color'));
|
||||
|
||||
$xpath = '/w:document/w:body/w:p[4]/w:pPr/w:spacing';
|
||||
|
|
@ -906,6 +906,6 @@ HTML;
|
|||
|
||||
Html::addHtml($section, $html);
|
||||
$doc = TestHelperDOCX::getDocument($phpWord, 'Word2007');
|
||||
$this->assertTrue(is_object($doc));
|
||||
$this->assertInternalType('object', $doc);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue