PPDrawingGrouppublic class PPDrawingGroup extends RecordAtom Container records which always exists inside Document.
It always acts as a holder for escher DGG container
which may contain which Escher BStore container information
about pictures containes in the presentation (if any). |
Fields Summary |
---|
private byte[] | _header | private EscherContainerRecord | dggContainer |
Constructors Summary |
---|
protected PPDrawingGroup(byte[] source, int start, int len)
// Get the header
_header = new byte[8];
System.arraycopy(source,start,_header,0,8);
// Get the contents for now
byte[] contents = new byte[len];
System.arraycopy(source,start,contents,0,len);
DefaultEscherRecordFactory erf = new DefaultEscherRecordFactory();
EscherRecord child = erf.createRecord(contents, 0);
child.fillFields( contents, 0, erf );
dggContainer = (EscherContainerRecord)child.getChild(0);
|
Methods Summary |
---|
public org.apache.poi.hslf.record.Record[] | getChildRecords()We're pretending to be an atom, so return null
return null;
| public org.apache.poi.ddf.EscherContainerRecord | getDggContainer()
return dggContainer;
| public long | getRecordType()We are type 1035
return RecordTypes.PPDrawingGroup.typeID;
| public void | writeOut(java.io.OutputStream out)
ByteArrayOutputStream bout = new ByteArrayOutputStream();
List child = dggContainer.getChildRecords();
for (int i = 0; i < child.size(); i++) {
EscherRecord r = (EscherRecord)child.get(i);
if (r.getRecordId() == EscherContainerRecord.BSTORE_CONTAINER){
EscherContainerRecord bstore = (EscherContainerRecord)r;
ByteArrayOutputStream b2 = new ByteArrayOutputStream();
List blip = bstore.getChildRecords();
for (Iterator it=blip.iterator(); it.hasNext();) {
EscherBSERecord bse = (EscherBSERecord)it.next();
byte[] b = new byte[36+8];
bse.serialize(0, b);
b2.write(b);
}
byte[] bstorehead = new byte[8];
LittleEndian.putShort(bstorehead, 0, bstore.getOptions());
LittleEndian.putShort(bstorehead, 2, bstore.getRecordId());
LittleEndian.putInt(bstorehead, 4, b2.size());
bout.write(bstorehead);
bout.write(b2.toByteArray());
} else {
bout.write(r.serialize());
}
}
int size = bout.size();
// Update the size (header bytes 5-8)
LittleEndian.putInt(_header,4,size+8);
// Write out our header
out.write(_header);
byte[] dgghead = new byte[8];
LittleEndian.putShort(dgghead, 0, dggContainer.getOptions());
LittleEndian.putShort(dgghead, 2, dggContainer.getRecordId());
LittleEndian.putInt(dgghead, 4, size);
out.write(dgghead);
// Finally, write out the children
out.write(bout.toByteArray());
|
|