]> source.dussan.org Git - poi.git/commitdiff
add getPictureTypeEnum
authorPJ Fanning <fanningpj@apache.org>
Thu, 21 Jul 2022 09:56:56 +0000 (09:56 +0000)
committerPJ Fanning <fanningpj@apache.org>
Thu, 21 Jul 2022 09:56:56 +0000 (09:56 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1902905 13f79535-47bb-0310-9956-ffa450edef68

poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFComments.java
poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java
poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFHeaderFooter.java
poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFRun.java
poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFSignatureLine.java
poi-ooxml/src/test/java/org/apache/poi/xwpf/usermodel/TestXWPFDocument.java
poi-ooxml/src/test/java/org/apache/poi/xwpf/usermodel/TestXWPFRun.java

index 7459f83a8208533c52d85c2296fa4bd0b421ae13..caae274736f285d067b5e3bf5e527c6d20071f8b 100644 (file)
@@ -105,12 +105,29 @@ public class XWPFComments extends POIXMLDocumentPart {
      * obtained from {@link #getAllPictures()} .
      * @throws InvalidFormatException If the format of the picture is not known.
      * @throws IOException            If reading the picture-data from the stream fails.
+     * @see #addPictureData(InputStream, PictureType)
      */
     public String addPictureData(InputStream is, int format) throws InvalidFormatException, IOException {
         byte[] data = IOUtils.toByteArrayWithMaxLength(is, XWPFPictureData.getMaxImageSize());
         return addPictureData(data, format);
     }
 
+    /**
+     * Adds a picture to the comments.
+     *
+     * @param is     The stream to read image from
+     * @param pictureType The {@link PictureType} of the picture
+     * @return the index to this picture (0 based), the added picture can be
+     * obtained from {@link #getAllPictures()} .
+     * @throws InvalidFormatException If the pictureType of the picture is not known.
+     * @throws IOException            If reading the picture-data from the stream fails.
+     * @since POI 5.2.3
+     */
+    public String addPictureData(InputStream is, PictureType pictureType) throws InvalidFormatException, IOException {
+        byte[] data = IOUtils.toByteArrayWithMaxLength(is, XWPFPictureData.getMaxImageSize());
+        return addPictureData(data, pictureType);
+    }
+
     /**
      * Adds a picture to the comments.
      *
@@ -121,12 +138,29 @@ public class XWPFComments extends POIXMLDocumentPart {
      * @throws InvalidFormatException If the format of the picture is not known.
      */
     public String addPictureData(byte[] pictureData, int format) throws InvalidFormatException {
-        XWPFPictureData xwpfPicData = document.findPackagePictureData(pictureData, format);
-        POIXMLRelation relDesc = XWPFPictureData.RELATIONS[format];
+        return addPictureData(pictureData, PictureType.findById(format));
+    }
+
+    /**
+     * Adds a picture to the comments.
+     *
+     * @param pictureData The picture data
+     * @param pictureType The {@link PictureType} of the picture.
+     * @return the index to this picture (0 based), the added picture can be
+     * obtained from {@link #getAllPictures()} .
+     * @throws InvalidFormatException If the pictureType of the picture is not known.
+     * @since POI 5.2.3
+     */
+    public String addPictureData(byte[] pictureData, PictureType pictureType) throws InvalidFormatException {
+        if (pictureType == null) {
+            throw new InvalidFormatException("pictureType parameter is invalid");
+        }
+        XWPFPictureData xwpfPicData = document.findPackagePictureData(pictureData);
+        POIXMLRelation relDesc = XWPFPictureData.RELATIONS[pictureType.getId()];
 
         if (xwpfPicData == null) {
             /* Part doesn't exist, create a new one */
-            int idx = getXWPFDocument().getNextPicNameNumber(format);
+            int idx = getXWPFDocument().getNextPicNameNumber(pictureType);
             xwpfPicData = (XWPFPictureData) createRelationship(relDesc, XWPFFactory.getInstance(), idx);
             /* write bytes to new part */
             PackagePart picDataPart = xwpfPicData.getPackagePart();
index 7814406ec5c8c000a999dbb101137160af8010cc..1d47c9fe54a496254807f887704df2d5fed24560 100644 (file)
@@ -1455,7 +1455,7 @@ public class XWPFDocument extends POIXMLDocument implements Document, IBody {
         }
     }
 
-    XWPFPictureData findPackagePictureData(byte[] pictureData, int format) {
+    XWPFPictureData findPackagePictureData(byte[] pictureData) {
         long checksum = IOUtils.calculateChecksum(pictureData);
         XWPFPictureData xwpfPicData = null;
         /*
@@ -1475,13 +1475,40 @@ public class XWPFDocument extends POIXMLDocument implements Document, IBody {
         return xwpfPicData;
     }
 
+    /**
+     * Adds a picture to the document.
+     *
+     * @param pictureData The picture data
+     * @param format the format of the picture, see constants in {@link Document}
+     * @return the index to this picture (0 based), the added picture can be
+     * obtained from {@link #getAllPictures()} .
+     * @throws InvalidFormatException if the format is not known
+     * @see #addPictureData(byte[], PictureType)
+     */
     public String addPictureData(byte[] pictureData, int format) throws InvalidFormatException {
-        XWPFPictureData xwpfPicData = findPackagePictureData(pictureData, format);
-        POIXMLRelation relDesc = XWPFPictureData.RELATIONS[format];
+        return addPictureData(pictureData, PictureType.findById(format));
+    }
+
+    /**
+     * Adds a picture to the document.
+     *
+     * @param pictureData The picture data
+     * @param pictureType the {@link PictureType}
+     * @return the index to this picture (0 based), the added picture can be
+     * obtained from {@link #getAllPictures()} .
+     * @throws InvalidFormatException if the format is not known
+     * @since POI 5.2.3
+     */
+    public String addPictureData(byte[] pictureData, PictureType pictureType) throws InvalidFormatException {
+        if (pictureType == null) {
+            throw new InvalidFormatException("pictureType parameter is invalid");
+        }
+        XWPFPictureData xwpfPicData = findPackagePictureData(pictureData);
+        POIXMLRelation relDesc = XWPFPictureData.RELATIONS[pictureType.getId()];
 
         if (xwpfPicData == null) {
             /* Part doesn't exist, create a new one */
-            int idx = getNextPicNameNumber(format);
+            int idx = getNextPicNameNumber(pictureType);
             xwpfPicData = (XWPFPictureData) createRelationship(relDesc, XWPFFactory.getInstance(), idx);
             /* write bytes to new part */
             PackagePart picDataPart = xwpfPicData.getPackagePart();
@@ -1510,6 +1537,16 @@ public class XWPFDocument extends POIXMLDocument implements Document, IBody {
         }
     }
 
+    /**
+     * Adds a picture to the document.
+     *
+     * @param is The picture data
+     * @param format the format of the picture, see constants in {@link Document}
+     * @return the index to this picture (0 based), the added picture can be
+     * obtained from {@link #getAllPictures()} .
+     * @throws InvalidFormatException if the format is not known
+     * @see #addPictureData(InputStream, PictureType)
+     */
     public String addPictureData(InputStream is, int format) throws InvalidFormatException {
         try {
             byte[] data = IOUtils.toByteArrayWithMaxLength(is, XWPFPictureData.getMaxImageSize());
@@ -1519,19 +1556,55 @@ public class XWPFDocument extends POIXMLDocument implements Document, IBody {
         }
     }
 
+    /**
+     * Adds a picture to the document.
+     *
+     * @param is The picture data
+     * @param pictureType the {@link PictureType}
+     * @return the index to this picture (0 based), the added picture can be
+     * obtained from {@link #getAllPictures()} .
+     * @throws InvalidFormatException if the pictureType is not known
+     * @since POI 5.2.3
+     */
+    public String addPictureData(InputStream is, PictureType pictureType) throws InvalidFormatException {
+        try {
+            byte[] data = IOUtils.toByteArrayWithMaxLength(is, XWPFPictureData.getMaxImageSize());
+            return addPictureData(data, pictureType);
+        } catch (IOException e) {
+            throw new POIXMLException(e);
+        }
+    }
+
     /**
      * get the next free ImageNumber
      *
+     * @param format the format of the picture, see constants in {@link Document}
      * @return the next free ImageNumber
      * @throws InvalidFormatException If the format of the picture is not known.
+     * @see #getNextPicNameNumber(PictureType)
      */
     public int getNextPicNameNumber(int format) throws InvalidFormatException {
+        return getNextPicNameNumber(PictureType.findById(format));
+    }
+
+    /**
+     * get the next free ImageNumber
+     *
+     * @param pictureType the {@link PictureType}
+     * @return the next free ImageNumber
+     * @throws InvalidFormatException If the pictureType of the picture is not known.
+     * @since POI 5.2.3
+     */
+    public int getNextPicNameNumber(PictureType pictureType) throws InvalidFormatException {
+        if (pictureType == null) {
+            throw new InvalidFormatException("pictureType parameter is invalid");
+        }
         int img = getAllPackagePictures().size() + 1;
-        String proposal = XWPFPictureData.RELATIONS[format].getFileName(img);
+        String proposal = XWPFPictureData.RELATIONS[pictureType.getId()].getFileName(img);
         PackagePartName createPartName = PackagingURIHelper.createPartName(proposal);
         while (this.getPackage().getPart(createPartName) != null) {
             img++;
-            proposal = XWPFPictureData.RELATIONS[format].getFileName(img);
+            proposal = XWPFPictureData.RELATIONS[pictureType.getId()].getFileName(img);
             createPartName = PackagingURIHelper.createPartName(proposal);
         }
         return img;
index 131c7d3d5214b37df90d76a9f4572d2c2bcd1527..8c5dc99881517f6b5169331a1cb72a08be8c0cbe 100644 (file)
@@ -233,14 +233,31 @@ public abstract class XWPFHeaderFooter extends POIXMLDocumentPart implements IBo
      * @param format      The format of the picture.
      * @return the index to this picture (0 based), the added picture can be obtained from {@link #getAllPictures()} .
      * @throws InvalidFormatException If the format of the picture is not known.
+     * @see #addPictureData(byte[], PictureType)
      */
     public String addPictureData(byte[] pictureData, int format) throws InvalidFormatException {
-        XWPFPictureData xwpfPicData = document.findPackagePictureData(pictureData, format);
-        POIXMLRelation relDesc = XWPFPictureData.RELATIONS[format];
+        return addPictureData(pictureData, PictureType.findById(format));
+    }
+
+    /**
+     * Adds a picture to the document.
+     *
+     * @param pictureData The picture data
+     * @param pictureType The {@link PictureType} of the picture.
+     * @return the index to this picture (0 based), the added picture can be obtained from {@link #getAllPictures()} .
+     * @throws InvalidFormatException If the format of the picture is not known.
+     * @since POI 5.2.3
+     */
+    public String addPictureData(byte[] pictureData, PictureType pictureType) throws InvalidFormatException {
+        if (pictureType == null) {
+            throw new InvalidFormatException("pictureType parameter is invalid");
+        }
+        XWPFPictureData xwpfPicData = document.findPackagePictureData(pictureData);
+        POIXMLRelation relDesc = XWPFPictureData.RELATIONS[pictureType.getId()];
 
         if (xwpfPicData == null) {
             /* Part doesn't exist, create a new one */
-            int idx = document.getNextPicNameNumber(format);
+            int idx = document.getNextPicNameNumber(pictureType);
             xwpfPicData = (XWPFPictureData) createRelationship(relDesc, XWPFFactory.getInstance(), idx);
             /* write bytes to new part */
             PackagePart picDataPart = xwpfPicData.getPackagePart();
@@ -277,12 +294,28 @@ public abstract class XWPFHeaderFooter extends POIXMLDocumentPart implements IBo
      * @return the index to this picture (0 based), the added picture can be obtained from {@link #getAllPictures()} .
      * @throws InvalidFormatException If the format of the picture is not known.
      * @throws IOException If reading the picture-data from the stream fails.
+     * @see #addPictureData(InputStream, PictureType)
      */
     public String addPictureData(InputStream is, int format) throws InvalidFormatException, IOException {
         byte[] data = IOUtils.toByteArrayWithMaxLength(is, XWPFPictureData.getMaxImageSize());
         return addPictureData(data, format);
     }
 
+    /**
+     * Adds a picture to the document.
+     *
+     * @param is     The stream to read image from
+     * @param pictureType The {@link PictureType} of the picture.
+     * @return the index to this picture (0 based), the added picture can be obtained from {@link #getAllPictures()} .
+     * @throws InvalidFormatException If the format of the picture is not known.
+     * @throws IOException If reading the picture-data from the stream fails.
+     * @since POI 5.2.3
+     */
+    public String addPictureData(InputStream is, PictureType pictureType) throws InvalidFormatException, IOException {
+        byte[] data = IOUtils.toByteArrayWithMaxLength(is, XWPFPictureData.getMaxImageSize());
+        return addPictureData(data, pictureType);
+    }
+
     /**
      * returns the PictureData by blipID
      *
index abd499f3f06db80bcec097019433433e6ce8b1c1..00d3479e71a642ac5a15f69155b0bd066aebe6b0 100644 (file)
@@ -1066,10 +1066,32 @@ public class XWPFRun implements ISDTContents, IRunElement, CharacterRun {
      * @see org.apache.poi.xwpf.usermodel.Document#PICTURE_TYPE_PICT
      * @see org.apache.poi.xwpf.usermodel.Document#PICTURE_TYPE_JPEG
      * @see org.apache.poi.xwpf.usermodel.Document#PICTURE_TYPE_PNG
+     * @see org.apache.poi.xwpf.usermodel.Document#PICTURE_TYPE_GIF
      * @see org.apache.poi.xwpf.usermodel.Document#PICTURE_TYPE_DIB
+     * @see #addPicture(InputStream, PictureType, String, int, int)
      */
     public XWPFPicture addPicture(InputStream pictureData, int pictureType, String filename, int width, int height)
             throws InvalidFormatException, IOException {
+        return addPicture(pictureData, PictureType.findById(pictureType), filename, width, height);
+    }
+
+    /**
+     * Adds a picture to the run. This method handles
+     * attaching the picture data to the overall file.
+     *
+     * @param pictureData The raw picture data
+     * @param pictureType The {@link PictureType} of the picture
+     * @param width       width in EMUs. To convert to / from points use {@link org.apache.poi.util.Units}
+     * @param height      height in EMUs. To convert to / from points use {@link org.apache.poi.util.Units}
+     * @throws InvalidFormatException If the format of the picture is not known.
+     * @throws IOException            If reading the picture-data from the stream fails.
+     * @since POI 5.2.3
+     */
+    public XWPFPicture addPicture(InputStream pictureData, PictureType pictureType, String filename, int width, int height)
+            throws InvalidFormatException, IOException {
+        if (pictureType == null) {
+            throw new InvalidFormatException("pictureType parameter is invalid");
+        }
         String relationId;
         XWPFPictureData picData;
 
index 95b88bac049dc93afe216050a98aee50f67d70ba..c8af9f5e80d7731ef8e8f78288121d5c11f8feca 100644 (file)
@@ -22,7 +22,6 @@ import javax.xml.namespace.QName;
 
 import com.microsoft.schemas.office.office.CTSignatureLine;
 import com.microsoft.schemas.vml.CTImageData;
-import org.apache.poi.common.usermodel.PictureType;
 import org.apache.poi.ooxml.util.XPathHelper;
 import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
 import org.apache.poi.poifs.crypt.dsig.SignatureLine;
@@ -60,30 +59,30 @@ public class XWPFSignatureLine extends SignatureLine {
         imageData.setId2(relId);
     }
 
-    private static int mapType(PictureType type) throws InvalidFormatException {
+    private static PictureType mapType(org.apache.poi.common.usermodel.PictureType type) throws InvalidFormatException {
         switch (type) {
             case BMP:
-                return Document.PICTURE_TYPE_BMP;
+                return PictureType.BMP;
             case DIB:
-                return Document.PICTURE_TYPE_DIB;
+                return PictureType.DIB;
             case EMF:
-                return Document.PICTURE_TYPE_EMF;
+                return PictureType.EMF;
             case EPS:
-                return Document.PICTURE_TYPE_EPS;
+                return PictureType.EPS;
             case GIF:
-                return Document.PICTURE_TYPE_GIF;
+                return PictureType.GIF;
             case JPEG:
-                return Document.PICTURE_TYPE_JPEG;
+                return PictureType.JPEG;
             case PICT:
-                return Document.PICTURE_TYPE_PICT;
+                return PictureType.PICT;
             case PNG:
-                return Document.PICTURE_TYPE_PNG;
+                return PictureType.PNG;
             case TIFF:
-                return Document.PICTURE_TYPE_TIFF;
+                return PictureType.TIFF;
             case WMF:
-                return Document.PICTURE_TYPE_WMF;
+                return PictureType.WMF;
             case WPG:
-                return Document.PICTURE_TYPE_WPG;
+                return PictureType.WPG;
             default:
                 throw new InvalidFormatException("Unsupported picture format "+type);
         }
index 3f8e910b52cab95e8bca3cbc0eaaf586d7beace9..c23e53b063ef8dc25f94a68ba940c035846aa863 100644 (file)
@@ -301,7 +301,7 @@ public final class TestXWPFDocument {
     void testFindPackagePictureData() throws IOException {
         try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("issue_51265_1.docx")) {
             byte[] nature1 = XWPFTestDataSamples.getImage("nature1.gif");
-            XWPFPictureData part = doc.findPackagePictureData(nature1, Document.PICTURE_TYPE_GIF);
+            XWPFPictureData part = doc.findPackagePictureData(nature1);
             assertNotNull(part);
             assertTrue(doc.getAllPictures().contains(part));
             assertTrue(doc.getAllPackagePictures().contains(part));
index dc614470eaf23a3cc4ed636395ed7c8fd64cfcae..6a098cd6fb120997ee600c125b6e3ee25e32c043 100644 (file)
@@ -446,6 +446,8 @@ class TestXWPFRun {
                 for (XWPFPicture pic : pictures) {
                     assertNotNull(pic.getPictureData());
                     assertEquals("DOZOR", pic.getDescription());
+                    assertEquals(5, pic.getPictureData().getPictureType());
+                    assertEquals(PictureType.JPEG, pic.getPictureData().getPictureTypeEnum());
                 }
 
                 count += pictures.size();