* 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.
*
* @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();
}
}
- XWPFPictureData findPackagePictureData(byte[] pictureData, int format) {
+ XWPFPictureData findPackagePictureData(byte[] pictureData) {
long checksum = IOUtils.calculateChecksum(pictureData);
XWPFPictureData xwpfPicData = null;
/*
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();
}
}
+ /**
+ * 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());
}
}
+ /**
+ * 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;
* @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();
* @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
*
* @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;
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;
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);
}
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));
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();