All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.poi.xslf.usermodel.XSLFPictureData Maven / Gradle / Ivy

There is a newer version: 5.3.0
Show newest version
/*
 *  ====================================================================
 *    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.xslf.usermodel;

import java.io.IOException;

import org.apache.poi.POIXMLDocumentPart;
import org.apache.poi.POIXMLException;
import org.apache.poi.POIXMLRelation;
import org.apache.poi.openxml4j.opc.PackagePart;
import org.apache.poi.openxml4j.opc.PackageRelationship;
import org.apache.poi.util.Beta;
import org.apache.poi.util.IOUtils;

/**
 * Instantiates sub-classes of POIXMLDocumentPart depending on their relationship type
 *
 * @author Yegor Kozlov
 */
@Beta
public final class XSLFPictureData extends POIXMLDocumentPart {
    /**
     * Extended windows meta file
     */
    public static final int PICTURE_TYPE_EMF = 2;

    /**
     * Windows Meta File
     */
    public static final int PICTURE_TYPE_WMF = 3;

    /**
     * Mac PICT format
     */
    public static final int PICTURE_TYPE_PICT = 4;

    /**
     * JPEG format
     */
    public static final int PICTURE_TYPE_JPEG = 5;

    /**
     * PNG format
     */
    public static final int PICTURE_TYPE_PNG = 6;

    /**
     * Device independent bitmap
     */
    public static final int PICTURE_TYPE_DIB = 7;

    /**
     * GIF image format
     */
    public static final int PICTURE_TYPE_GIF = 8;

    /**
     * Tag Image File (.tiff)
     */
    public static final int PICTURE_TYPE_TIFF = 9;

    /**
     * Encapsulated Postscript (.eps)
     */
    public static final int PICTURE_TYPE_EPS = 10;


    /**
     * Windows Bitmap (.bmp)
     */
    public static final int PICTURE_TYPE_BMP = 11;

    /**
     * WordPerfect graphics (.wpg)
     */
    public static final int PICTURE_TYPE_WPG = 12;

    /**
     * Microsoft Windows Media Photo image (.wdp)
     */
    public static final int PICTURE_TYPE_WDP = 13;

    /**
     * Relationships for each known picture type
     */
    protected static final POIXMLRelation[] RELATIONS;

    static {
        RELATIONS = new POIXMLRelation[14];
        RELATIONS[PICTURE_TYPE_EMF] = XSLFRelation.IMAGE_EMF;
        RELATIONS[PICTURE_TYPE_WMF] = XSLFRelation.IMAGE_WMF;
        RELATIONS[PICTURE_TYPE_PICT] = XSLFRelation.IMAGE_PICT;
        RELATIONS[PICTURE_TYPE_JPEG] = XSLFRelation.IMAGE_JPEG;
        RELATIONS[PICTURE_TYPE_PNG] = XSLFRelation.IMAGE_PNG;
        RELATIONS[PICTURE_TYPE_DIB] = XSLFRelation.IMAGE_DIB;
        RELATIONS[PICTURE_TYPE_GIF] = XSLFRelation.IMAGE_GIF;
        RELATIONS[PICTURE_TYPE_TIFF] = XSLFRelation.IMAGE_TIFF;
        RELATIONS[PICTURE_TYPE_EPS] = XSLFRelation.IMAGE_EPS;
        RELATIONS[PICTURE_TYPE_BMP] = XSLFRelation.IMAGE_BMP;
        RELATIONS[PICTURE_TYPE_WPG] = XSLFRelation.IMAGE_WPG;
        RELATIONS[PICTURE_TYPE_WDP] = XSLFRelation.IMAGE_WDP;
    }

    private Long checksum = null;

    /**
     * Create a new XSLFGraphicData node
     */
    protected XSLFPictureData() {
        super();
    }

    /**
     * Construct XSLFPictureData from a package part
     *
     * @param part the package part holding the drawing data,
     * @param rel  the package relationship holding this drawing,
     *             the relationship type must be http://schemas.openxmlformats.org/officeDocument/2006/relationships/image
     */
    public XSLFPictureData(PackagePart part, PackageRelationship rel) {
        super(part, rel);
    }

    /**
     * Gets the picture data as a byte array.
     * 

* Note, that this call might be expensive since all the picture data is copied into a temporary byte array. * You can grab the picture data directly from the underlying package part as follows: *
* * InputStream is = getPackagePart().getInputStream(); * *

* * @return the Picture data. */ public byte[] getData() { try { return IOUtils.toByteArray(getPackagePart().getInputStream()); } catch (IOException e) { throw new POIXMLException(e); } } /** * Returns the file name of the image, eg image7.jpg . The original filename * isn't always available, but if it can be found it's likely to be in the * CTDrawing */ public String getFileName() { String name = getPackagePart().getPartName().getName(); if (name == null) return null; return name.substring(name.lastIndexOf('/') + 1); } /** * Suggests a file extension for this image. * * @return the file extension. */ public String suggestFileExtension() { return getPackagePart().getPartName().getExtension(); } /** * Return an integer constant that specifies type of this picture * * @return an integer constant that specifies type of this picture */ public int getPictureType() { String contentType = getPackagePart().getContentType(); for (int i = 0; i < RELATIONS.length; i++) { if (RELATIONS[i] == null) { continue; } if (RELATIONS[i].getContentType().equals(contentType)) { return i; } } return 0; } long getChecksum(){ if(checksum == null){ byte[] pictureData = getData(); checksum = IOUtils.calculateChecksum(pictureData); } return checksum; } /** * *PictureData objects store the actual content in the part directly without keeping a * copy like all others therefore we need to handle them differently. */ @Override protected void prepareForCommit() { // do not clear the part here } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy