diff options
author | Alain Béarez <abearez@apache.org> | 2018-12-08 02:44:22 +0000 |
---|---|---|
committer | Alain Béarez <abearez@apache.org> | 2018-12-08 02:44:22 +0000 |
commit | ef75a6d2d2dda6ab20366954bd19e3e492bc5dc2 (patch) | |
tree | 5d61d1b3c51afb8fe6d92e214ca61dade8aa04d2 /src/ooxml/java/org/apache/poi/xslf | |
parent | 3c313a7f66b9285462cfe414f78928a6d5ea0f08 (diff) | |
download | poi-ef75a6d2d2dda6ab20366954bd19e3e492bc5dc2.tar.gz poi-ef75a6d2d2dda6ab20366954bd19e3e492bc5dc2.zip |
create chart from scratch by sandeeptiwari32
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1848432 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/ooxml/java/org/apache/poi/xslf')
4 files changed, 110 insertions, 6 deletions
diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java index 687ddc5f5b..b0cbc59dd1 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java @@ -302,14 +302,23 @@ public class XMLSlideShow extends POIXMLDocument * Create a blank chart on the given slide. */ public XSLFChart createChart(XSLFSlide slide) { + XSLFChart chart = createChart(); + slide.addRelation(null, XSLFRelation.CHART, chart); + return chart; + } + + /** + * This method is used to create template for chart XML. + * @return Xslf chart object + * @since POI 4.0.2 + */ + public XSLFChart createChart() { int chartIdx = findNextAvailableFileNameIndex(XSLFRelation.CHART, _charts.size() + 1); XSLFChart chart = (XSLFChart) createRelationship(XSLFRelation.CHART, XSLFFactory.getInstance(), chartIdx, true).getDocumentPart(); - slide.addRelation(null, XSLFRelation.CHART, chart); chart.setChartIndex(chartIdx); _charts.add(chart); return chart; } - /** * Return notes slide for the specified slide or create new if it does not exist yet. */ @@ -416,7 +425,7 @@ public class XMLSlideShow extends POIXMLDocument * Return all the charts in the slideshow */ public List<XSLFChart> getCharts() { - return _charts; + return Collections.unmodifiableList(_charts); } /** diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFChart.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFChart.java index 8e6612f875..5e8d73cd06 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFChart.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFChart.java @@ -19,16 +19,28 @@ package org.apache.poi.xslf.usermodel; +import java.awt.geom.Rectangle2D; import java.io.IOException; +import javax.xml.namespace.QName; + import org.apache.poi.ooxml.POIXMLFactory; import org.apache.poi.ooxml.POIXMLRelation; import org.apache.poi.openxml4j.opc.PackagePart; +import org.apache.poi.openxml4j.opc.PackageRelationshipTypes; import org.apache.poi.util.Beta; import org.apache.poi.xddf.usermodel.chart.XDDFChart; +import org.apache.xmlbeans.XmlCursor; import org.apache.xmlbeans.XmlException; import org.openxmlformats.schemas.drawingml.x2006.chart.CTTitle; +import org.openxmlformats.schemas.drawingml.x2006.main.CTGraphicalObjectData; +import org.openxmlformats.schemas.drawingml.x2006.main.CTNonVisualDrawingProps; +import org.openxmlformats.schemas.drawingml.x2006.main.CTPoint2D; +import org.openxmlformats.schemas.drawingml.x2006.main.CTPositiveSize2D; import org.openxmlformats.schemas.drawingml.x2006.main.CTTextBody; +import org.openxmlformats.schemas.drawingml.x2006.main.CTTransform2D; +import org.openxmlformats.schemas.presentationml.x2006.main.CTGraphicalObjectFrame; +import org.openxmlformats.schemas.presentationml.x2006.main.CTGraphicalObjectFrameNonVisual; /** * Represents a Chart in a .pptx presentation @@ -36,6 +48,8 @@ import org.openxmlformats.schemas.drawingml.x2006.main.CTTextBody; @Beta public final class XSLFChart extends XDDFChart { + private static String CHART_URI = "http://schemas.openxmlformats.org/drawingml/2006/chart"; + /** * Construct a PresentationML chart. */ @@ -90,4 +104,47 @@ public final class XSLFChart extends XDDFChart { }; } } + + /** + * method to add graphic frame for XSLF chart + * + * @param shapeId shape id + * @param rID relation id + * @param anchor size and location of chart + * @return graphic frame object + * @since POI 4.0.2 + */ + static CTGraphicalObjectFrame prototype(int shapeId, String rID, Rectangle2D anchor) { + CTGraphicalObjectFrame frame = CTGraphicalObjectFrame.Factory.newInstance(); + CTGraphicalObjectFrameNonVisual nvGr = frame.addNewNvGraphicFramePr(); + + CTNonVisualDrawingProps cnv = nvGr.addNewCNvPr(); + cnv.setName("Chart " + shapeId); + cnv.setId(shapeId); + nvGr.addNewCNvGraphicFramePr().addNewGraphicFrameLocks().setNoGrp(true); + nvGr.addNewNvPr(); + + CTTransform2D xfrm = frame.addNewXfrm(); + + CTPoint2D off = xfrm.addNewOff(); + off.setX((int)anchor.getX()); + off.setY((int)anchor.getY()); + + CTPositiveSize2D ext = xfrm.addNewExt(); + ext.setCx((int)anchor.getWidth()); + ext.setCy((int)anchor.getHeight()); + + xfrm.setExt(ext); + xfrm.setOff(off); + + CTGraphicalObjectData gr = frame.addNewGraphic().addNewGraphicData(); + XmlCursor grCur = gr.newCursor(); + grCur.toNextToken(); + grCur.beginElement(new QName(CHART_URI, "chart")); + grCur.insertAttributeWithValue("id", PackageRelationshipTypes.CORE_PROPERTIES_ECMA376_NS, rID); + grCur.dispose(); + + gr.setUri(CHART_URI); + return frame; + } } diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFDrawing.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFDrawing.java index f4cd0d8e1c..ba93988d0b 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFDrawing.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFDrawing.java @@ -107,6 +107,19 @@ public class XSLFDrawing { return shape; } + /** + * This method will add chart into slide's graphic frame + * + * @param rID relation id of chart + * @param rect2D Chart Bounding values + * @since POI 4.0.2 + */ + public void addChart(String rID, Rectangle2D rect2D) { + CTGraphicalObjectFrame sp = _spTree.addNewGraphicFrame(); + sp.set(XSLFChart.prototype(_sheet.allocateShapeId(), rID, rect2D)); + } + + public XSLFObjectShape createOleShape(String pictureRel) { CTGraphicalObjectFrame sp = _spTree.addNewGraphicFrame(); sp.set(XSLFObjectShape.prototype(_sheet.allocateShapeId(), pictureRel)); diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSheet.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSheet.java index b67264ba0f..2bcf063990 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSheet.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFSheet.java @@ -20,6 +20,7 @@ import static org.apache.poi.ooxml.POIXMLTypeLoader.DEFAULT_XML_OPTIONS; import java.awt.Dimension; import java.awt.Graphics2D; +import java.awt.geom.Rectangle2D; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -52,6 +53,7 @@ import org.apache.poi.util.IOUtils; import org.apache.poi.util.POILogFactory; import org.apache.poi.util.POILogger; import org.apache.poi.util.Units; +import org.apache.poi.xddf.usermodel.chart.XDDFChart; import org.apache.xmlbeans.XmlCursor; import org.apache.xmlbeans.XmlException; import org.apache.xmlbeans.XmlObject; @@ -306,14 +308,13 @@ implements XSLFShapeContainer, Sheet<XSLFShape,XSLFTextParagraph> { throw new IllegalArgumentException("pictureData needs to be of type XSLFPictureData"); } RelationPart rp = addRelation(null, XSLFRelation.IMAGES, (XSLFPictureData)pictureData); - + XSLFObjectShape sh = getDrawing().createOleShape(rp.getRelationship().getId()); CTOleObject oleObj = sh.getCTOleObject(); Dimension dim = pictureData.getImageDimension(); oleObj.setImgW(Units.toEMU(dim.getWidth())); oleObj.setImgH(Units.toEMU(dim.getHeight())); - - + getShapes().add(sh); sh.setParent(this); return sh; @@ -719,4 +720,28 @@ implements XSLFShapeContainer, Sheet<XSLFShape,XSLFTextParagraph> { return (ph == null) ? null : new XSLFPlaceholderDetails(ph); } + /** + * this method will add chart into slide + * with default height, width, x and y + * @param chart xslf chart object + * @since POI 4.0.2 + */ + public void addChart(XSLFChart chart) { + Rectangle2D rect2D = new java.awt.Rectangle(XDDFChart.DEFAULT_X, XDDFChart.DEFAULT_Y, + XDDFChart.DEFAULT_WIDTH, XDDFChart.DEFAULT_HEIGHT); + + this.addChart(chart, rect2D); + } + + /** + * this method will add chart into slide + * with given height, width, x and y + * @param chart xslf chart object + * @since POI 4.0.2 + */ + public void addChart(XSLFChart chart, Rectangle2D rect2D) { + RelationPart rp = addRelation(null, XSLFRelation.CHART, chart); + getDrawing().addChart(rp.getRelationship().getId(), rect2D); + } + } |