more XDDF improvements based on SO examples
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1842876 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
01ad2f9d1a
commit
01b780666b
@ -115,6 +115,8 @@ public class BarChartDemo {
|
||||
series2.setTitle(series[1], chart.setSheetTitle(series[1], 1));
|
||||
|
||||
chart.plot(bar);
|
||||
chart.setTitleText(chartTitle); // https://stackoverflow.com/questions/30532612
|
||||
// chart.setTitleOverlay(overlay);
|
||||
}
|
||||
|
||||
private static void setColumnData(XSLFChart chart, String chartTitle) {
|
||||
|
@ -76,7 +76,9 @@ public class BarChart {
|
||||
|
||||
// Use a category axis for the bottom axis.
|
||||
XDDFCategoryAxis bottomAxis = chart.createCategoryAxis(AxisPosition.BOTTOM);
|
||||
bottomAxis.setTitle("x"); // https://stackoverflow.com/questions/32010765
|
||||
XDDFValueAxis leftAxis = chart.createValueAxis(AxisPosition.LEFT);
|
||||
leftAxis.setTitle("f(x)");
|
||||
leftAxis.setCrosses(AxisCrosses.AUTO_ZERO);
|
||||
|
||||
XDDFDataSource<Double> xs = XDDFDataSourcesFactory.fromNumericCellRange(sheet, new CellRangeAddress(0, 0, 0, NUM_OF_COLUMNS - 1));
|
||||
|
@ -77,7 +77,9 @@ public class LineChart {
|
||||
|
||||
// Use a category axis for the bottom axis.
|
||||
XDDFCategoryAxis bottomAxis = chart.createCategoryAxis(AxisPosition.BOTTOM);
|
||||
bottomAxis.setTitle("x"); // https://stackoverflow.com/questions/32010765
|
||||
XDDFValueAxis leftAxis = chart.createValueAxis(AxisPosition.LEFT);
|
||||
leftAxis.setTitle("f(x)");
|
||||
leftAxis.setCrosses(AxisCrosses.AUTO_ZERO);
|
||||
|
||||
XDDFDataSource<Double> xs = XDDFDataSourcesFactory.fromNumericCellRange(sheet, new CellRangeAddress(0, 0, 0, NUM_OF_COLUMNS - 1));
|
||||
|
@ -77,7 +77,9 @@ public class ScatterChart {
|
||||
legend.setPosition(LegendPosition.TOP_RIGHT);
|
||||
|
||||
XDDFValueAxis bottomAxis = chart.createValueAxis(AxisPosition.BOTTOM);
|
||||
bottomAxis.setTitle("x"); // https://stackoverflow.com/questions/32010765
|
||||
XDDFValueAxis leftAxis = chart.createValueAxis(AxisPosition.LEFT);
|
||||
leftAxis.setTitle("f(x)");
|
||||
leftAxis.setCrosses(AxisCrosses.AUTO_ZERO);
|
||||
|
||||
XDDFDataSource<Double> xs = XDDFDataSourcesFactory.fromNumericCellRange(sheet, new CellRangeAddress(0, 0, 0, NUM_OF_COLUMNS - 1));
|
||||
|
@ -117,6 +117,8 @@ public class BarChartExample {
|
||||
series2.setTitle(series[1], chart.setSheetTitle(series[1], 1));
|
||||
|
||||
chart.plot(bar);
|
||||
chart.setTitleText(chartTitle); // https://stackoverflow.com/questions/30532612
|
||||
// chart.setTitleOverlay(overlay);
|
||||
}
|
||||
|
||||
private static void setColumnData(XWPFChart chart, String chartTitle) {
|
||||
|
@ -79,6 +79,19 @@ public class XDDFCategoryAxis extends XDDFChartAxis {
|
||||
return new XDDFShapeProperties(properties);
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 4.0.1
|
||||
*/
|
||||
@Override
|
||||
public void setTitle(String text) {
|
||||
if (!ctCatAx.isSetTitle()) {
|
||||
ctCatAx.addNewTitle();
|
||||
}
|
||||
XDDFTitle title = new XDDFTitle(null, ctCatAx.getTitle());
|
||||
title.setOverlay(false);
|
||||
title.setText(text);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSetMinorUnit() {
|
||||
return false;
|
||||
|
@ -70,7 +70,6 @@ import org.openxmlformats.schemas.drawingml.x2006.chart.CTScatterChart;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTSerAx;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTSurface;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTTitle;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTTx;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTValAx;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.chart.ChartSpaceDocument;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.main.CTShapeProperties;
|
||||
@ -252,11 +251,27 @@ public abstract class XDDFChart extends POIXMLDocumentPart implements TextContai
|
||||
if (!chart.isSetTitle()) {
|
||||
chart.addNewTitle();
|
||||
}
|
||||
CTTitle title = chart.getTitle();
|
||||
if (title.isSetOverlay()) {
|
||||
title.getOverlay().setVal(overlay);
|
||||
new XDDFTitle(this, chart.getTitle()).setOverlay(overlay);
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 4.0.1
|
||||
*/
|
||||
public void setTitleText(String text) {
|
||||
if (!chart.isSetTitle()) {
|
||||
chart.addNewTitle();
|
||||
}
|
||||
new XDDFTitle(this, chart.getTitle()).setText(text);
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 4.0.1
|
||||
*/
|
||||
public XDDFTitle getTitle() {
|
||||
if (chart.isSetTitle()) {
|
||||
return new XDDFTitle(this, chart.getTitle());
|
||||
} else {
|
||||
title.addNewOverlay().setVal(overlay);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@ -271,15 +286,7 @@ public abstract class XDDFChart extends POIXMLDocumentPart implements TextContai
|
||||
if (!chart.isSetTitle()) {
|
||||
return null;
|
||||
}
|
||||
CTTitle title = chart.getTitle();
|
||||
if (!title.isSetTx()) {
|
||||
return null;
|
||||
}
|
||||
CTTx tx = title.getTx();
|
||||
if (!tx.isSetRich()) {
|
||||
return null;
|
||||
}
|
||||
return new XDDFTextBody(this, tx.getRich());
|
||||
return new XDDFTitle(this, chart.getTitle()).getBody();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -56,6 +56,11 @@ public abstract class XDDFChartAxis implements HasShapeProperties {
|
||||
|
||||
public abstract XDDFShapeProperties getOrAddMinorGridProperties();
|
||||
|
||||
/**
|
||||
* @since 4.0.1
|
||||
*/
|
||||
public abstract void setTitle(String text);
|
||||
|
||||
/**
|
||||
* @return true if minor unit value is defined, false otherwise
|
||||
*/
|
||||
|
@ -0,0 +1,79 @@
|
||||
/*
|
||||
* ====================================================================
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
* ====================================================================
|
||||
*/
|
||||
|
||||
package org.apache.poi.xddf.usermodel.chart;
|
||||
|
||||
import org.apache.poi.util.Beta;
|
||||
import org.apache.poi.xddf.usermodel.text.TextContainer;
|
||||
import org.apache.poi.xddf.usermodel.text.XDDFTextBody;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTTitle;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.chart.CTTx;
|
||||
|
||||
/**
|
||||
* @since 4.0.1
|
||||
*/
|
||||
@Beta
|
||||
public class XDDFTitle {
|
||||
private final CTTitle title;
|
||||
private final TextContainer parent;
|
||||
|
||||
public XDDFTitle(TextContainer parent, CTTitle title) {
|
||||
this.parent = parent;
|
||||
this.title = title;
|
||||
}
|
||||
|
||||
public XDDFTextBody getBody() {
|
||||
XDDFTextBody body;
|
||||
if (title.isSetTxPr()) {
|
||||
body = new XDDFTextBody(parent, title.getTxPr());
|
||||
} else {
|
||||
if (!title.isSetTx()) {
|
||||
title.addNewTx();
|
||||
}
|
||||
CTTx tx = title.getTx();
|
||||
if (!tx.isSetRich()) {
|
||||
tx.addNewRich();
|
||||
}
|
||||
body = new XDDFTextBody(parent, tx.getRich());
|
||||
}
|
||||
return body;
|
||||
}
|
||||
|
||||
public void setText(String text) {
|
||||
if (!title.isSetLayout()) {
|
||||
title.addNewLayout();
|
||||
}
|
||||
getBody().setText(text);
|
||||
}
|
||||
|
||||
public void setOverlay(Boolean overlay) {
|
||||
if (overlay == null) {
|
||||
if (title.isSetOverlay()) {
|
||||
title.unsetOverlay();
|
||||
}
|
||||
} else {
|
||||
if (title.isSetOverlay()) {
|
||||
title.getOverlay().setVal(overlay);
|
||||
} else {
|
||||
title.addNewOverlay().setVal(overlay);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -78,6 +78,19 @@ public class XDDFValueAxis extends XDDFChartAxis {
|
||||
return new XDDFShapeProperties(properties);
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 4.0.1
|
||||
*/
|
||||
@Override
|
||||
public void setTitle(String text) {
|
||||
if (!ctValAx.isSetTitle()) {
|
||||
ctValAx.addNewTitle();
|
||||
}
|
||||
XDDFTitle title = new XDDFTitle(null, ctValAx.getTitle());
|
||||
title.setOverlay(false);
|
||||
title.setText(text);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSetMinorUnit() {
|
||||
return ctValAx.isSetMinorUnit();
|
||||
|
@ -67,6 +67,16 @@ public class XDDFParagraphProperties {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 4.0.1
|
||||
*/
|
||||
public XDDFRunProperties addDefaultRunProperties() {
|
||||
if (!props.isSetDefRPr()) {
|
||||
props.addNewDefRPr();
|
||||
}
|
||||
return getDefaultRunProperties();
|
||||
}
|
||||
|
||||
public XDDFRunProperties getDefaultRunProperties() {
|
||||
if (props.isSetDefRPr()) {
|
||||
return new XDDFRunProperties(props.getDefRPr());
|
||||
|
@ -70,6 +70,19 @@ public class XDDFTextBody {
|
||||
return p;
|
||||
}
|
||||
|
||||
public void setText(String text) {
|
||||
if (_body.sizeOfPArray() > 0) {
|
||||
// remove all but first paragraph
|
||||
for (int i = _body.sizeOfPArray() - 1; i > 0; i--) {
|
||||
_body.removeP(i);
|
||||
}
|
||||
getParagraph(0).setText(text);
|
||||
} else {
|
||||
// as there were no paragraphs yet, initialize the text body
|
||||
initialize().setText(text);
|
||||
}
|
||||
}
|
||||
|
||||
public XDDFTextParagraph addNewParagraph() {
|
||||
return new XDDFTextParagraph(_body.addNewP(), this);
|
||||
}
|
||||
|
@ -69,6 +69,24 @@ public class XDDFTextParagraph {
|
||||
_runs.add(new XDDFTextRun((CTRegularTextRun) xo, this));
|
||||
}
|
||||
}
|
||||
|
||||
addDefaultRunProperties();
|
||||
addAfterLastRunProperties();
|
||||
}
|
||||
|
||||
public void setText(String text) {
|
||||
// remove all runs
|
||||
for (int i = _p.sizeOfBrArray() - 1; i >= 0; i--) {
|
||||
_p.removeBr(i);
|
||||
}
|
||||
for (int i = _p.sizeOfFldArray() - 1; i >= 0; i--) {
|
||||
_p.removeFld(i);
|
||||
}
|
||||
for (int i = _p.sizeOfRArray() - 1; i >= 0; i--) {
|
||||
_p.removeR(i);
|
||||
}
|
||||
_runs.clear();
|
||||
appendRegularRun(text);
|
||||
}
|
||||
|
||||
public String getText() {
|
||||
@ -662,6 +680,13 @@ public class XDDFTextParagraph {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 4.0.1
|
||||
*/
|
||||
public XDDFRunProperties addDefaultRunProperties() {
|
||||
return getOrCreateProperties().addDefaultRunProperties();
|
||||
}
|
||||
|
||||
public XDDFRunProperties getDefaultRunProperties() {
|
||||
if (_p.isSetPPr()) {
|
||||
return getProperties().getDefaultRunProperties();
|
||||
|
Loading…
Reference in New Issue
Block a user