You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ab...@apache.org on 2018/10/05 18:07:55 UTC

svn commit: r1842959 - in /poi/trunk/src: examples/src/org/apache/poi/xssf/usermodel/examples/ examples/src/org/apache/poi/xwpf/usermodel/examples/ ooxml/java/org/apache/poi/xddf/usermodel/chart/ ooxml/java/org/apache/poi/xssf/usermodel/

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-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org