From 4703c18b83d2796c8d7f67bd15c75b74b555fb45 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Alain=20B=C3=A9arez?= Date: Sat, 7 Dec 2019 23:10:32 +0000 Subject: [PATCH] Miscellaneous fixes for chart functionalities git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1871010 13f79535-47bb-0310-9956-ffa450edef68 --- .../poi/xslf/usermodel/ChartFromScratch.java | 17 +++++++--- .../usermodel/chart/XDDFCategoryAxis.java | 3 ++ .../xddf/usermodel/chart/XDDFDateAxis.java | 3 ++ .../poi/xwpf/usermodel/XWPFDocument.java | 33 +++++++++++++------ 4 files changed, 41 insertions(+), 15 deletions(-) diff --git a/src/examples/src/org/apache/poi/xslf/usermodel/ChartFromScratch.java b/src/examples/src/org/apache/poi/xslf/usermodel/ChartFromScratch.java index 1e923b9aab..637b485bda 100644 --- a/src/examples/src/org/apache/poi/xslf/usermodel/ChartFromScratch.java +++ b/src/examples/src/org/apache/poi/xslf/usermodel/ChartFromScratch.java @@ -87,11 +87,9 @@ public class ChartFromScratch { Double[] values2 = listSpeakers.toArray(new Double[0]); try (XMLSlideShow ppt = new XMLSlideShow()) { - XSLFSlide slide = ppt.createSlide(); - XSLFChart chart = ppt.createChart(); - Rectangle2D rect2D = new java.awt.Rectangle(fromCM(1.5), fromCM(4), fromCM(22), fromCM(14)); - slide.addChart(chart, rect2D); - setBarData(chart, chartTitle, series, categories, values1, values2); + createSlideWithChart(ppt, chartTitle, series, categories, values1, values2); + createSlideWithChart(ppt, chartTitle, series, categories, values1, values2); + createSlideWithChart(ppt, chartTitle, series, categories, values1, values2); // save the result try (OutputStream out = new FileOutputStream("chart-from-scratch.pptx")) { ppt.write(out); @@ -101,6 +99,15 @@ public class ChartFromScratch { System.out.println("Done"); } + private static void createSlideWithChart(XMLSlideShow ppt, String chartTitle, String[] series, String[] categories, + Double[] values1, Double[] values2) { + XSLFSlide slide = ppt.createSlide(); + XSLFChart chart = ppt.createChart(); + Rectangle2D rect2D = new java.awt.Rectangle(fromCM(1.5), fromCM(4), fromCM(22), fromCM(14)); + slide.addChart(chart, rect2D); + setBarData(chart, chartTitle, series, categories, values1, values2); + } + private static int fromCM(double cm) { return (int) (Math.rint(cm * Units.EMU_PER_CENTIMETER)); } diff --git a/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFCategoryAxis.java b/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFCategoryAxis.java index 1a0ef8f9f4..bbdccedb13 100644 --- a/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFCategoryAxis.java +++ b/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFCategoryAxis.java @@ -212,6 +212,7 @@ public class XDDFCategoryAxis extends XDDFChartAxis { final long id = getNextAxId(plotArea); ctCatAx = plotArea.addNewCatAx(); ctCatAx.addNewAxId().setVal(id); + ctCatAx.addNewAuto().setVal(false); ctCatAx.addNewAxPos(); ctCatAx.addNewScaling(); ctCatAx.addNewCrosses(); @@ -220,6 +221,8 @@ public class XDDFCategoryAxis extends XDDFChartAxis { ctCatAx.addNewDelete(); ctCatAx.addNewMajorTickMark(); ctCatAx.addNewMinorTickMark(); + ctCatAx.addNewNumFmt().setSourceLinked(true); + ctCatAx.getNumFmt().setFormatCode(""); setPosition(position); setOrientation(AxisOrientation.MIN_MAX); diff --git a/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFDateAxis.java b/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFDateAxis.java index 03cc2cba03..00722ea02a 100644 --- a/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFDateAxis.java +++ b/src/ooxml/java/org/apache/poi/xddf/usermodel/chart/XDDFDateAxis.java @@ -236,6 +236,7 @@ public class XDDFDateAxis extends XDDFChartAxis { final long id = getNextAxId(plotArea); ctDateAx = plotArea.addNewDateAx(); ctDateAx.addNewAxId().setVal(id); + ctDateAx.addNewAuto().setVal(false); ctDateAx.addNewAxPos(); ctDateAx.addNewScaling(); ctDateAx.addNewCrosses(); @@ -244,6 +245,8 @@ public class XDDFDateAxis extends XDDFChartAxis { ctDateAx.addNewDelete(); ctDateAx.addNewMajorTickMark(); ctDateAx.addNewMinorTickMark(); + ctDateAx.addNewNumFmt().setSourceLinked(true); + ctDateAx.getNumFmt().setFormatCode(""); setPosition(position); setOrientation(AxisOrientation.MIN_MAX); diff --git a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java index 994deb6daf..5227ee3742 100644 --- a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java +++ b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java @@ -123,9 +123,9 @@ public class XWPFDocument extends POIXMLDocument implements Document, IBody { * Keeps track on all id-values used in this document and included parts, like headers, footers, etc. */ private IdentifierManager drawingIdManager = new IdentifierManager(0L, 4294967295L); - + private FootnoteEndnoteIdManager footnoteIdManager = new FootnoteEndnoteIdManager(this); - + /** * Handles the joy of different headers/footers for different pages */ @@ -1356,7 +1356,7 @@ public class XWPFDocument extends POIXMLDocument implements Document, IBody { public boolean getEvenAndOddHeadings() { return settings.getEvenAndOddHeadings(); } - + /** * Sets the even-and-odd-headings setting * @param enable Set to true to turn on separate even and odd headings. @@ -1364,7 +1364,7 @@ public class XWPFDocument extends POIXMLDocument implements Document, IBody { public void setEvenAndOddHeadings(boolean enable) { settings.setEvenAndOddHeadings(enable); } - + /** * Returns the mirror margins setting * @@ -1373,7 +1373,7 @@ public class XWPFDocument extends POIXMLDocument implements Document, IBody { public boolean getMirrorMargins() { return settings.getMirrorMargins(); } - + /** * Sets the mirror margins setting * @param enable Set to true to turn on mirror margins. @@ -1381,7 +1381,7 @@ public class XWPFDocument extends POIXMLDocument implements Document, IBody { public void setMirrorMargins(boolean enable) { settings.setMirrorMargins(enable); } - + /** * inserts an existing XWPFTable to the arrays bodyElements and tables * @@ -1694,7 +1694,20 @@ public class XWPFDocument extends POIXMLDocument implements Document, IBody { * @since POI 4.0.0 */ public XWPFChart createChart(int width, int height) throws InvalidFormatException, IOException { + return createChart(createParagraph().createRun(), width, height); + } + /** + * + * @param run in which the chart will be attached. + * @param width in EMU. + * @param height in EMU. + * @return the new chart. + * @throws InvalidFormatException + * @throws IOException + * @since POI 4.1.2 + */ + public XWPFChart createChart(XWPFRun run, int width, int height) throws InvalidFormatException, IOException { //get chart number int chartNumber = getNextPartNumber(XWPFRelation.CHART, charts.size() + 1); @@ -1705,7 +1718,7 @@ public class XWPFDocument extends POIXMLDocument implements Document, IBody { // initialize xwpfchart object XWPFChart xwpfChart = rp.getDocumentPart(); xwpfChart.setChartIndex(chartNumber); - xwpfChart.attach(rp.getRelationship().getId(), createParagraph().createRun()); + xwpfChart.attach(rp.getRelationship().getId(), run); xwpfChart.setChartBoundingBox(width, height); //add chart object to chart list @@ -1721,7 +1734,7 @@ public class XWPFDocument extends POIXMLDocument implements Document, IBody { */ public XWPFFootnote createFootnote() { XWPFFootnotes footnotes = this.createFootnotes(); - + XWPFFootnote footnote = footnotes.createFootnote(); return footnote; } @@ -1749,7 +1762,7 @@ public class XWPFDocument extends POIXMLDocument implements Document, IBody { */ public XWPFEndnote createEndnote() { XWPFEndnotes endnotes = this.createEndnotes(); - + XWPFEndnote endnote = endnotes.createEndnote(); return endnote; @@ -1769,7 +1782,7 @@ public class XWPFDocument extends POIXMLDocument implements Document, IBody { } return endnotes; - + } /** -- 2.39.5