/** * Create a new ShapeGroup and create an instance of <code>EscherSpgrContainer</code> which * represents a group of shapes */ protected EscherContainerRecord createSpContainer(boolean isChild) { EscherContainerRecord spgr = new EscherContainerRecord(); spgr.setRecordId(EscherContainerRecord.SPGR_CONTAINER); spgr.setOptions((short) 15); // The group itself is a shape, and always appears as the first EscherSpContainer in the group // container. EscherContainerRecord spcont = new EscherContainerRecord(); spcont.setRecordId(EscherContainerRecord.SP_CONTAINER); spcont.setOptions((short) 15); EscherSpgrRecord spg = new EscherSpgrRecord(); spg.setOptions((short) 1); spcont.addChildRecord(spg); EscherSpRecord sp = new EscherSpRecord(); short type = (ShapeTypes.NotPrimitive << 4) + 2; sp.setOptions(type); sp.setFlags(EscherSpRecord.FLAG_HAVEANCHOR | EscherSpRecord.FLAG_GROUP); spcont.addChildRecord(sp); EscherClientAnchorRecord anchor = new EscherClientAnchorRecord(); spcont.addChildRecord(anchor); spgr.addChildRecord(spcont); return spgr; }
@Override public HSLFPictureData addPicture(byte[] data, PictureType format) throws IOException { if (format == null || format.nativeId == -1) { throw new IllegalArgumentException("Unsupported picture format: " + format); } byte[] uid = HSLFPictureData.getChecksum(data); for (HSLFPictureData pd : getPictureData()) { if (Arrays.equals(pd.getUID(), uid)) { return pd; } } EscherContainerRecord bstore; EscherContainerRecord dggContainer = _documentRecord.getPPDrawingGroup().getDggContainer(); bstore = (EscherContainerRecord) HSLFShape.getEscherChild(dggContainer, EscherContainerRecord.BSTORE_CONTAINER); if (bstore == null) { bstore = new EscherContainerRecord(); bstore.setRecordId(EscherContainerRecord.BSTORE_CONTAINER); dggContainer.addChildBefore(bstore, EscherOptRecord.RECORD_ID); } HSLFPictureData pict = HSLFPictureData.create(format); pict.setData(data); int offset = _hslfSlideShow.addPicture(pict); EscherBSERecord bse = new EscherBSERecord(); bse.setRecordId(EscherBSERecord.RECORD_ID); bse.setOptions((short) (0x0002 | (format.nativeId << 4))); bse.setSize(pict.getRawData().length + 8); bse.setUid(uid); bse.setBlipTypeMacOS((byte) format.nativeId); bse.setBlipTypeWin32((byte) format.nativeId); if (format == PictureType.EMF) { bse.setBlipTypeMacOS((byte) PictureType.PICT.nativeId); } else if (format == PictureType.WMF) { bse.setBlipTypeMacOS((byte) PictureType.PICT.nativeId); } else if (format == PictureType.PICT) { bse.setBlipTypeWin32((byte) PictureType.WMF.nativeId); } bse.setRef(0); bse.setOffset(offset); bse.setRemainingData(new byte[0]); bstore.addChildRecord(bse); int count = bstore.getChildRecords().size(); bstore.setOptions((short) ((count << 4) | 0xF)); return pict; }
/** No NullPointerException should appear */ public void testDefaultSettingsWithEmptyContainer() { EscherContainerRecord container = new EscherContainerRecord(); EscherOptRecord opt = new EscherOptRecord(); opt.setRecordId(EscherOptRecord.RECORD_ID); container.addChildRecord(opt); ObjRecord obj = new ObjRecord(); CommonObjectDataSubRecord cod = new CommonObjectDataSubRecord(); cod.setObjectType(HSSFSimpleShape.OBJECT_TYPE_PICTURE); obj.addSubRecord(cod); HSSFPicture picture = new HSSFPicture(container, obj); assertEquals(picture.getLineWidth(), HSSFShape.LINEWIDTH_DEFAULT); assertEquals(picture.getFillColor(), HSSFShape.FILL__FILLCOLOR_DEFAULT); assertEquals(picture.getLineStyle(), HSSFShape.LINESTYLE_DEFAULT); assertEquals(picture.getLineStyleColor(), HSSFShape.LINESTYLE__COLOR_DEFAULT); assertEquals(picture.isNoFill(), HSSFShape.NO_FILL_DEFAULT); assertEquals(picture.getPictureIndex(), -1); // not set yet }