aboutsummaryrefslogtreecommitdiffstats
path: root/poi-ooxml
diff options
context:
space:
mode:
authorPJ Fanning <fanningpj@apache.org>2022-07-21 09:56:56 +0000
committerPJ Fanning <fanningpj@apache.org>2022-07-21 09:56:56 +0000
commit2a0c1b82c7c09b265a760e4ee9458ca4a89a20fb (patch)
tree1322fcf76a4927969b22ee2837d08fd0b430672b /poi-ooxml
parentf58e9169d9ae9f8ff88e97f6bafd319f7981256e (diff)
downloadpoi-2a0c1b82c7c09b265a760e4ee9458ca4a89a20fb.tar.gz
poi-2a0c1b82c7c09b265a760e4ee9458ca4a89a20fb.zip
add getPictureTypeEnum
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1902905 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'poi-ooxml')
-rw-r--r--poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFComments.java40
-rw-r--r--poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java85
-rw-r--r--poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFHeaderFooter.java39
-rw-r--r--poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFRun.java22
-rw-r--r--poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFSignatureLine.java25
-rw-r--r--poi-ooxml/src/test/java/org/apache/poi/xwpf/usermodel/TestXWPFDocument.java2
-rw-r--r--poi-ooxml/src/test/java/org/apache/poi/xwpf/usermodel/TestXWPFRun.java2
7 files changed, 189 insertions, 26 deletions
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 7459f83a82..caae274736 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 @@ 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());
@@ -114,6 +115,22 @@ public class XWPFComments extends POIXMLDocumentPart {
/**
* 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 @@ 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();
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 7814406ec5..1d47c9fe54 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 @@ 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());
@@ -1520,18 +1557,54 @@ 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;
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 131c7d3d52..8c5dc99881 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 @@ 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,6 +294,7 @@ 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());
@@ -284,6 +302,21 @@ public abstract class XWPFHeaderFooter extends POIXMLDocumentPart implements IBo
}
/**
+ * 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 abd499f3f0..00d3479e71 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 @@ 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;
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 95b88bac04..c8af9f5e80 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 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);
}
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 3f8e910b52..c23e53b063 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 @@ 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));
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 dc614470ea..6a098cd6fb 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 @@ 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();