Author: abearez
Date: Sat Dec  7 23:39:20 2019
New Revision: 1871012

URL: http://svn.apache.org/viewvc?rev=1871012&view=rev
Log:
Retrieve chart from graphical frame

Modified:
    
poi/trunk/src/examples/src/org/apache/poi/xslf/usermodel/ChartFromScratch.java
    poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFGraphicFrame.java

Modified: 
poi/trunk/src/examples/src/org/apache/poi/xslf/usermodel/ChartFromScratch.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/examples/src/org/apache/poi/xslf/usermodel/ChartFromScratch.java?rev=1871012&r1=1871011&r2=1871012&view=diff
==============================================================================
--- 
poi/trunk/src/examples/src/org/apache/poi/xslf/usermodel/ChartFromScratch.java 
(original)
+++ 
poi/trunk/src/examples/src/org/apache/poi/xslf/usermodel/ChartFromScratch.java 
Sat Dec  7 23:39:20 2019
@@ -21,6 +21,7 @@ package org.apache.poi.xslf.usermodel;
 
 import java.awt.geom.Rectangle2D;
 import java.io.BufferedReader;
+import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.FileReader;
 import java.io.OutputStream;
@@ -95,6 +96,20 @@ public class ChartFromScratch {
                     ppt.write(out);
                 }
             }
+            try (FileInputStream is = new 
FileInputStream("chart-from-scratch.pptx")) {
+                try (XMLSlideShow ppt = new XMLSlideShow(is)) {
+                    for (XSLFSlide slide : ppt.getSlides()) {
+                        for (XSLFShape shape : slide.getShapes()) {
+                            if (shape instanceof XSLFGraphicFrame) {
+                                XSLFGraphicFrame frame = (XSLFGraphicFrame) 
shape;
+                                if (frame.hasChart()) {
+                                    
System.out.println(frame.getChart().getTitleShape().getText());
+                                }
+                            }
+                        }
+                    }
+                }
+            }
         }
         System.out.println("Done");
     }

Modified: 
poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFGraphicFrame.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFGraphicFrame.java?rev=1871012&r1=1871011&r2=1871012&view=diff
==============================================================================
--- 
poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFGraphicFrame.java 
(original)
+++ 
poi/trunk/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFGraphicFrame.java 
Sat Dec  7 23:39:20 2019
@@ -47,6 +47,7 @@ import org.openxmlformats.schemas.presen
 
 @Beta
 public class XSLFGraphicFrame extends XSLFShape implements 
GraphicalFrame<XSLFShape, XSLFTextParagraph> {
+    private static final String DRAWINGML_CHART_URI = 
"http://schemas.openxmlformats.org/drawingml/2006/chart";;
     private static final POILogger LOG = 
POILogFactory.getLogger(XSLFGraphicFrame.class);
 
     /*package*/ XSLFGraphicFrame(CTGraphicalObjectFrame shape, XSLFSheet 
sheet){
@@ -97,7 +98,7 @@ public class XSLFGraphicFrame extends XS
             return new XSLFGraphicFrame(shape, sheet);
         }
     }
-    
+
     private static String getUri(CTGraphicalObjectFrame shape) {
         final CTGraphicalObject g = shape.getGraphic();
         if (g == null) {
@@ -160,15 +161,45 @@ public class XSLFGraphicFrame extends XS
        return false;
     }
 
+    public boolean hasChart() {
+        String uri = getGraphicalData().getUri();
+        return uri.equals(DRAWINGML_CHART_URI);
+    }
+
+    private CTGraphicalObjectData getGraphicalData() {
+        return 
((CTGraphicalObjectFrame)getXmlObject()).getGraphic().getGraphicData();
+    }
+
+    public XSLFChart getChart() {
+        if (hasChart()) {
+            String id = null;
+            String xpath = "declare namespace c='" + DRAWINGML_CHART_URI + "' 
c:chart";
+            XmlObject[] obj = getGraphicalData().selectPath(xpath);
+            if (obj != null && obj.length == 1) {
+                XmlCursor c = obj[0].newCursor();
+                QName idQualifiedName = new 
QName("http://schemas.openxmlformats.org/officeDocument/2006/relationships";, 
"id");
+                id = c.getAttributeText(idQualifiedName);
+                c.dispose();
+            }
+            if (id == null) {
+                return null;
+            } else {
+                return (XSLFChart) getSheet().getRelationById(id);
+            }
+        } else {
+            return null;
+        }
+    }
+
     @Override
     void copy(XSLFShape sh){
         super.copy(sh);
 
-        CTGraphicalObjectData data = 
((CTGraphicalObjectFrame)getXmlObject()).getGraphic().getGraphicData();
+        CTGraphicalObjectData data = getGraphicalData();
         String uri = data.getUri();
         
if(uri.equals("http://schemas.openxmlformats.org/drawingml/2006/diagram";)){
             copyDiagram(data, (XSLFGraphicFrame)sh);
-        } 
if(uri.equals("http://schemas.openxmlformats.org/drawingml/2006/chart";)){
+        } if(uri.equals(DRAWINGML_CHART_URI)){
                copyChart(data, (XSLFGraphicFrame)sh);
         } else {
             // TODO  support other types of objects
@@ -179,7 +210,7 @@ public class XSLFGraphicFrame extends XS
     private void copyChart(CTGraphicalObjectData objData, XSLFGraphicFrame 
srcShape) {
         XSLFSlide slide = (XSLFSlide) getSheet();
         XSLFSheet src = srcShape.getSheet();
-        String xpath = "declare namespace 
c='http://schemas.openxmlformats.org/drawingml/2006/chart' c:chart";
+        String xpath = "declare namespace c='" + DRAWINGML_CHART_URI + "' 
c:chart";
         XmlObject[] obj = objData.selectPath(xpath);
         if (obj != null && obj.length == 1) {
             XmlCursor c = obj[0].newCursor();



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@poi.apache.org
For additional commands, e-mail: commits-h...@poi.apache.org

Reply via email to