package org.apache.poi.hwpf.model;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
-import org.apache.poi.util.POILogFactory;
-
-import org.apache.poi.util.POILogger;
-
import org.apache.poi.ddf.DefaultEscherRecordFactory;
import org.apache.poi.ddf.EscherBSERecord;
import org.apache.poi.ddf.EscherBlipRecord;
import org.apache.poi.hwpf.usermodel.Range;
import org.apache.poi.util.Internal;
import org.apache.poi.util.LittleEndian;
+import org.apache.poi.util.POILogFactory;
+import org.apache.poi.util.POILogger;
/**
* Holds information about all pictures embedded in Word Document either via "Insert -> Picture -> From File" or via
EscherBlipRecord blip = bse.getBlipRecord();
if (blip != null)
{
- pictures.add(new Picture(blip.getPicturedata()));
+ pictures.add(new Picture(blip));
}
else if ( bse.getOffset() > 0 )
{
record.fillFields( _mainStream, bse.getOffset(),
recordFactory );
blip = (EscherBlipRecord) record;
- pictures.add( new Picture( blip.getPicturedata() ) );
+ pictures.add( new Picture( blip ) );
}
}
catch ( Exception exc )
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
+import java.util.Arrays;
+import java.util.List;
import java.util.zip.InflaterInputStream;
-import org.apache.poi.ddf.EscherSimpleProperty;
-
-import org.apache.poi.ddf.EscherProperty;
-
-import org.apache.poi.ddf.EscherOptRecord;
-
-import org.apache.poi.ddf.EscherContainerRecord;
-
import org.apache.poi.ddf.EscherBSERecord;
import org.apache.poi.ddf.EscherBlipRecord;
import org.apache.poi.ddf.EscherRecord;
/**
* Represents embedded picture extracted from Word Document
- *
- * @author Dmitry Romanov
*/
public final class Picture
{
private PICF _picf;
private PICFAndOfficeArtData _picfAndOfficeArtData;
+ private List<? extends EscherRecord> _blipRecords;
private byte[] content;
private int dataBlockStartOfsset;
private int height = -1;
private int width = -1;
- public Picture( byte[] _dataStream )
+ /**
+ * Builds a Picture object for a Picture stored as
+ * Escher.
+ * TODO We need to pass in the PICF data too somehow!
+ */
+ public Picture( EscherBlipRecord blipRecord )
{
- super();
-
- // XXX: implement
- // this._dataStream = _dataStream;
- // this.dataBlockStartOfsset = 0;
- // this.dataBlockSize = _dataStream.length;
- // this.pictureBytesStartOffset = 0;
- // this.size = _dataStream.length;
+ this._blipRecords = Arrays.asList(new EscherBlipRecord[] {blipRecord});
}
+ /**
+ * Builds a Picture object for a Picture stored in the
+ * DataStream
+ */
public Picture( int dataBlockStartOfsset, byte[] _dataStream,
boolean fillBytes )
{
this.dataBlockStartOfsset = dataBlockStartOfsset;
- if ( fillBytes )
+ if ( _picfAndOfficeArtData != null && _picfAndOfficeArtData.getBlipRecords() != null) {
+ _blipRecords = _picfAndOfficeArtData.getBlipRecords();
+ }
+
+ if ( fillBytes ) {
fillImageContent();
+ }
}
private void fillImageContent()
*/
public byte[] getRawContent()
{
- if ( _picfAndOfficeArtData == null ||
- _picfAndOfficeArtData.getBlipRecords()== null ||
- _picfAndOfficeArtData.getBlipRecords().size() != 1 )
- return new byte[0];
+ if (_blipRecords == null || _blipRecords.size() != 1) {
+ return new byte[0];
+ }
- EscherRecord escherRecord = _picfAndOfficeArtData.getBlipRecords().get(
- 0 );
+ EscherRecord escherRecord = _blipRecords.get( 0 );
if ( escherRecord instanceof EscherBlipRecord )
{
return ( (EscherBlipRecord) escherRecord ).getPicturedata();
public PictureType suggestPictureType()
{
- if ( _picfAndOfficeArtData == null ||
- _picfAndOfficeArtData.getBlipRecords()== null ||
- _picfAndOfficeArtData.getBlipRecords().size() != 1 )
+ if (_blipRecords == null || _blipRecords.size() != 1 ) {
return PictureType.UNKNOWN;
+ }
- EscherRecord escherRecord = _picfAndOfficeArtData.getBlipRecords().get(
- 0 );
+ EscherRecord escherRecord = _blipRecords.get( 0 );
switch ( escherRecord.getRecordId() )
{
case (short) 0xF007: