FileDocCategorySizeDatePackage
EscherBlipWMFRecord.javaAPI DocApache Poi 3.0.114038Mon Jan 01 12:39:40 GMT 2007org.apache.poi.ddf

EscherBlipWMFRecord

public class EscherBlipWMFRecord extends EscherBlipRecord
The blip record is used to hold details about large binary objects that occur in escher such as JPEG, GIF, PICT and WMF files. The contents of the stream is usually compressed. Inflate can be used to decompress the data.
author
Glen Stampoultzis
see
java.util.zip.Inflater

Fields Summary
public static final String
RECORD_DESCRIPTION
private static final int
HEADER_SIZE
private byte[]
field_1_secondaryUID
private int
field_2_cacheOfSize
private int
field_3_boundaryTop
private int
field_4_boundaryLeft
private int
field_5_boundaryWidth
private int
field_6_boundaryHeight
private int
field_7_width
private int
field_8_height
private int
field_9_cacheOfSavedSize
private byte
field_10_compressionFlag
private byte
field_11_filter
private byte[]
field_12_data
Constructors Summary
Methods Summary
public static byte[]compress(byte[] data)
Compress the contents of the provided array

param
data An uncompressed byte array
see
DeflaterOutputStream#write(int b)

        ByteArrayOutputStream out                  = new ByteArrayOutputStream();
        DeflaterOutputStream  deflaterOutputStream = new DeflaterOutputStream( out );
        try
        {
            for ( int i = 0; i < data.length; i++ )
                deflaterOutputStream.write( data[i] );
        }
        catch ( IOException e )
        {
            throw new RecordFormatException( e.toString() );
        }

        return out.toByteArray();
    
public static byte[]decompress(byte[] data, int pos, int length)
Decompresses a byte array.

param
data The compressed byte array
param
pos The starting position into the byte array
param
length The number of compressed bytes to decompress
return
An uncompressed byte array
see
InflaterInputStream#read

        byte[] compressedData = new byte[length];
        System.arraycopy( data, pos + 50, compressedData, 0, length );
        InputStream           compressedInputStream = new ByteArrayInputStream( compressedData );
        InflaterInputStream   inflaterInputStream   = new InflaterInputStream( compressedInputStream );
        ByteArrayOutputStream out                   = new ByteArrayOutputStream();
        int                   c;
        try
        {
            while ( ( c = inflaterInputStream.read() ) != -1 )
                out.write( c );
        }
        catch ( IOException e )
        {
            throw new RecordFormatException( e.toString() );
        }
        return out.toByteArray();
    
public intfillFields(byte[] data, int offset, org.apache.poi.ddf.EscherRecordFactory recordFactory)
This method deserializes the record from a byte array.

param
data The byte array containing the escher record information
param
offset The starting offset into data.
param
recordFactory May be null since this is not a container record.
return
The number of bytes read from the byte array.



                                                                         
          
                               
                              
    
        int bytesAfterHeader = readHeader( data, offset );
        int pos              = offset + HEADER_SIZE;

        int size = 0;
        field_1_secondaryUID = new byte[16];
        System.arraycopy( data, pos + size, field_1_secondaryUID, 0, 16 ); size += 16;
        field_2_cacheOfSize      =  LittleEndian.getInt( data, pos + size );size+=4;
        field_3_boundaryTop      =  LittleEndian.getInt( data, pos + size );size+=4;
        field_4_boundaryLeft     =  LittleEndian.getInt( data, pos + size );size+=4;
        field_5_boundaryWidth    =  LittleEndian.getInt( data, pos + size );size+=4;
        field_6_boundaryHeight   =  LittleEndian.getInt( data, pos + size );size+=4;
        field_7_width            =  LittleEndian.getInt( data, pos + size );size+=4;
        field_8_height           =  LittleEndian.getInt( data, pos + size );size+=4;
        field_9_cacheOfSavedSize =  LittleEndian.getInt( data, pos + size );size+=4;
        field_10_compressionFlag = data[pos + size]; size++;
        field_11_filter          = data[pos + size]; size++;

        int bytesRemaining = bytesAfterHeader - size;
        field_12_data = new byte[bytesRemaining];
        System.arraycopy(data, pos + size, field_12_data, 0, bytesRemaining);
        size += bytesRemaining;

        return HEADER_SIZE + size;
    
public intgetBoundaryHeight()
Retrieve the boundary height of the metafile drawing commands

        return field_6_boundaryHeight;
    
public intgetBoundaryLeft()
Retrieve the left boundary of the metafile drawing commands

        return field_4_boundaryLeft;
    
public intgetBoundaryTop()
Retrieve the top boundary of the metafile drawing commands

        return field_3_boundaryTop;
    
public intgetBoundaryWidth()
Retrieve the boundary width of the metafile drawing commands

        return field_5_boundaryWidth;
    
public intgetCacheOfSavedSize()
Retrieve the cache of the saved size

        return field_9_cacheOfSavedSize;
    
public intgetCacheOfSize()
Retrieve the cache of the metafile size

        return field_2_cacheOfSize;
    
public bytegetCompressionFlag()
Is the contents of the blip compressed?

        return field_10_compressionFlag;
    
public byte[]getData()
The BLIP data

        return field_12_data;
    
public bytegetFilter()
Filter should always be 0

        return field_11_filter;
    
public intgetHeight()
Retrieve the height of the metafile in EMU's (English Metric Units).

        return field_8_height;
    
public java.lang.StringgetRecordName()
The short name for this record

        return "Blip";
    
public intgetRecordSize()
Returns the number of bytes that are required to serialize this record.

return
Number of bytes

        return 58 + field_12_data.length;
    
public byte[]getSecondaryUID()
Retrieve the secondary UID

        return field_1_secondaryUID;
    
public intgetWidth()
Retrieve the width of the metafile in EMU's (English Metric Units).

        return field_7_width;
    
public intserialize(int offset, byte[] data, org.apache.poi.ddf.EscherSerializationListener listener)
This method serializes this escher record into a byte array.

param
offset The offset into data to start writing the record data to.
param
data The byte array to serialize to.
param
listener A listener to retrieve start and end callbacks. Use a NullEscherSerailizationListener to ignore these events.
return
The number of bytes written.
see
NullEscherSerializationListener

        listener.beforeRecordSerialize(offset, getRecordId(), this);

        LittleEndian.putShort( data, offset, getOptions() );
        LittleEndian.putShort( data, offset + 2, getRecordId() );
        int remainingBytes = field_12_data.length + 36;
        LittleEndian.putInt( data, offset + 4, remainingBytes );

        int pos = offset + HEADER_SIZE;
        System.arraycopy(field_1_secondaryUID, 0, data, pos, 16 ); pos += 16;
        LittleEndian.putInt( data, pos, field_2_cacheOfSize); pos += 4;
        LittleEndian.putInt( data, pos, field_3_boundaryTop); pos += 4;
        LittleEndian.putInt( data, pos, field_4_boundaryLeft); pos += 4;
        LittleEndian.putInt( data, pos, field_5_boundaryWidth); pos += 4;
        LittleEndian.putInt( data, pos, field_6_boundaryHeight); pos += 4;
        LittleEndian.putInt( data, pos, field_7_width); pos += 4;
        LittleEndian.putInt( data, pos, field_8_height); pos += 4;
        LittleEndian.putInt( data, pos, field_9_cacheOfSavedSize); pos += 4;
        data[pos++] = field_10_compressionFlag;
        data[pos++] = field_11_filter;
        System.arraycopy(field_12_data, 0, data, pos, field_12_data.length); pos += field_12_data.length;

        listener.afterRecordSerialize(pos, getRecordId(), pos - offset, this);
        return pos - offset;
    
public voidsetBoundaryHeight(int field_6_boundaryHeight)
Set the boundary height of the metafile drawing commands

        this.field_6_boundaryHeight = field_6_boundaryHeight;
    
public voidsetBoundaryLeft(int field_4_boundaryLeft)
Set the left boundary of the metafile drawing commands

        this.field_4_boundaryLeft = field_4_boundaryLeft;
    
public voidsetBoundaryTop(int field_3_boundaryTop)
Set the top boundary of the metafile drawing commands

        this.field_3_boundaryTop = field_3_boundaryTop;
    
public voidsetBoundaryWidth(int field_5_boundaryWidth)
Set the boundary width of the metafile drawing commands

        this.field_5_boundaryWidth = field_5_boundaryWidth;
    
public voidsetCacheOfSavedSize(int field_9_cacheOfSavedSize)
Set the cache of the saved size

        this.field_9_cacheOfSavedSize = field_9_cacheOfSavedSize;
    
public voidsetCacheOfSize(int field_2_cacheOfSize)
Set the cache of the metafile size

        this.field_2_cacheOfSize = field_2_cacheOfSize;
    
public voidsetCompressionFlag(byte field_10_compressionFlag)
Set whether the contents of the blip is compressed

        this.field_10_compressionFlag = field_10_compressionFlag;
    
public voidsetData(byte[] field_12_data)
The BLIP data

        this.field_12_data = field_12_data;
    
public voidsetFilter(byte field_11_filter)
Filter should always be 0

        this.field_11_filter = field_11_filter;
    
public voidsetHeight(int height)
Set the height of the metafile in EMU's (English Metric Units).

        this.field_8_height = height;
    
public voidsetSecondaryUID(byte[] field_1_secondaryUID)
Set the secondary UID

        this.field_1_secondaryUID = field_1_secondaryUID;
    
public voidsetWidth(int width)
Set the width of the metafile in EMU's (English Metric Units).

        this.field_7_width = width;
    
public java.lang.StringtoString()
The string representation of this record.

return
A string

        String nl = System.getProperty( "line.separator" );

        String extraData;
        ByteArrayOutputStream b = new ByteArrayOutputStream();
        try
        {
            HexDump.dump( this.field_12_data, 0, b, 0 );
            extraData = b.toString();
        }
        catch ( Exception e )
        {
            extraData = e.toString();
        }
        return getClass().getName() + ":" + nl +
                "  RecordId: 0x" + HexDump.toHex( getRecordId() ) + nl +
                "  Options: 0x" + HexDump.toHex( getOptions() ) + nl +
                "  Secondary UID: " + HexDump.toHex( field_1_secondaryUID ) + nl +
                "  CacheOfSize: " + field_2_cacheOfSize + nl +
                "  BoundaryTop: " + field_3_boundaryTop + nl +
                "  BoundaryLeft: " + field_4_boundaryLeft + nl +
                "  BoundaryWidth: " + field_5_boundaryWidth + nl +
                "  BoundaryHeight: " + field_6_boundaryHeight + nl +
                "  X: " + field_7_width + nl +
                "  Y: " + field_8_height + nl +
                "  CacheOfSavedSize: " + field_9_cacheOfSavedSize + nl +
                "  CompressionFlag: " + field_10_compressionFlag + nl +
                "  Filter: " + field_11_filter + nl +
                "  Data:" + nl + extraData;