add getPictureTypeEnum
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1902905 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFComments.java b/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFComments.java
index 7459f83..caae274 100644
--- a/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFComments.java
+++ b/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFComments.java
@@ -105,6 +105,7 @@
* 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());
@@ -114,6 +115,22 @@
/**
* 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.
+ *
* @param pictureData The picture data
* @param format The format of the picture.
* @return the index to this picture (0 based), the added picture can be
@@ -121,12 +138,29 @@
* @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();
diff --git a/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java b/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java
index 7814406..1d47c9f 100644
--- a/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java
+++ b/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java
@@ -1455,7 +1455,7 @@
}
}
- XWPFPictureData findPackagePictureData(byte[] pictureData, int format) {
+ XWPFPictureData findPackagePictureData(byte[] pictureData) {
long checksum = IOUtils.calculateChecksum(pictureData);
XWPFPictureData xwpfPicData = null;
/*
@@ -1475,13 +1475,40 @@
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 @@
}
}
+ /**
+ * 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());
@@ -1520,18 +1557,54 @@
}
/**
+ * 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;
diff --git a/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFHeaderFooter.java b/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFHeaderFooter.java
index 131c7d3..8c5dc99 100644
--- a/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFHeaderFooter.java
+++ b/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFHeaderFooter.java
@@ -233,14 +233,31 @@
* @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,6 +294,7 @@
* @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());
@@ -284,6 +302,21 @@
}
/**
+ * 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
*
* @return XWPFPictureData of a specificID
diff --git a/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFRun.java b/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFRun.java
index abd499f..00d3479 100644
--- a/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFRun.java
+++ b/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFRun.java
@@ -1066,10 +1066,32 @@
* @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;
diff --git a/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFSignatureLine.java b/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFSignatureLine.java
index 95b88ba..c8af9f5 100644
--- a/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFSignatureLine.java
+++ b/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFSignatureLine.java
@@ -22,7 +22,6 @@
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 @@
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);
}
diff --git a/poi-ooxml/src/test/java/org/apache/poi/xwpf/usermodel/TestXWPFDocument.java b/poi-ooxml/src/test/java/org/apache/poi/xwpf/usermodel/TestXWPFDocument.java
index 3f8e910..c23e53b 100644
--- a/poi-ooxml/src/test/java/org/apache/poi/xwpf/usermodel/TestXWPFDocument.java
+++ b/poi-ooxml/src/test/java/org/apache/poi/xwpf/usermodel/TestXWPFDocument.java
@@ -301,7 +301,7 @@
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));
diff --git a/poi-ooxml/src/test/java/org/apache/poi/xwpf/usermodel/TestXWPFRun.java b/poi-ooxml/src/test/java/org/apache/poi/xwpf/usermodel/TestXWPFRun.java
index dc61447..6a098cd 100644
--- a/poi-ooxml/src/test/java/org/apache/poi/xwpf/usermodel/TestXWPFRun.java
+++ b/poi-ooxml/src/test/java/org/apache/poi/xwpf/usermodel/TestXWPFRun.java
@@ -446,6 +446,8 @@
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();