diff --git a/docs/styles.rst b/docs/styles.rst index 18a9c2eca3..06d983e53d 100644 --- a/docs/styles.rst +++ b/docs/styles.rst @@ -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. diff --git a/samples/Sample_32_Chart.php b/samples/Sample_32_Chart.php index c24a6f8e37..bfb9ffe86b 100644 --- a/samples/Sample_32_Chart.php +++ b/samples/Sample_32_Chart.php @@ -25,6 +25,9 @@ $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 @@ $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); } diff --git a/src/PhpWord/Shared/Html.php b/src/PhpWord/Shared/Html.php index 6fa2a64dd3..ac90b5f04b 100644 --- a/src/PhpWord/Shared/Html.php +++ b/src/PhpWord/Shared/Html.php @@ -115,7 +115,7 @@ protected static function parseInlineStyle($node, $styles = array()) // tables, cells if (false !== strpos($val, '%')) { // e.g. or
- $styles['width'] = intval($val) * 50; + $styles['width'] = (int) $val * 50; $styles['unit'] = \PhpOffice\PhpWord\SimpleType\TblWidth::PERCENT; } else { // e.g. , where "2" = 2px (always pixels) - $val = intval($val).'px'; + $val = (int) $val . 'px'; $styles['cellSpacing'] = Converter::cssToTwip($val); break; case 'bgcolor': @@ -693,7 +693,7 @@ protected static function parseStyle($attribute, $styles) // 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], '#'); @@ -871,9 +871,9 @@ protected static function mapAlign($cssAlignment) } /** - * 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) @@ -901,10 +901,10 @@ protected static function mapAlignVertical($alignment) } /** - * Map list style for ordered list - * - * @param string $cssListType - */ + * Map list style for ordered list + * + * @param string $cssListType + */ protected static function mapListType($cssListType) { switch ($cssListType) { @@ -959,12 +959,12 @@ protected static function parseLink($node, $element, &$styles) } /** - * Render horizontal rule - * Note: Word rule is not the same as HTML's
since it does not support width and thus neither alignment - * - * @param \DOMNode $node - * @param \PhpOffice\PhpWord\Element\AbstractContainer $element - */ + * Render horizontal rule + * Note: Word rule is not the same as HTML's
since it does not support width and thus neither alignment + * + * @param \DOMNode $node + * @param \PhpOffice\PhpWord\Element\AbstractContainer $element + */ protected static function parseHorizRule($node, $element) { $styles = self::parseInlineStyle($node); @@ -972,19 +972,19 @@ protected static function parseHorizRule($node, $element) //
is implemented as an empty paragraph - extending 100% inside the section // Some properties may be controlled, e.g.
- $fontStyle = $styles + ['size' => 3]; + $fontStyle = $styles + array('size' => 3); - $paragraphStyle = $styles + [ - 'lineHeight' => 0.25, // multiply default line height - e.g. 1, 1.5 etc - 'spacing' => 0, // twip - 'spaceBefore' => 120, // twip, 240/2 (default line height) - 'spaceAfter' => 120, // twip - 'borderBottomSize' => empty($styles['line-height']) ? 1 : $styles['line-height'], + $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) + 'spaceAfter' => 120, // twip + '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:
cannot be: // - table - throws error "cannot be inside textruns", e.g. lists diff --git a/src/PhpWord/Style/Chart.php b/src/PhpWord/Style/Chart.php index 06b4829c3c..c02c0af4d8 100644 --- a/src/PhpWord/Style/Chart.php +++ b/src/PhpWord/Style/Chart.php @@ -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 @@ public function getColors() * 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 @@ public function getTitle() * Set the chart title * * @param string $value + * @return self */ public function setTitle($value = null) { @@ -277,6 +287,7 @@ public function isShowLegend() * Set chart legend visibility * * @param bool $value + * @return self */ public function setShowLegend($value = false) { @@ -285,6 +296,37 @@ public function setShowLegend($value = false) 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 @@ public function setDataLabelOptions($values = array()) { 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] + ); } } } diff --git a/src/PhpWord/Writer/Word2007/Part/Chart.php b/src/PhpWord/Writer/Word2007/Part/Chart.php index e0d1752b31..e3b56eaa81 100644 --- a/src/PhpWord/Writer/Word2007/Part/Chart.php +++ b/src/PhpWord/Writer/Word2007/Part/Chart.php @@ -131,6 +131,7 @@ private function writePlotArea(XMLWriter $xmlWriter) $title = $style->getTitle(); $showLegend = $style->isShowLegend(); + $legendPosition = $style->getLegendPosition(); //Chart title if ($title) { @@ -154,7 +155,7 @@ private function writePlotArea(XMLWriter $xmlWriter) //Chart legend if ($showLegend) { - $xmlWriter->writeRaw(''); + $xmlWriter->writeRaw(''); } $xmlWriter->startElement('c:plotArea'); diff --git a/tests/PhpWord/Shared/HtmlTest.php b/tests/PhpWord/Shared/HtmlTest.php index 7a806c2624..9f355b670e 100644 --- a/tests/PhpWord/Shared/HtmlTest.php +++ b/tests/PhpWord/Shared/HtmlTest.php @@ -634,14 +634,14 @@ public function testParseLetterSpacing() } /** - * Parse widths in tables and cells, which also allows for controlling column width - */ + * Parse widths in tables and cells, which also allows for controlling column width + */ 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 = <<addSection([ + $section = $phpWord->addSection(array( 'orientation' => \PhpOffice\PhpWord\Style\Section::ORIENTATION_LANDSCAPE, - ]); + )); // borders & backgrounds are here just for better visual comparison $html = <<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'; @@ -785,8 +785,8 @@ public function testParseHorizRule() } /** - * Parse ordered list start & numbering style - */ + * Parse ordered list start & numbering style + */ public function testParseOrderedList() { $phpWord = new \PhpOffice\PhpWord\PhpWord(); @@ -846,8 +846,8 @@ public function testParseOrderedList() } /** - * Parse ordered list start & numbering style - */ + * Parse ordered list start & numbering style + */ public function testParseVerticalAlign() { $phpWord = new \PhpOffice\PhpWord\PhpWord(); @@ -886,8 +886,8 @@ public function testParseVerticalAlign() } /** - * Fix bug - don't decode double quotes inside double quoted string - */ + * Fix bug - don't decode double quotes inside double quoted string + */ public function testDontDecodeAlreadyEncodedDoubleQuotes() { $phpWord = new \PhpOffice\PhpWord\PhpWord(); @@ -900,6 +900,6 @@ public function testDontDecodeAlreadyEncodedDoubleQuotes() Html::addHtml($section, $html); $doc = TestHelperDOCX::getDocument($phpWord, 'Word2007'); - $this->assertTrue(is_object($doc)); + $this->assertInternalType('object', $doc); } }