Author: abearez Date: Fri Oct 5 18:07:55 2018 New Revision: 1842959 URL: http://svn.apache.org/viewvc?rev=1842959&view=rev Log: adding tricks from other answers on StackOverflow
Modified: poi/trunk/src/examples/src/org/apache/poi/xssf/usermodel/examples/BarAndLineChart.java poi/trunk/src/examples/src/org/apache/poi/xssf/usermodel/examples/BarChart.java poi/trunk/src/examples/src/org/apache/poi/xwpf/usermodel/examples/BarChartExample.java poi/trunk/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFChart.java poi/trunk/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFTitle.java poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFChart.java Modified: poi/trunk/src/examples/src/org/apache/poi/xssf/usermodel/examples/BarAndLineChart.java URL: http://svn.apache.org/viewvc/poi/trunk/src/examples/src/org/apache/poi/xssf/usermodel/examples/BarAndLineChart.java?rev=1842959&r1=1842958&r2=1842959&view=diff ============================================================================== --- poi/trunk/src/examples/src/org/apache/poi/xssf/usermodel/examples/BarAndLineChart.java (original) +++ poi/trunk/src/examples/src/org/apache/poi/xssf/usermodel/examples/BarAndLineChart.java Fri Oct 5 18:07:55 2018 @@ -22,6 +22,7 @@ package org.apache.poi.xssf.usermodel.ex import java.io.FileOutputStream; import java.util.Random; +import org.apache.poi.common.usermodel.fonts.FontGroup; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.ss.util.CellReference; import org.apache.poi.xddf.usermodel.PresetColor; @@ -33,6 +34,7 @@ import org.apache.poi.xddf.usermodel.cha import org.apache.poi.xddf.usermodel.chart.AxisPosition; import org.apache.poi.xddf.usermodel.chart.BarDirection; import org.apache.poi.xddf.usermodel.chart.ChartTypes; +import org.apache.poi.xddf.usermodel.chart.LayoutMode; import org.apache.poi.xddf.usermodel.chart.LegendPosition; import org.apache.poi.xddf.usermodel.chart.XDDFBarChartData; import org.apache.poi.xddf.usermodel.chart.XDDFCategoryAxis; @@ -41,8 +43,13 @@ import org.apache.poi.xddf.usermodel.cha import org.apache.poi.xddf.usermodel.chart.XDDFChartLegend; import org.apache.poi.xddf.usermodel.chart.XDDFDataSourcesFactory; import org.apache.poi.xddf.usermodel.chart.XDDFLineChartData; +import org.apache.poi.xddf.usermodel.chart.XDDFManualLayout; import org.apache.poi.xddf.usermodel.chart.XDDFNumericalDataSource; import org.apache.poi.xddf.usermodel.chart.XDDFValueAxis; +import org.apache.poi.xddf.usermodel.text.UnderlineType; +import org.apache.poi.xddf.usermodel.text.XDDFFont; +import org.apache.poi.xddf.usermodel.text.XDDFRunProperties; +import org.apache.poi.xddf.usermodel.text.XDDFTextParagraph; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFChart; import org.apache.poi.xssf.usermodel.XSSFClientAnchor; @@ -51,6 +58,10 @@ import org.apache.poi.xssf.usermodel.XSS import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; +// original contributions by Axel Richter on https://stackoverflow.com/questions/47065690 +// additional title formatting from https://stackoverflow.com/questions/50418856 +// and legend positioning from https://stackoverflow.com/questions/49615379 +// this would probably be an answer for https://stackoverflow.com/questions/36447925 too public class BarAndLineChart { private static final int NUM_OF_ROWS = 7; private static final Random RNG = new Random(); @@ -79,6 +90,21 @@ public class BarAndLineChart { XSSFClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 4, 0, 11, 15); XSSFChart chart = drawing.createChart(anchor); + chart.setTitleText("This is my title"); + chart.setTitleOverlay(true); + XDDFRunProperties properties = new XDDFRunProperties(); + properties.setBold(true); + properties.setItalic(true); + properties.setUnderline(UnderlineType.DOT_DOT_DASH_HEAVY); + properties.setFontSize(22.5); + XDDFFont[] fonts = new XDDFFont[]{ + new XDDFFont(FontGroup.LATIN, "Calibri", null, null, null), + new XDDFFont(FontGroup.COMPLEX_SCRIPT, "Liberation Sans", null, null, null) + }; + properties.setFonts(fonts); + properties.setLineProperties(solidLine(PresetColor.SIENNA)); + XDDFTextParagraph paragraph = chart.getTitle().getBody().getParagraph(0); + paragraph.setDefaultRunProperties(properties); // the data sources XDDFCategoryDataSource xs = XDDFDataSourcesFactory.fromStringCellRange(sheet, @@ -129,8 +155,13 @@ public class BarAndLineChart { // legend XDDFChartLegend legend = chart.getOrAddLegend(); - legend.setPosition(LegendPosition.BOTTOM); + legend.setPosition(LegendPosition.LEFT); legend.setOverlay(false); + XDDFManualLayout layout = legend.getOrAddManualLayout(); + layout.setXMode(LayoutMode.EDGE); + layout.setYMode(LayoutMode.EDGE); + layout.setX(0.00); //left edge of the chart + layout.setY(0.25); //25% of chart's height from top edge of the chart try (FileOutputStream fileOut = new FileOutputStream("BarAndLineChart.xlsx")) { wb.write(fileOut); @@ -150,9 +181,7 @@ public class BarAndLineChart { } private static void solidLineSeries(XDDFChartData data, int index, PresetColor color) { - XDDFSolidFillProperties fill = new XDDFSolidFillProperties(XDDFColor.from(color)); - XDDFLineProperties line = new XDDFLineProperties(); - line.setFillProperties(fill); + XDDFLineProperties line = solidLine(color); XDDFChartData.Series series = data.getSeries().get(index); XDDFShapeProperties properties = series.getShapeProperties(); if (properties == null) { @@ -161,4 +190,11 @@ public class BarAndLineChart { properties.setLineProperties(line); series.setShapeProperties(properties); } + + private static XDDFLineProperties solidLine(PresetColor color) { + XDDFSolidFillProperties fill = new XDDFSolidFillProperties(XDDFColor.from(color)); + XDDFLineProperties line = new XDDFLineProperties(); + line.setFillProperties(fill); + return line; + } } Modified: poi/trunk/src/examples/src/org/apache/poi/xssf/usermodel/examples/BarChart.java URL: http://svn.apache.org/viewvc/poi/trunk/src/examples/src/org/apache/poi/xssf/usermodel/examples/BarChart.java?rev=1842959&r1=1842958&r2=1842959&view=diff ============================================================================== --- poi/trunk/src/examples/src/org/apache/poi/xssf/usermodel/examples/BarChart.java (original) +++ poi/trunk/src/examples/src/org/apache/poi/xssf/usermodel/examples/BarChart.java Fri Oct 5 18:07:55 2018 @@ -71,6 +71,8 @@ public class BarChart { XSSFClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 0, 5, 10, 15); XSSFChart chart = drawing.createChart(anchor); + chart.setTitleText("x = 2x and x = 3x"); + chart.setTitleOverlay(false); XDDFChartLegend legend = chart.getOrAddLegend(); legend.setPosition(LegendPosition.TOP_RIGHT); Modified: poi/trunk/src/examples/src/org/apache/poi/xwpf/usermodel/examples/BarChartExample.java URL: http://svn.apache.org/viewvc/poi/trunk/src/examples/src/org/apache/poi/xwpf/usermodel/examples/BarChartExample.java?rev=1842959&r1=1842958&r2=1842959&view=diff ============================================================================== --- poi/trunk/src/examples/src/org/apache/poi/xwpf/usermodel/examples/BarChartExample.java (original) +++ poi/trunk/src/examples/src/org/apache/poi/xwpf/usermodel/examples/BarChartExample.java Fri Oct 5 18:07:55 2018 @@ -118,7 +118,7 @@ public class BarChartExample { chart.plot(bar); chart.setTitleText(chartTitle); // https://stackoverflow.com/questions/30532612 - // chart.setTitleOverlay(overlay); + chart.setTitleOverlay(false); } private static void setColumnData(XWPFChart chart, String chartTitle) { Modified: poi/trunk/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFChart.java URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFChart.java?rev=1842959&r1=1842958&r2=1842959&view=diff ============================================================================== --- poi/trunk/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFChart.java (original) +++ poi/trunk/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFChart.java Fri Oct 5 18:07:55 2018 @@ -255,6 +255,10 @@ public abstract class XDDFChart extends } /** + * Sets the title text as a static string. + * + * @param text + * to use as new title * @since 4.0.1 */ public void setTitleText(String text) { Modified: poi/trunk/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFTitle.java URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFTitle.java?rev=1842959&r1=1842958&r2=1842959&view=diff ============================================================================== --- poi/trunk/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFTitle.java (original) +++ poi/trunk/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFTitle.java Fri Oct 5 18:07:55 2018 @@ -39,20 +39,17 @@ public class XDDFTitle { } 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()); + if (!title.isSetTx()) { + title.addNewTx(); } - return body; + CTTx tx = title.getTx(); + if (tx.isSetStrRef()) { + tx.unsetStrRef(); + } + if (!tx.isSetRich()) { + tx.addNewRich(); + } + return new XDDFTextBody(parent, tx.getRich()); } public void setText(String text) { Modified: poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFChart.java URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFChart.java?rev=1842959&r1=1842958&r2=1842959&view=diff ============================================================================== --- poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFChart.java (original) +++ poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFChart.java Fri Oct 5 18:07:55 2018 @@ -55,10 +55,6 @@ import org.openxmlformats.schemas.drawin 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.main.CTRegularTextRun; -import org.openxmlformats.schemas.drawingml.x2006.main.CTTextBody; -import org.openxmlformats.schemas.drawingml.x2006.main.CTTextField; -import org.openxmlformats.schemas.drawingml.x2006.main.CTTextParagraph; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.w3c.dom.Text; @@ -295,60 +291,6 @@ public final class XSSFChart extends XDD } /** - * Sets the title text as a static string. - * - * @param newTitle - * to use - */ - @Override - public void setTitleText(String newTitle) { - CTTitle ctTitle; - if (chart.isSetTitle()) { - ctTitle = chart.getTitle(); - } else { - ctTitle = chart.addNewTitle(); - } - - CTTx tx; - if (ctTitle.isSetTx()) { - tx = ctTitle.getTx(); - } else { - tx = ctTitle.addNewTx(); - } - - if (tx.isSetStrRef()) { - tx.unsetStrRef(); - } - - CTTextBody rich; - if (tx.isSetRich()) { - rich = tx.getRich(); - } else { - rich = tx.addNewRich(); - rich.addNewBodyPr(); // body properties must exist (but can be - // empty) - } - - CTTextParagraph para; - if (rich.sizeOfPArray() > 0) { - para = rich.getPArray(0); - } else { - para = rich.addNewP(); - } - - if (para.sizeOfRArray() > 0) { - CTRegularTextRun run = para.getRArray(0); - run.setT(newTitle); - } else if (para.sizeOfFldArray() > 0) { - CTTextField fld = para.getFldArray(0); - fld.setT(newTitle); - } else { - CTRegularTextRun run = para.addNewR(); - run.setT(newTitle); - } - } - - /** * Get the chart title formula expression if there is one * * @return formula expression or null --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@poi.apache.org For additional commands, e-mail: commits-h...@poi.apache.org