mirror of
https://github.com/apache/poi.git
synced 2026-02-27 20:40:08 +08:00
add getPictureTypeEnum
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1902905 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
f58e9169d9
commit
2a0c1b82c7
@ -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();
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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
|
||||
*
|
||||
|
||||
@ -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;
|
||||
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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));
|
||||
|
||||
@ -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();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user