]> source.dussan.org Git - poi.git/commitdiff
Bug 58190: Add more overloaded methods for adding pictures from streams and files
authorDominik Stadler <centic@apache.org>
Sun, 22 May 2016 16:08:51 +0000 (16:08 +0000)
committerDominik Stadler <centic@apache.org>
Sun, 22 May 2016 16:08:51 +0000 (16:08 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1745073 13f79535-47bb-0310-9956-ffa450edef68

src/examples/src/org/apache/poi/xslf/usermodel/Tutorial5.java
src/java/org/apache/poi/sl/usermodel/SlideShow.java
src/ooxml/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java
src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlideShow.java

index ae134de765b5f5bff8c549af4b8bc8e97c42b773..56ffcbc505420089dd3ed02f65117e1d1bf3e6b6 100644 (file)
@@ -38,11 +38,11 @@ public class Tutorial5 {
         XMLSlideShow ppt = new XMLSlideShow();\r
 \r
         XSLFSlide slide = ppt.createSlide();\r
-        File img = new File(System.getProperty("POI.testdata.path"), "slideshow/clock.jpg");\r
-        byte[] data = IOUtils.toByteArray(new FileInputStream(img));\r
-        XSLFPictureData pictureIndex = ppt.addPicture(data, PictureType.PNG);\r
 \r
-        /*XSLFPictureShape shape =*/ slide.createPicture(pictureIndex);\r
+        File img = new File(System.getProperty("POI.testdata.path", "test-data"), "slideshow/clock.jpg");\r
+        XSLFPictureData pictureData = ppt.addPicture(img, PictureType.PNG);\r
+\r
+        /*XSLFPictureShape shape =*/ slide.createPicture(pictureData);\r
 \r
         FileOutputStream out = new FileOutputStream("images.pptx");\r
         ppt.write(out);\r
index 9d4a5cf9dc0385ef923b13d729879f74e5b91901..10f442ae68ad443aac2047987065a0a3afbda780 100644 (file)
@@ -18,9 +18,7 @@
 package org.apache.poi.sl.usermodel;
 
 import java.awt.Dimension;
-import java.io.Closeable;
-import java.io.IOException;
-import java.io.OutputStream;
+import java.io.*;
 import java.util.List;
 
 import org.apache.poi.sl.usermodel.PictureData.PictureType;
@@ -64,17 +62,36 @@ public interface SlideShow<
      */
     List<? extends PictureData> getPictureData();
 
-        
     /**
-     * Adds a picture to the workbook.
+     * Adds a picture to the presentation.
      *
      * @param pictureData       The bytes of the picture
      * @param format            The format of the picture.
      *
-     * @return the new picture reference
+     * @return the picture data reference.
      */
     PictureData addPicture(byte[] pictureData, PictureType format) throws IOException;
 
+    /**
+     * Adds a picture to the presentation.
+     *
+     * @param is               The stream to read the image from
+     * @param format        The format of the picture.
+     *
+     * @return the picture data reference.
+     */
+    PictureData addPicture(InputStream is, PictureType format) throws IOException;
+
+    /**
+     * Adds a picture to the presentation.
+     *
+     * @param pict              The file containing the image to add
+     * @param format            The format of the picture.
+     *
+     * @return the picture data reference
+     */
+    PictureData addPicture(File pict, PictureType format) throws IOException;
+
     /**
      * Writes out the slideshow file the is represented by an instance of this
      * class
index a4e2a670b1c18867eebcdc9c92ce257c0dd9cef9..17a736859da2791f382a4091e03e4b29a4d28f98 100644 (file)
@@ -19,6 +19,8 @@ package org.apache.poi.xslf.usermodel;
 import static org.apache.poi.POIXMLTypeLoader.DEFAULT_XML_OPTIONS;
 
 import java.awt.Dimension;
+import java.io.File;
+import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
@@ -202,7 +204,7 @@ implements SlideShow<XSLFShape,XSLFTextParagraph> {
     /**
      * Create a slide and initialize it from the specified layout.
      *
-     * @param layout
+     * @param layout The layout to use for the new slide.
      * @return created slide
      */
     public XSLFSlide createSlide(XSLFSlideLayout layout) {
@@ -461,6 +463,45 @@ implements SlideShow<XSLFShape,XSLFTextParagraph> {
         return img;
     }
 
+
+    /**
+     * Adds a picture to the slideshow.
+     *
+     * @param is                The stream to read image from
+     * @param format              The format of the picture
+     *
+     * @return the picture data
+     */
+    @Override
+    public XSLFPictureData addPicture(InputStream is, PictureType format) throws IOException
+    {
+        return addPicture(IOUtils.toByteArray(is), format);
+    }
+
+
+    /**
+     * Adds a picture to the presentation.
+     *
+     * @param pict             The file containing the image to add
+     * @param format           The format of the picture.
+     *
+     * @return the picture data
+     */
+    @Override
+    public XSLFPictureData addPicture(File pict, PictureType format) throws IOException
+    {
+        int length = (int) pict.length();
+        byte[] data = new byte[length];
+        FileInputStream is = new FileInputStream(pict);
+        try {
+            IOUtils.readFully(is, data);
+        } finally {
+            is.close();
+        }
+        return addPicture(data, format);
+    }
+
+
     /**
      * check if a picture with this picture data already exists in this presentation
      */
index 5a94b08f728ad597cfea6456ee368eec816fa19a..10990eaf4c395e6cb3c7a4b915f690db233367cc 100644 (file)
@@ -78,6 +78,7 @@ import org.apache.poi.sl.usermodel.MasterSheet;
 import org.apache.poi.sl.usermodel.PictureData.PictureType;
 import org.apache.poi.sl.usermodel.Resources;
 import org.apache.poi.sl.usermodel.SlideShow;
+import org.apache.poi.util.IOUtils;
 import org.apache.poi.util.POILogFactory;
 import org.apache.poi.util.POILogger;
 import org.apache.poi.util.Units;
@@ -268,10 +269,10 @@ public final class HSLFSlideShow implements SlideShow<HSLFShape,HSLFTextParagrap
                                        _documentRecord = (Document) record;
                                        _fonts = _documentRecord.getEnvironment().getFontCollection();
                                }
-                       } else {
+                       } /*else {
                                // No record at this number
                                // Odd, but not normally a problem
-                       }
+                       }*/
                }
        }
 
@@ -295,8 +296,7 @@ public final class HSLFSlideShow implements SlideShow<HSLFShape,HSLFTextParagrap
        private Record getCoreRecordForRefID(int refID) {
                Integer coreRecordId = _sheetIdToCoreRecordsLookup.get(refID);
                if (coreRecordId != null) {
-                       Record r = _mostRecentCoreRecords[coreRecordId];
-                       return r;
+                       return _mostRecentCoreRecords[coreRecordId];
                }
                logger.log(POILogger.ERROR,
                                "We tried to look up a reference to a core record, but there was no core ID for reference ID "
@@ -705,12 +705,10 @@ public final class HSLFSlideShow implements SlideShow<HSLFShape,HSLFTextParagrap
         */
        @Override
        public HSLFSlide createSlide() {
-               SlideListWithText slist = null;
-
                // We need to add the records to the SLWT that deals
                // with Slides.
                // Add it, if it doesn't exist
-               slist = _documentRecord.getSlideSlideListWithText();
+               SlideListWithText slist = _documentRecord.getSlideSlideListWithText();
                if (slist == null) {
                        // Need to add a new one
                        slist = new SlideListWithText();
@@ -828,24 +826,43 @@ public final class HSLFSlideShow implements SlideShow<HSLFShape,HSLFTextParagrap
        }
 
        /**
-        * Adds a picture to this presentation and returns the associated index.
+        * Adds a picture to the presentation.
+        *
+        * @param is            The stream to read the image from
+        * @param format        The format of the picture.
+        *
+        * @return the picture data.
+        */
+       @Override
+       public HSLFPictureData addPicture(InputStream is, PictureType format) throws IOException {
+           if (format == null || format.nativeId == -1) { // fail early
+               throw new IllegalArgumentException("Unsupported picture format: " + format);
+           }
+           return addPicture(IOUtils.toByteArray(is), format);
+       }
+
+       /**
+        * Adds a picture to the presentation.
         *
         * @param pict
         *            the file containing the image to add
         * @param format
-        *            the format of the picture. One of constans defined in the
-        *            <code>Picture</code> class.
-        * @return the index to this picture (1 based).
+        *            The format of the picture.
+        *
+        * @return the picture data.
         */
+       @Override
        public HSLFPictureData addPicture(File pict, PictureType format) throws IOException {
+           if (format == null || format.nativeId == -1) { // fail early
+               throw new IllegalArgumentException("Unsupported picture format: " + format);
+           }
                int length = (int) pict.length();
                byte[] data = new byte[length];
-        FileInputStream is = null;
-        try {
-                       is = new FileInputStream(pict);
-                       is.read(data);
+        FileInputStream is = new FileInputStream(pict);
+               try {
+                       IOUtils.readFully(is, data);
                } finally {
-            if(is != null) is.close();
+            is.close();
         }
                return addPicture(data, format);
        }