Skip to content

Commit b72f395

Browse files
zhengwhizzProgi1984
authored andcommitted
PowerPoint 2007 Writer : Added support to Font for Axis tick label & chinese font support
1 parent 0016a93 commit b72f395

File tree

6 files changed

+262
-9
lines changed

6 files changed

+262
-9
lines changed

docs/changes/1.1.0.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
- PowerPoint2007 Reader
1111
- PowerPoint2007 Writer
1212
- Added support for PHP 8.2 & 8.3 - [@Progi1984](https://github.com/Progi1984) in [#769](https://github.com/PHPOffice/PHPPresentation/pull/769)
13+
- PowerPoint 2007 Writer : Added support to Font for Axis tick label & chinese font support - [@zhengwhizz](https://github.com/zhengwhizz) in [#774](https://github.com/PHPOffice/PHPPresentation/pull/774)
1314

1415
## Bugfixes
1516

docs/usage/shapes/chart.md

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,8 @@ $shape->getPlotArea()->setType($line);
165165
$shape->getPlotArea()->getAxisX()->getOutline()->setWidth(10);
166166
$shape->getPlotArea()->getAxisX()->getOutline()->getFill()->setFillType(Fill::FILL_SOLID)->setStartColor(new Color(Color::COLOR_BLUE));
167167
```
168-
#### Tick Label Position
168+
#### Tick Label
169+
##### Position
169170

170171
You can define the tick label position with the `setTickLabelPosition` method.
171172
For resetting it, you pass `Axis::TICK_LABEL_POSITION_NEXT_TO` as parameter to this method.
@@ -187,6 +188,28 @@ $shape = $slide->createChartShape();
187188
$shape->getPlotArea()->setType($line);
188189
$shape->getPlotArea()->getAxisY()->setTickLabelPosition(Axis::TICK_LABEL_POSITION_LOW);
189190
```
191+
192+
##### Font
193+
194+
You can define the tick label font with the `setTickLabelFont` method.
195+
For resetting it, you pass `null` as parameter to this method.
196+
197+
``` php
198+
<?php
199+
200+
use PhpOffice\PhpPresentation\Shape\Chart\Axis;
201+
use PhpOffice\PhpPresentation\Style\Color;
202+
use PhpOffice\PhpPresentation\Style\Font;
203+
204+
$line = new Line();
205+
$font = new Font();
206+
$font->setColor(new Color('C00000'))
207+
208+
$shape = $slide->createChartShape();
209+
$shape->getPlotArea()->setType($line);
210+
$shape->getPlotArea()->getAxisY()->setTickLabelFont($font);
211+
```
212+
190213
#### Tick Marks
191214

192215
For Axis Y, you can define tick mark with `setMinorTickMark` & `setMajorTickMark` methods.

src/PhpPresentation/Shape/Chart/Axis.php

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,13 @@ class Axis implements ComparableInterface
6969
*/
7070
private $font;
7171

72+
/**
73+
* Tick lable font.
74+
*
75+
* @var Font
76+
*/
77+
protected $tickLabelFont;
78+
7279
/**
7380
* @var null|Gridlines
7481
*/
@@ -144,6 +151,7 @@ public function __construct(string $title = 'Axis Title')
144151
$this->title = $title;
145152
$this->outline = new Outline();
146153
$this->font = new Font();
154+
$this->tickLabelFont = new Font();
147155
}
148156

149157
/**
@@ -172,6 +180,24 @@ public function getFont(): ?Font
172180
return $this->font;
173181
}
174182

183+
/**
184+
* Set tick label font.
185+
*/
186+
public function setTickLabelFont(?Font $font = null): self
187+
{
188+
$this->tickLabelFont = $font;
189+
190+
return $this;
191+
}
192+
193+
/**
194+
* Get tick label font.
195+
*/
196+
public function getTickLabelFont(): ?Font
197+
{
198+
return $this->tickLabelFont;
199+
}
200+
175201
/**
176202
* Set font.
177203
*/

src/PhpPresentation/Writer/PowerPoint2007/PptCharts.php

Lines changed: 99 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -883,7 +883,6 @@ protected function writeTypeBar(XMLWriter $objWriter, Bar $subject, bool $includ
883883

884884
// a:defRPr
885885
$objWriter->startElement('a:defRPr');
886-
887886
$objWriter->writeAttribute('b', ($series->getFont()->isBold() ? 'true' : 'false'));
888887
$objWriter->writeAttribute('i', ($series->getFont()->isItalic() ? 'true' : 'false'));
889888
$objWriter->writeAttribute('strike', ($series->getFont()->isStrikethrough() ? 'sngStrike' : 'noStrike'));
@@ -895,12 +894,16 @@ protected function writeTypeBar(XMLWriter $objWriter, Bar $subject, bool $includ
895894
// a:solidFill
896895
$objWriter->startElement('a:solidFill');
897896
$this->writeColor($objWriter, $series->getFont()->getColor());
898-
// >a:solidFill
899897
$objWriter->endElement();
898+
900899
// a:latin
901900
$objWriter->startElement('a:latin');
902901
$objWriter->writeAttribute('typeface', $series->getFont()->getName());
903-
// >a:latin
902+
$objWriter->endElement();
903+
904+
// a:ea
905+
$objWriter->startElement('a:ea');
906+
$objWriter->writeAttribute('typeface', $series->getFont()->getName());
904907
$objWriter->endElement();
905908

906909
// >a:defRPr
@@ -1106,6 +1109,10 @@ protected function writeTypeBar3D(XMLWriter $objWriter, Bar3D $subject, bool $in
11061109
$objWriter->startElement('a:latin');
11071110
$objWriter->writeAttribute('typeface', $series->getFont()->getName());
11081111
$objWriter->endElement();
1112+
// a:ea
1113+
$objWriter->startElement('a:ea');
1114+
$objWriter->writeAttribute('typeface', $series->getFont()->getName());
1115+
$objWriter->endElement();
11091116

11101117
$objWriter->endElement();
11111118

@@ -1309,6 +1316,10 @@ protected function writeTypeDoughnut(XMLWriter $objWriter, Doughnut $subject, bo
13091316
$objWriter->startElement('a:latin');
13101317
$objWriter->writeAttribute('typeface', $series->getFont()->getName());
13111318
$objWriter->endElement();
1319+
// a:ea
1320+
$objWriter->startElement('a:ea');
1321+
$objWriter->writeAttribute('typeface', $series->getFont()->getName());
1322+
$objWriter->endElement();
13121323

13131324
// c:dLbls\c:txPr\a:p\a:pPr\a:defRPr\
13141325
$objWriter->endElement();
@@ -1450,6 +1461,10 @@ protected function writeTypePie(XMLWriter $objWriter, Pie $subject, bool $includ
14501461
$objWriter->startElement('a:latin');
14511462
$objWriter->writeAttribute('typeface', $series->getFont()->getName());
14521463
$objWriter->endElement();
1464+
// a:ea
1465+
$objWriter->startElement('a:ea');
1466+
$objWriter->writeAttribute('typeface', $series->getFont()->getName());
1467+
$objWriter->endElement();
14531468

14541469
$objWriter->endElement();
14551470

@@ -1610,6 +1625,10 @@ protected function writeTypePie3D(XMLWriter $objWriter, Pie3D $subject, bool $in
16101625
$objWriter->startElement('a:latin');
16111626
$objWriter->writeAttribute('typeface', $series->getFont()->getName());
16121627
$objWriter->endElement();
1628+
// a:ea
1629+
$objWriter->startElement('a:ea');
1630+
$objWriter->writeAttribute('typeface', $series->getFont()->getName());
1631+
$objWriter->endElement();
16131632

16141633
$objWriter->endElement();
16151634

@@ -1759,6 +1778,10 @@ protected function writeTypeLine(XMLWriter $objWriter, Line $subject, bool $incl
17591778
$objWriter->startElement('a:latin');
17601779
$objWriter->writeAttribute('typeface', $series->getFont()->getName());
17611780
$objWriter->endElement();
1781+
// a:ea
1782+
$objWriter->startElement('a:ea');
1783+
$objWriter->writeAttribute('typeface', $series->getFont()->getName());
1784+
$objWriter->endElement();
17621785

17631786
$objWriter->endElement();
17641787

@@ -1931,6 +1954,10 @@ protected function writeTypeRadar(XMLWriter $objWriter, Radar $subject, bool $in
19311954
$objWriter->startElement('a:latin');
19321955
$objWriter->writeAttribute('typeface', $series->getFont()->getName());
19331956
$objWriter->endElement();
1957+
// a:ea
1958+
$objWriter->startElement('a:ea');
1959+
$objWriter->writeAttribute('typeface', $series->getFont()->getName());
1960+
$objWriter->endElement();
19341961

19351962
$objWriter->endElement();
19361963

@@ -2093,6 +2120,10 @@ protected function writeTypeScatter(XMLWriter $objWriter, Scatter $subject, bool
20932120
$objWriter->startElement('a:latin');
20942121
$objWriter->writeAttribute('typeface', $series->getFont()->getName());
20952122
$objWriter->endElement();
2123+
// a:ea
2124+
$objWriter->startElement('a:ea');
2125+
$objWriter->writeAttribute('typeface', $series->getFont()->getName());
2126+
$objWriter->endElement();
20962127

20972128
$objWriter->endElement();
20982129

@@ -2366,6 +2397,10 @@ protected function writeAxis(XMLWriter $objWriter, Chart\Axis $oAxis, string $ty
23662397
$objWriter->startElement('a:latin');
23672398
$objWriter->writeAttribute('typeface', $oAxis->getFont()->getName());
23682399
$objWriter->endElement();
2400+
// a:ea
2401+
$objWriter->startElement('a:ea');
2402+
$objWriter->writeAttribute('typeface', $oAxis->getFont()->getName());
2403+
$objWriter->endElement();
23692404

23702405
$objWriter->endElement();
23712406

@@ -2429,9 +2464,65 @@ protected function writeAxis(XMLWriter $objWriter, Chart\Axis $oAxis, string $ty
24292464

24302465
// c:spPr
24312466
$objWriter->startElement('c:spPr');
2432-
// Outline
24332467
$this->writeOutline($objWriter, $oAxis->getOutline());
2434-
// ##c:spPr
2468+
$objWriter->endElement();
2469+
2470+
// c:txPr
2471+
$objWriter->startElement('c:txPr');
2472+
2473+
// a:bodyPr
2474+
$objWriter->writeElement('a:bodyPr', null);
2475+
2476+
// a:lstStyle
2477+
$objWriter->writeElement('a:lstStyle', null);
2478+
2479+
// a:p
2480+
$objWriter->startElement('a:p');
2481+
2482+
// a:pPr
2483+
$objWriter->startElement('a:pPr');
2484+
2485+
// a:defRPr
2486+
$objWriter->startElement('a:defRPr');
2487+
$objWriter->writeAttribute('b', ($oAxis->getTickLabelFont()->isBold() ? 'true' : 'false'));
2488+
$objWriter->writeAttribute('i', ($oAxis->getTickLabelFont()->isItalic() ? 'true' : 'false'));
2489+
$objWriter->writeAttribute('strike', ($oAxis->getTickLabelFont()->isStrikethrough() ? 'sngStrike' : 'noStrike'));
2490+
$objWriter->writeAttribute('sz', ($oAxis->getTickLabelFont()->getSize() * 100));
2491+
$objWriter->writeAttribute('u', $oAxis->getTickLabelFont()->getUnderline());
2492+
$objWriter->writeAttributeIf($oAxis->getTickLabelFont()->isSuperScript(), 'baseline', '300000');
2493+
$objWriter->writeAttributeIf($oAxis->getTickLabelFont()->isSubScript(), 'baseline', '-250000');
2494+
2495+
// Font - a:solidFill
2496+
$objWriter->startElement('a:solidFill');
2497+
$this->writeColor($objWriter, $oAxis->getTickLabelFont()->getColor());
2498+
$objWriter->endElement();
2499+
2500+
// Font - a:latin
2501+
$objWriter->startElement('a:latin');
2502+
$objWriter->writeAttribute('typeface', $oAxis->getTickLabelFont()->getName());
2503+
$objWriter->endElement();
2504+
2505+
// Font - a:ea
2506+
$objWriter->startElement('a:ea');
2507+
$objWriter->writeAttribute('typeface', $oAxis->getTickLabelFont()->getName());
2508+
$objWriter->endElement();
2509+
2510+
//## a:defRPr
2511+
$objWriter->endElement();
2512+
2513+
//## a:pPr
2514+
$objWriter->endElement();
2515+
2516+
// a:endParaRPr
2517+
$objWriter->startElement('a:endParaRPr');
2518+
$objWriter->writeAttribute('lang', 'en-US');
2519+
$objWriter->writeAttribute('dirty', '0');
2520+
$objWriter->endElement();
2521+
2522+
// ## a:p
2523+
$objWriter->endElement();
2524+
2525+
// ## c:txPr
24352526
$objWriter->endElement();
24362527

24372528
// c:crossAx
@@ -2462,7 +2553,7 @@ protected function writeAxis(XMLWriter $objWriter, Chart\Axis $oAxis, string $ty
24622553
$objWriter->endElement();
24632554

24642555
// c:majorUnit
2465-
if ($oAxis->getMajorUnit() != null) {
2556+
if ($oAxis->getMajorUnit() !== null) {
24662557
$objWriter->startElement('c:tickLblSkip');
24672558
$objWriter->writeAttribute('val', $oAxis->getMajorUnit());
24682559
$objWriter->endElement();
@@ -2482,14 +2573,14 @@ protected function writeAxis(XMLWriter $objWriter, Chart\Axis $oAxis, string $ty
24822573
$objWriter->endElement();
24832574

24842575
// c:majorUnit
2485-
if (null != $oAxis->getMajorUnit()) {
2576+
if ($oAxis->getMajorUnit() !== null) {
24862577
$objWriter->startElement('c:majorUnit');
24872578
$objWriter->writeAttribute('val', $oAxis->getMajorUnit());
24882579
$objWriter->endElement();
24892580
}
24902581

24912582
// c:minorUnit
2492-
if (null != $oAxis->getMinorUnit()) {
2583+
if ($oAxis->getMinorUnit() !== null) {
24932584
$objWriter->startElement('c:minorUnit');
24942585
$objWriter->writeAttribute('val', $oAxis->getMinorUnit());
24952586
$objWriter->endElement();

tests/PhpPresentation/Tests/Shape/Chart/AxisTest.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,17 @@ public function testOutline(): void
156156
self::assertInstanceOf(Outline::class, $object->getOutline());
157157
}
158158

159+
public function testTickLabelFont(): void
160+
{
161+
$object = new Axis();
162+
163+
self::assertInstanceOf(Font::class, $object->getTickLabelFont());
164+
self::assertInstanceOf(Axis::class, $object->setTickLabelFont());
165+
self::assertNull($object->getTickLabelFont());
166+
self::assertInstanceOf(Axis::class, $object->setTickLabelFont(new Font()));
167+
self::assertInstanceOf(Font::class, $object->getTickLabelFont());
168+
}
169+
159170
public function testTickLabelPosition(): void
160171
{
161172
$object = new Axis();

0 commit comments

Comments
 (0)