From 072aec8ad2462adcdf86e7446d47f4e3b1ea4a45 Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Thu, 21 Jul 2022 13:41:49 +0000 Subject: [PATCH] use common PictureType git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1902911 13f79535-47bb-0310-9956-ffa450edef68 --- .../poi/xslf/usermodel/XSLFPictureData.java | 2 +- .../apache/poi/xwpf/usermodel/Document.java | 24 +++-- .../poi/xwpf/usermodel/PictureType.java | 102 ------------------ .../poi/xwpf/usermodel/XWPFComments.java | 11 +- .../poi/xwpf/usermodel/XWPFDocument.java | 15 +-- .../poi/xwpf/usermodel/XWPFHeaderFooter.java | 7 +- .../poi/xwpf/usermodel/XWPFPictureData.java | 28 ++--- .../poi/xwpf/usermodel/XWPFRelation.java | 31 +++--- .../apache/poi/xwpf/usermodel/XWPFRun.java | 5 +- .../poi/xwpf/usermodel/XWPFSignatureLine.java | 3 + .../poi/xwpf/usermodel/TestXWPFRun.java | 1 + .../poi/common/usermodel/PictureType.java | 67 ++++++++---- 12 files changed, 121 insertions(+), 175 deletions(-) delete mode 100644 poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/PictureType.java diff --git a/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFPictureData.java b/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFPictureData.java index 231419127a..60ef156abe 100644 --- a/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFPictureData.java +++ b/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFPictureData.java @@ -255,7 +255,7 @@ public final class XSLFPictureData extends POIXMLDocumentPart implements Picture case EPS: return XSLFRelation.IMAGE_EPS; case BMP: return XSLFRelation.IMAGE_BMP; case WPG: return XSLFRelation.IMAGE_WPG; - case WDP: return XSLFRelation.IMAGE_WDP; + case WDP: return XSLFRelation.HDPHOTO_WDP; case TIFF: return XSLFRelation.IMAGE_TIFF; case SVG: return XSLFRelation.IMAGE_SVG; default: return null; diff --git a/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/Document.java b/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/Document.java index 0bd4175f9b..c124bd536a 100644 --- a/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/Document.java +++ b/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/Document.java @@ -16,60 +16,62 @@ ==================================================================== */ package org.apache.poi.xwpf.usermodel; +import org.apache.poi.common.usermodel.PictureType; + public interface Document { /** * Extended windows meta file */ - public static final int PICTURE_TYPE_EMF = 2; + public static final int PICTURE_TYPE_EMF = PictureType.EMF.ooxmlId; /** * Windows Meta File */ - public static final int PICTURE_TYPE_WMF = 3; + public static final int PICTURE_TYPE_WMF = PictureType.WMF.ooxmlId; /** * Mac PICT format */ - public static final int PICTURE_TYPE_PICT = 4; + public static final int PICTURE_TYPE_PICT = PictureType.PICT.ooxmlId; /** * JPEG format */ - public static final int PICTURE_TYPE_JPEG = 5; + public static final int PICTURE_TYPE_JPEG = PictureType.JPEG.ooxmlId; /** * PNG format */ - public static final int PICTURE_TYPE_PNG = 6; + public static final int PICTURE_TYPE_PNG = PictureType.PNG.ooxmlId; /** * Device independent bitmap */ - public static final int PICTURE_TYPE_DIB = 7; + public static final int PICTURE_TYPE_DIB = PictureType.DIB.ooxmlId; /** * GIF image format */ - public static final int PICTURE_TYPE_GIF = 8; + public static final int PICTURE_TYPE_GIF = PictureType.GIF.ooxmlId; /** * Tag Image File (.tiff) */ - public static final int PICTURE_TYPE_TIFF = 9; + public static final int PICTURE_TYPE_TIFF = PictureType.TIFF.ooxmlId; /** * Encapsulated Postscript (.eps) */ - public static final int PICTURE_TYPE_EPS = 10; + public static final int PICTURE_TYPE_EPS = PictureType.EPS.ooxmlId; /** * Windows Bitmap (.bmp) */ - public static final int PICTURE_TYPE_BMP = 11; + public static final int PICTURE_TYPE_BMP = PictureType.BMP.ooxmlId; /** * WordPerfect graphics (.wpg) */ - public static final int PICTURE_TYPE_WPG = 12; + public static final int PICTURE_TYPE_WPG = PictureType.WPG.ooxmlId; } diff --git a/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/PictureType.java b/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/PictureType.java deleted file mode 100644 index bbca8972fc..0000000000 --- a/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/PictureType.java +++ /dev/null @@ -1,102 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ -package org.apache.poi.xwpf.usermodel; - -import java.util.HashMap; -import java.util.Map; - -/** - * @since POI 5.2.3 - */ -public enum PictureType { - /** - * Extended windows meta file - */ - EMF(Document.PICTURE_TYPE_EMF), - /** - * Windows Meta File - */ - WMF(Document.PICTURE_TYPE_WMF), - /** - * Mac PICT format - */ - PICT(Document.PICTURE_TYPE_PICT), - /** - * JPEG format - */ - JPEG(Document.PICTURE_TYPE_JPEG), - /** - * JPEG format - */ - PNG(Document.PICTURE_TYPE_PNG), - /** - * Device independent bitmap - */ - DIB(Document.PICTURE_TYPE_DIB), - /** - * GIF image format - */ - GIF(Document.PICTURE_TYPE_GIF), - /** - * Tag Image File (.tiff) - */ - TIFF(Document.PICTURE_TYPE_TIFF), - /** - * Encapsulated Postscript (.eps) - */ - EPS(Document.PICTURE_TYPE_EPS), - /** - * Windows Bitmap (.bmp) - */ - BMP(Document.PICTURE_TYPE_BMP), - /** - * WordPerfect graphics (.wpg) - */ - WPG(Document.PICTURE_TYPE_WPG); - - /** - * Map relating the old API constant values to their corresponding - * enumeration value - */ - private static final Map PICTURE_TYPE_BY_ID; - - static { - PICTURE_TYPE_BY_ID = new HashMap<>(); - - for (PictureType pictureType : values()) { - PICTURE_TYPE_BY_ID.put(pictureType.id, pictureType); - } - } - - private int id; - - PictureType(int id) { - this.id = id; - } - - public int getId() { - return id; - } - - /** - * @param id for PictureType - * @return PictureType, null if id does not match any PictureTypes - */ - public static PictureType findById(int id) { - return PICTURE_TYPE_BY_ID.get(id); - } -} 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 caae274736..203ac46288 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 @@ -17,6 +17,7 @@ package org.apache.poi.xwpf.usermodel; +import org.apache.poi.common.usermodel.PictureType; import org.apache.poi.ooxml.POIXMLDocumentPart; import org.apache.poi.ooxml.POIXMLException; import org.apache.poi.ooxml.POIXMLRelation; @@ -100,7 +101,7 @@ public class XWPFComments extends POIXMLDocumentPart { * Adds a picture to the comments. * * @param is The stream to read image from - * @param format The format of the picture. + * @param format The format of the picture, see {@link Document} * @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. @@ -132,13 +133,13 @@ public class XWPFComments extends POIXMLDocumentPart { * Adds a picture to the comments. * * @param pictureData The picture data - * @param format The format of the picture. + * @param format The format of the picture, see {@link Document} * @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. */ public String addPictureData(byte[] pictureData, int format) throws InvalidFormatException { - return addPictureData(pictureData, PictureType.findById(format)); + return addPictureData(pictureData, PictureType.findByOoxmlId(format)); } /** @@ -153,10 +154,10 @@ public class XWPFComments extends POIXMLDocumentPart { */ public String addPictureData(byte[] pictureData, PictureType pictureType) throws InvalidFormatException { if (pictureType == null) { - throw new InvalidFormatException("pictureType parameter is invalid"); + throw new InvalidFormatException("pictureType is not supported"); } XWPFPictureData xwpfPicData = document.findPackagePictureData(pictureData); - POIXMLRelation relDesc = XWPFPictureData.RELATIONS[pictureType.getId()]; + POIXMLRelation relDesc = XWPFPictureData.RELATIONS[pictureType.ooxmlId]; if (xwpfPicData == null) { /* Part doesn't exist, create a new one */ 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 1d47c9fe54..77886d52e9 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 @@ -39,6 +39,7 @@ import javax.xml.namespace.QName; import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.apache.poi.common.usermodel.PictureType; import org.apache.poi.ooxml.POIXMLDocument; import org.apache.poi.ooxml.POIXMLDocumentPart; import org.apache.poi.ooxml.POIXMLException; @@ -1486,7 +1487,7 @@ public class XWPFDocument extends POIXMLDocument implements Document, IBody { * @see #addPictureData(byte[], PictureType) */ public String addPictureData(byte[] pictureData, int format) throws InvalidFormatException { - return addPictureData(pictureData, PictureType.findById(format)); + return addPictureData(pictureData, PictureType.findByOoxmlId(format)); } /** @@ -1501,10 +1502,10 @@ public class XWPFDocument extends POIXMLDocument implements Document, IBody { */ public String addPictureData(byte[] pictureData, PictureType pictureType) throws InvalidFormatException { if (pictureType == null) { - throw new InvalidFormatException("pictureType parameter is invalid"); + throw new InvalidFormatException("pictureType is not supported"); } XWPFPictureData xwpfPicData = findPackagePictureData(pictureData); - POIXMLRelation relDesc = XWPFPictureData.RELATIONS[pictureType.getId()]; + POIXMLRelation relDesc = XWPFPictureData.RELATIONS[pictureType.ooxmlId]; if (xwpfPicData == null) { /* Part doesn't exist, create a new one */ @@ -1584,7 +1585,7 @@ public class XWPFDocument extends POIXMLDocument implements Document, IBody { * @see #getNextPicNameNumber(PictureType) */ public int getNextPicNameNumber(int format) throws InvalidFormatException { - return getNextPicNameNumber(PictureType.findById(format)); + return getNextPicNameNumber(PictureType.findByOoxmlId(format)); } /** @@ -1597,14 +1598,14 @@ public class XWPFDocument extends POIXMLDocument implements Document, IBody { */ public int getNextPicNameNumber(PictureType pictureType) throws InvalidFormatException { if (pictureType == null) { - throw new InvalidFormatException("pictureType parameter is invalid"); + throw new InvalidFormatException("pictureType is not supported"); } int img = getAllPackagePictures().size() + 1; - String proposal = XWPFPictureData.RELATIONS[pictureType.getId()].getFileName(img); + String proposal = XWPFPictureData.RELATIONS[pictureType.ooxmlId].getFileName(img); PackagePartName createPartName = PackagingURIHelper.createPartName(proposal); while (this.getPackage().getPart(createPartName) != null) { img++; - proposal = XWPFPictureData.RELATIONS[pictureType.getId()].getFileName(img); + proposal = XWPFPictureData.RELATIONS[pictureType.ooxmlId].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 8c5dc99881..12e58207f0 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 @@ -23,6 +23,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import org.apache.poi.common.usermodel.PictureType; import org.apache.poi.ooxml.POIXMLDocumentPart; import org.apache.poi.ooxml.POIXMLException; import org.apache.poi.ooxml.POIXMLRelation; @@ -236,7 +237,7 @@ public abstract class XWPFHeaderFooter extends POIXMLDocumentPart implements IBo * @see #addPictureData(byte[], PictureType) */ public String addPictureData(byte[] pictureData, int format) throws InvalidFormatException { - return addPictureData(pictureData, PictureType.findById(format)); + return addPictureData(pictureData, PictureType.findByOoxmlId(format)); } /** @@ -250,10 +251,10 @@ public abstract class XWPFHeaderFooter extends POIXMLDocumentPart implements IBo */ public String addPictureData(byte[] pictureData, PictureType pictureType) throws InvalidFormatException { if (pictureType == null) { - throw new InvalidFormatException("pictureType parameter is invalid"); + throw new InvalidFormatException("pictureType is not supported"); } XWPFPictureData xwpfPicData = document.findPackagePictureData(pictureData); - POIXMLRelation relDesc = XWPFPictureData.RELATIONS[pictureType.getId()]; + POIXMLRelation relDesc = XWPFPictureData.RELATIONS[pictureType.ooxmlId]; if (xwpfPicData == null) { /* Part doesn't exist, create a new one */ diff --git a/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFPictureData.java b/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFPictureData.java index 5059ef9524..58fa5b0747 100644 --- a/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFPictureData.java +++ b/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFPictureData.java @@ -21,6 +21,7 @@ import java.io.IOException; import java.io.InputStream; import java.util.Arrays; +import org.apache.poi.common.usermodel.PictureType; import org.apache.poi.ooxml.POIXMLDocumentPart; import org.apache.poi.ooxml.POIXMLException; import org.apache.poi.ooxml.POIXMLRelation; @@ -57,18 +58,19 @@ public class XWPFPictureData extends POIXMLDocumentPart { protected static final POIXMLRelation[] RELATIONS; static { - RELATIONS = new POIXMLRelation[13]; - RELATIONS[Document.PICTURE_TYPE_EMF] = XWPFRelation.IMAGE_EMF; - RELATIONS[Document.PICTURE_TYPE_WMF] = XWPFRelation.IMAGE_WMF; - RELATIONS[Document.PICTURE_TYPE_PICT] = XWPFRelation.IMAGE_PICT; - RELATIONS[Document.PICTURE_TYPE_JPEG] = XWPFRelation.IMAGE_JPEG; - RELATIONS[Document.PICTURE_TYPE_PNG] = XWPFRelation.IMAGE_PNG; - RELATIONS[Document.PICTURE_TYPE_DIB] = XWPFRelation.IMAGE_DIB; - RELATIONS[Document.PICTURE_TYPE_GIF] = XWPFRelation.IMAGE_GIF; - RELATIONS[Document.PICTURE_TYPE_TIFF] = XWPFRelation.IMAGE_TIFF; - RELATIONS[Document.PICTURE_TYPE_EPS] = XWPFRelation.IMAGE_EPS; - RELATIONS[Document.PICTURE_TYPE_BMP] = XWPFRelation.IMAGE_BMP; - RELATIONS[Document.PICTURE_TYPE_WPG] = XWPFRelation.IMAGE_WPG; + RELATIONS = new POIXMLRelation[14]; + RELATIONS[PictureType.EMF.ooxmlId] = XWPFRelation.IMAGE_EMF; + RELATIONS[PictureType.WMF.ooxmlId] = XWPFRelation.IMAGE_WMF; + RELATIONS[PictureType.PICT.ooxmlId] = XWPFRelation.IMAGE_PICT; + RELATIONS[PictureType.JPEG.ooxmlId] = XWPFRelation.IMAGE_JPEG; + RELATIONS[PictureType.PNG.ooxmlId] = XWPFRelation.IMAGE_PNG; + RELATIONS[PictureType.DIB.ooxmlId] = XWPFRelation.IMAGE_DIB; + RELATIONS[PictureType.GIF.ooxmlId] = XWPFRelation.IMAGE_GIF; + RELATIONS[PictureType.TIFF.ooxmlId] = XWPFRelation.IMAGE_TIFF; + RELATIONS[PictureType.EPS.ooxmlId] = XWPFRelation.IMAGE_EPS; + RELATIONS[PictureType.BMP.ooxmlId] = XWPFRelation.IMAGE_BMP; + RELATIONS[PictureType.WPG.ooxmlId] = XWPFRelation.IMAGE_WPG; + RELATIONS[PictureType.WDP.ooxmlId] = XWPFRelation.HDPHOTO_WDP; } private Long checksum; @@ -170,7 +172,7 @@ public class XWPFPictureData extends POIXMLDocumentPart { * @since POI 5.2.3 */ public PictureType getPictureTypeEnum() { - return PictureType.findById(getPictureType()); + return PictureType.findByOoxmlId(getPictureType()); } public Long getChecksum() { diff --git a/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFRelation.java b/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFRelation.java index 7c08964bd2..7ae06d58da 100644 --- a/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFRelation.java +++ b/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFRelation.java @@ -20,12 +20,13 @@ package org.apache.poi.xwpf.usermodel; import java.util.HashMap; import java.util.Map; +import org.apache.poi.common.usermodel.PictureType; import org.apache.poi.ooxml.POIXMLDocument; import org.apache.poi.ooxml.POIXMLRelation; import org.apache.poi.openxml4j.opc.PackageRelationshipTypes; -import org.apache.poi.sl.usermodel.PictureData; import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import static org.apache.poi.openxml4j.opc.PackageRelationshipTypes.HDPHOTO_PART; import static org.apache.poi.openxml4j.opc.PackageRelationshipTypes.IMAGE_PART; public final class XWPFRelation extends POIXMLRelation { @@ -158,71 +159,77 @@ public final class XWPFRelation extends POIXMLRelation { * Supported image formats */ public static final XWPFRelation IMAGE_EMF = new XWPFRelation( - PictureData.PictureType.EMF.contentType, + PictureType.EMF.contentType, IMAGE_PART, "/word/media/image#.emf", XWPFPictureData::new, XWPFPictureData::new ); public static final XWPFRelation IMAGE_WMF = new XWPFRelation( - PictureData.PictureType.WMF.contentType, + PictureType.WMF.contentType, IMAGE_PART, "/word/media/image#.wmf", XWPFPictureData::new, XWPFPictureData::new ); public static final XWPFRelation IMAGE_PICT = new XWPFRelation( - PictureData.PictureType.PICT.contentType, + PictureType.PICT.contentType, IMAGE_PART, "/word/media/image#.pict", XWPFPictureData::new, XWPFPictureData::new ); public static final XWPFRelation IMAGE_JPEG = new XWPFRelation( - PictureData.PictureType.JPEG.contentType, + PictureType.JPEG.contentType, IMAGE_PART, "/word/media/image#.jpeg", XWPFPictureData::new, XWPFPictureData::new ); public static final XWPFRelation IMAGE_PNG = new XWPFRelation( - PictureData.PictureType.PNG.contentType, + PictureType.PNG.contentType, IMAGE_PART, "/word/media/image#.png", XWPFPictureData::new, XWPFPictureData::new ); public static final XWPFRelation IMAGE_DIB = new XWPFRelation( - PictureData.PictureType.DIB.contentType, + PictureType.DIB.contentType, IMAGE_PART, "/word/media/image#.dib", XWPFPictureData::new, XWPFPictureData::new ); public static final XWPFRelation IMAGE_GIF = new XWPFRelation( - PictureData.PictureType.GIF.contentType, + PictureType.GIF.contentType, IMAGE_PART, "/word/media/image#.gif", XWPFPictureData::new, XWPFPictureData::new ); public static final XWPFRelation IMAGE_TIFF = new XWPFRelation( - PictureData.PictureType.TIFF.contentType, + PictureType.TIFF.contentType, IMAGE_PART, "/word/media/image#.tiff", XWPFPictureData::new, XWPFPictureData::new ); public static final XWPFRelation IMAGE_EPS = new XWPFRelation( - PictureData.PictureType.EPS.contentType, + PictureType.EPS.contentType, IMAGE_PART, "/word/media/image#.eps", XWPFPictureData::new, XWPFPictureData::new ); public static final XWPFRelation IMAGE_BMP = new XWPFRelation( - PictureData.PictureType.BMP.contentType, + PictureType.BMP.contentType, IMAGE_PART, "/word/media/image#.bmp", XWPFPictureData::new, XWPFPictureData::new ); public static final XWPFRelation IMAGE_WPG = new XWPFRelation( - PictureData.PictureType.WPG.contentType, + PictureType.WPG.contentType, IMAGE_PART, "/word/media/image#.wpg", XWPFPictureData::new, XWPFPictureData::new ); + public static final XWPFRelation HDPHOTO_WDP = new XWPFRelation( + PictureType.WDP.contentType, + HDPHOTO_PART, + "/ppt/media/hdphoto#.wdp", + XWPFPictureData::new, XWPFPictureData::new + ); public static final XWPFRelation IMAGES = new XWPFRelation( null, IMAGE_PART, 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 00d3479e71..d90c78e3ab 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 @@ -30,6 +30,7 @@ import java.util.List; import javax.xml.namespace.QName; +import org.apache.poi.common.usermodel.PictureType; import org.apache.poi.ooxml.POIXMLException; import org.apache.poi.ooxml.util.DocumentHelper; import org.apache.poi.ooxml.util.POIXMLUnits; @@ -1072,7 +1073,7 @@ public class XWPFRun implements ISDTContents, IRunElement, CharacterRun { */ 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); + return addPicture(pictureData, PictureType.findByOoxmlId(pictureType), filename, width, height); } /** @@ -1090,7 +1091,7 @@ public class XWPFRun implements ISDTContents, IRunElement, CharacterRun { 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"); + throw new InvalidFormatException("pictureType is not supported"); } 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 c8af9f5e80..9942124470 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,6 +22,7 @@ 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; @@ -83,6 +84,8 @@ public class XWPFSignatureLine extends SignatureLine { return PictureType.WMF; case WPG: return PictureType.WPG; + case WDP: + return PictureType.WDP; default: throw new InvalidFormatException("Unsupported picture format "+type); } 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 6a098cd6fb..84219acee6 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 @@ -31,6 +31,7 @@ import java.io.IOException; import java.math.BigInteger; import java.util.List; +import org.apache.poi.common.usermodel.PictureType; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.util.LocaleUtil; import org.apache.poi.util.Units; diff --git a/poi/src/main/java/org/apache/poi/common/usermodel/PictureType.java b/poi/src/main/java/org/apache/poi/common/usermodel/PictureType.java index 2a5c6625fb..d8497125ac 100644 --- a/poi/src/main/java/org/apache/poi/common/usermodel/PictureType.java +++ b/poi/src/main/java/org/apache/poi/common/usermodel/PictureType.java @@ -19,53 +19,70 @@ package org.apache.poi.common.usermodel; import org.apache.poi.poifs.filesystem.FileMagic; +import java.util.HashMap; + /** * General enum class to define a picture format/type * * @since POI 5.0 */ public enum PictureType { + /** Extended windows meta file */ - EMF("image/x-emf",".emf"), + EMF("image/x-emf", ".emf", 2), /** Windows Meta File */ - WMF("image/x-wmf",".wmf"), + WMF("image/x-wmf", ".wmf", 3), /** Mac PICT format */ - PICT("image/x-pict",".pict"), + PICT("image/x-pict", ".pict", 4), /** JPEG format */ - JPEG("image/jpeg",".jpg"), + JPEG("image/jpeg", ".jpg", 5), /** PNG format */ - PNG("image/png",".png"), + PNG("image/png", ".png", 6), /** Device independent bitmap */ - DIB("image/dib",".dib"), + DIB("image/dib", ".dib", 7), /** GIF image format */ - GIF("image/gif",".gif"), + GIF("image/gif", ".gif", 8), /** Tag Image File (.tiff) */ - TIFF("image/tiff",".tif"), + TIFF("image/tiff", ".tif", 9), /** Encapsulated Postscript (.eps) */ - EPS("image/x-eps",".eps"), + EPS("image/x-eps", ".eps", 10), /** Windows Bitmap (.bmp) */ - BMP("image/x-ms-bmp",".bmp"), + BMP("image/x-ms-bmp", ".bmp", 11), /** WordPerfect graphics (.wpg) */ - WPG("image/x-wpg",".wpg"), + WPG("image/x-wpg", ".wpg", 12), /** Microsoft Windows Media Photo image (.wdp) */ - WDP("image/vnd.ms-photo",".wdp"), + WDP("image/vnd.ms-photo", ".wdp", 13), /** Scalable vector graphics (.svg) - supported by Office 2016 and higher */ - SVG("image/svg+xml", ".svg"), + SVG("image/svg+xml", ".svg", -1), /** Unknown picture type - specific to escher bse record */ - UNKNOWN("", ".dat"), + UNKNOWN("", ".dat", -1), /** Picture type error - specific to escher bse record */ - ERROR("", ".dat"), + ERROR("", ".dat", -1), /** JPEG in the YCCK or CMYK color space. */ - CMYKJPEG("image/jpeg", ".jpg"), + CMYKJPEG("image/jpeg", ".jpg", -1), /** client defined blip type - native-id 32 to 255 */ - CLIENT("", ".dat") + CLIENT("", ".dat", -1) ; - public final String contentType,extension; + private static final HashMap PICTURE_TYPE_BY_OOXML_ID; - PictureType(String contentType,String extension) { + static { + PICTURE_TYPE_BY_OOXML_ID = new HashMap<>(); + + for (PictureType pictureType : values()) { + if (pictureType.ooxmlId >= -1) { + PICTURE_TYPE_BY_OOXML_ID.put(pictureType.ooxmlId, pictureType); + } + } + } + + public final String contentType, extension; + public final int ooxmlId; + + PictureType(String contentType, String extension, int ooxmlId) { this.contentType = contentType; this.extension = extension; + this.ooxmlId = ooxmlId; } public String getContentType() { @@ -76,6 +93,10 @@ public enum PictureType { return extension; } + public int getOoxmlId() { + return ooxmlId; + } + public static PictureType valueOf(FileMagic fm) { switch (fm) { case BMP: @@ -100,4 +121,12 @@ public enum PictureType { return PictureType.UNKNOWN; } } + + /** + * @param ooxmlId for PictureType + * @return PictureType, null if ooxmlId does not match any PictureTypes + */ + public static PictureType findByOoxmlId(int ooxmlId) { + return PICTURE_TYPE_BY_OOXML_ID.get(ooxmlId); + } }