]> source.dussan.org Git - poi.git/commitdiff
add XSLFPictureShape setName
authorPJ Fanning <fanningpj@apache.org>
Sat, 23 Oct 2021 09:27:35 +0000 (09:27 +0000)
committerPJ Fanning <fanningpj@apache.org>
Sat, 23 Oct 2021 09:27:35 +0000 (09:27 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1894505 13f79535-47bb-0310-9956-ffa450edef68

poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFPictureShape.java
poi-ooxml/src/test/java/org/apache/poi/xslf/usermodel/TestXSLFPictureShape.java

index 9205a74112e33d1e04cfb9d0f94beb136c841891..c011c5db98f8916ee75fc9db0e6629f0b4616b02 100644 (file)
@@ -282,17 +282,44 @@ public class XSLFPictureShape extends XSLFSimpleShape
         XmlObject xmlObject = getXmlObject();
         if (xmlObject instanceof CTPicture) {
             CTPicture ctPicture = (CTPicture)xmlObject;
-            CTPictureNonVisual nvSpPr = ctPicture.getNvPicPr();
-            if (nvSpPr != null) {
-                CTNonVisualDrawingProps cnv = nvSpPr.getCNvPr();
-                if (cnv != null) {
-                    name = cnv.getName();
+            CTPictureNonVisual nvPicPr = ctPicture.getNvPicPr();
+            if (nvPicPr != null) {
+                CTNonVisualDrawingProps cnvdProps = nvPicPr.getCNvPr();
+                if (cnvdProps != null) {
+                    name = cnvdProps.getName();
                 }
             }
         }
         return name;
     }
 
+    /**
+     * @param name picture name
+     * @return returns true if the name was set
+     * @since POI 5.1.0
+     */
+    public boolean setName(String name) {
+        XmlObject xmlObject = getXmlObject();
+        if (xmlObject instanceof CTPicture) {
+            CTPicture ctPicture = (CTPicture)xmlObject;
+            CTPictureNonVisual nvPicPr = ctPicture.getNvPicPr();
+            if (nvPicPr == null) {
+                nvPicPr = ctPicture.addNewNvPicPr();
+            }
+            if (nvPicPr != null) {
+                CTNonVisualDrawingProps cnvdProps = nvPicPr.getCNvPr();
+                if (cnvdProps == null) {
+                    cnvdProps = nvPicPr.addNewCNvPr();
+                }
+                if (cnvdProps != null) {
+                    cnvdProps.setName(name);
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
     /**
      * @return SVG image data -- can return null if no SVG image is found
      */
index 79918590ef933abf0c266fc18b2040c13ae36270..b6cd26b9ee0c65ba7c838ff114d699ab1f88c88b 100644 (file)
@@ -94,6 +94,54 @@ class TestXSLFPictureShape {
         }
     }
 
+    @Test
+    void testCreateWithSetName() throws Exception {
+        try (XMLSlideShow ppt1 = new XMLSlideShow()) {
+            assertEquals(0, ppt1.getPictureData().size());
+            byte[] data1 = new byte[100];
+            for (int i = 0; i < 100; i++) {
+                data1[i] = (byte) i;
+            }
+            XSLFPictureData pdata1 = ppt1.addPicture(data1, PictureType.JPEG);
+            assertEquals(0, pdata1.getIndex());
+            assertEquals(1, ppt1.getPictureData().size());
+
+            XSLFSlide slide = ppt1.createSlide();
+            XSLFPictureShape shape1 = slide.createPicture(pdata1);
+            assertNotNull(shape1.getPictureData());
+            assertArrayEquals(data1, shape1.getPictureData().getData());
+            assertTrue(shape1.setName("Shape1 Picture"));
+
+            byte[] data2 = new byte[200];
+            for (int i = 0; i < 200; i++) {
+                data2[i] = (byte) i;
+            }
+            XSLFPictureData pdata2 = ppt1.addPicture(data2, PictureType.PNG);
+            XSLFPictureShape shape2 = slide.createPicture(pdata2);
+            assertNotNull(shape2.getPictureData());
+            assertEquals(1, pdata2.getIndex());
+            assertEquals(2, ppt1.getPictureData().size());
+            assertArrayEquals(data2, shape2.getPictureData().getData());
+            assertTrue(shape2.setName("Shape2 Picture"));
+
+            try (XMLSlideShow ppt2 = writeOutAndReadBack(ppt1)) {
+                List<XSLFPictureData> pics = ppt2.getPictureData();
+                assertEquals(2, pics.size());
+                assertArrayEquals(data1, pics.get(0).getData());
+                assertArrayEquals(data2, pics.get(1).getData());
+
+                List<XSLFShape> shapes = ppt2.getSlides().get(0).getShapes();
+                assertEquals(2, shapes.size());
+                XSLFPictureShape xlsfShape1 = (XSLFPictureShape) shapes.get(0);
+                XSLFPictureShape xlsfShape2 = (XSLFPictureShape) shapes.get(1);
+                assertArrayEquals(data1, xlsfShape1.getPictureData().getData());
+                assertArrayEquals(data2, xlsfShape2.getPictureData().getData());
+                assertEquals("Shape1 Picture", xlsfShape1.getName());
+                assertEquals("Shape2 Picture", xlsfShape2.getName());
+            }
+        }
+    }
+
     @Test
     void testCreateMultiplePictures() throws Exception {
         try (XMLSlideShow ppt1 = new XMLSlideShow()) {