git-svn-id: https://svn.apache.org/repos/asf/poi/branches/gsoc2012@1353960 13f79535-47bb-0310-9956-ffa450edef68tags/3.10-beta1
this.drawingManager = drawingManager; | this.drawingManager = drawingManager; | ||||
} | } | ||||
public DrawingManager2 getDrawingManager() { | |||||
return drawingManager; | |||||
} | |||||
/** | /** | ||||
* @return Returns the current sid. | * @return Returns the current sid. | ||||
*/ | */ | ||||
/** | /** | ||||
* Associates an escher record to an OBJ record or a TXO record. | * Associates an escher record to an OBJ record or a TXO record. | ||||
*/ | */ | ||||
public Object associateShapeToObjRecord(EscherRecord r, ObjRecord objRecord) { | |||||
public Object associateShapeToObjRecord(EscherRecord r, Record objRecord) { | |||||
return shapeToObj.put(r, objRecord); | return shapeToObj.put(r, objRecord); | ||||
} | } | ||||
EscherDgRecord dg = new EscherDgRecord(); | EscherDgRecord dg = new EscherDgRecord(); | ||||
dg.setRecordId( EscherDgRecord.RECORD_ID ); | dg.setRecordId( EscherDgRecord.RECORD_ID ); | ||||
short dgId = 1; | short dgId = 1; | ||||
dg.setOptions( (short) ( dgId << 4 ) ); | |||||
dg.setNumShapes( 1 ); | |||||
dg.setLastMSOSPID( 1024 ); | |||||
dg.setOptions((short) (dgId << 4)); | |||||
dg.setNumShapes(1); | |||||
dg.setLastMSOSPID(1024); | |||||
drawingGroupId = dg.getDrawingGroupId(); | drawingGroupId = dg.getDrawingGroupId(); | ||||
spgrContainer.setRecordId(EscherContainerRecord.SPGR_CONTAINER); | spgrContainer.setRecordId(EscherContainerRecord.SPGR_CONTAINER); | ||||
spgrContainer.setOptions((short) 0x000F); | spgrContainer.setOptions((short) 0x000F); |
} | } | ||||
protected HSSFComment(NoteRecord note, TextObjectRecord txo) { | protected HSSFComment(NoteRecord note, TextObjectRecord txo) { | ||||
this((HSSFShape) null, (HSSFAnchor) null); | |||||
this(null, new HSSFClientAnchor()); | |||||
_txo = txo; | _txo = txo; | ||||
_note = note; | _note = note; | ||||
} | } | ||||
/** | /** | ||||
* Returns the underlying Text record | * Returns the underlying Text record | ||||
*/ | */ | ||||
protected TextObjectRecord getTextObjectRecord() { | |||||
public TextObjectRecord getTextObjectRecord() { | |||||
return _txo; | return _txo; | ||||
} | } | ||||
} | } |
import java.util.Iterator; | import java.util.Iterator; | ||||
import java.util.List; | import java.util.List; | ||||
import org.apache.poi.ddf.EscherComplexProperty; | |||||
import org.apache.poi.ddf.EscherContainerRecord; | |||||
import org.apache.poi.ddf.EscherOptRecord; | |||||
import org.apache.poi.ddf.EscherProperty; | |||||
import org.apache.poi.ddf.EscherBSERecord; | |||||
import org.apache.poi.ddf.EscherSpgrRecord; | |||||
import org.apache.poi.ddf.*; | |||||
import org.apache.poi.hssf.model.DrawingManager2; | |||||
import org.apache.poi.hssf.record.EscherAggregate; | import org.apache.poi.hssf.record.EscherAggregate; | ||||
import org.apache.poi.ss.usermodel.Chart; | import org.apache.poi.ss.usermodel.Chart; | ||||
import org.apache.poi.util.StringUtil; | import org.apache.poi.util.StringUtil; | ||||
HSSFSimpleShape shape = new HSSFSimpleShape(null, anchor); | HSSFSimpleShape shape = new HSSFSimpleShape(null, anchor); | ||||
shape.anchor = anchor; | shape.anchor = anchor; | ||||
addShape(shape); | addShape(shape); | ||||
//open existing file | |||||
onCreate(shape); | |||||
return shape; | return shape; | ||||
} | } | ||||
shape.setPictureIndex( pictureIndex ); | shape.setPictureIndex( pictureIndex ); | ||||
shape.anchor = anchor; | shape.anchor = anchor; | ||||
addShape(shape); | addShape(shape); | ||||
//open existing file | |||||
onCreate(shape); | |||||
EscherBSERecord bse = _sheet.getWorkbook().getWorkbook().getBSERecord(pictureIndex); | EscherBSERecord bse = _sheet.getWorkbook().getWorkbook().getBSERecord(pictureIndex); | ||||
bse.setRef(bse.getRef() + 1); | bse.setRef(bse.getRef() + 1); | ||||
HSSFTextbox shape = new HSSFTextbox(null, anchor); | HSSFTextbox shape = new HSSFTextbox(null, anchor); | ||||
shape.anchor = anchor; | shape.anchor = anchor; | ||||
addShape(shape); | addShape(shape); | ||||
onCreate(shape); | |||||
return shape; | return shape; | ||||
} | } | ||||
_shapes.add(shape); | _shapes.add(shape); | ||||
} | } | ||||
private void onCreate(HSSFShape shape){ | |||||
if(_boundAggregate.getPatriarch() == null){ | |||||
EscherContainerRecord spgrContainer = | |||||
_boundAggregate.getEscherContainer().getChildContainers().get(0); | |||||
EscherContainerRecord spContainer = shape.getEscherContainer(); | |||||
int shapeId = newShapeId(); | |||||
shape.setShapeId(shapeId); | |||||
spgrContainer.addChildRecord(spContainer); | |||||
shape.afterInsert(this); | |||||
} | |||||
} | |||||
/** | /** | ||||
* Total count of all children and their children's children. | * Total count of all children and their children's children. | ||||
*/ | */ | ||||
_y2 = y2; | _y2 = y2; | ||||
} | } | ||||
int newShapeId() { | |||||
if (_boundAggregate.getEscherContainer() == null){ | |||||
throw new IllegalStateException("We can use this method for only existing files"); | |||||
} | |||||
DrawingManager2 dm = _boundAggregate.getDrawingManager(); | |||||
EscherDgRecord dg = | |||||
_boundAggregate.getEscherContainer().getChildById(EscherDgRecord.RECORD_ID); | |||||
short drawingGroupId = dg.getDrawingGroupId(); | |||||
return dm.allocateShapeId(drawingGroupId, dg); | |||||
} | |||||
/** | /** | ||||
* Does this HSSFPatriarch contain a chart? | * Does this HSSFPatriarch contain a chart? | ||||
* (Technically a reference to a chart, since they | * (Technically a reference to a chart, since they |
package org.apache.poi.hssf.usermodel; | package org.apache.poi.hssf.usermodel; | ||||
import org.apache.poi.ddf.EscherContainerRecord; | |||||
import org.apache.poi.hssf.record.ObjRecord; | |||||
/** | /** | ||||
* @author Glen Stampoultzis (glens at superlinksoftware.com) | * @author Glen Stampoultzis (glens at superlinksoftware.com) | ||||
*/ | */ | ||||
super( parent, anchor ); | super( parent, anchor ); | ||||
} | } | ||||
@Override | |||||
protected EscherContainerRecord createSpContainer() { | |||||
return null; //To change body of implemented methods use File | Settings | File Templates. | |||||
} | |||||
@Override | |||||
protected ObjRecord createObjRecord() { | |||||
return null; //To change body of implemented methods use File | Settings | File Templates. | |||||
} | |||||
public int[] getXPoints() | public int[] getXPoints() | ||||
{ | { | ||||
return xPoints; | return xPoints; |
package org.apache.poi.hssf.usermodel; | package org.apache.poi.hssf.usermodel; | ||||
import org.apache.poi.ddf.*; | import org.apache.poi.ddf.*; | ||||
import org.apache.poi.hssf.record.CommonObjectDataSubRecord; | |||||
import org.apache.poi.hssf.record.ObjRecord; | import org.apache.poi.hssf.record.ObjRecord; | ||||
/** | /** | ||||
this.anchor = anchor; | this.anchor = anchor; | ||||
this._escherContainer = new EscherContainerRecord(); | this._escherContainer = new EscherContainerRecord(); | ||||
_optRecord = new EscherOptRecord(); | _optRecord = new EscherOptRecord(); | ||||
_optRecord.setRecordId( EscherOptRecord.RECORD_ID ); | |||||
_optRecord.addEscherProperty(new EscherSimpleProperty(EscherProperties.LINESTYLE__LINEDASHING, LINESTYLE_SOLID)); | _optRecord.addEscherProperty(new EscherSimpleProperty(EscherProperties.LINESTYLE__LINEDASHING, LINESTYLE_SOLID)); | ||||
_optRecord.addEscherProperty(new EscherSimpleProperty(EscherProperties.LINESTYLE__LINEWIDTH, LINEWIDTH_DEFAULT)); | _optRecord.addEscherProperty(new EscherSimpleProperty(EscherProperties.LINESTYLE__LINEWIDTH, LINEWIDTH_DEFAULT)); | ||||
_optRecord.addEscherProperty(new EscherRGBProperty(EscherProperties.FILL__FILLCOLOR, FILL__FILLCOLOR_DEFAULT)); | _optRecord.addEscherProperty(new EscherRGBProperty(EscherProperties.FILL__FILLCOLOR, FILL__FILLCOLOR_DEFAULT)); | ||||
_optRecord.addEscherProperty(new EscherBoolProperty(EscherProperties.FILL__NOFILLHITTEST, 0x0)); | _optRecord.addEscherProperty(new EscherBoolProperty(EscherProperties.FILL__NOFILLHITTEST, 0x0)); | ||||
} | } | ||||
protected abstract EscherContainerRecord createSpContainer(); | |||||
protected abstract ObjRecord createObjRecord(); | |||||
void setShapeId(int shapeId){ | |||||
EscherSpRecord spRecord = _escherContainer.getChildById(EscherSpRecord.RECORD_ID); | |||||
spRecord.setShapeId(shapeId); | |||||
CommonObjectDataSubRecord cod = (CommonObjectDataSubRecord) _objRecord.getSubRecords().get(0); | |||||
cod.setObjectId((short) (shapeId-1024)); | |||||
} | |||||
int getShapeId(){ | |||||
return ((EscherSpRecord)_escherContainer.getChildById(EscherSpRecord.RECORD_ID)).getShapeId(); | |||||
} | |||||
void afterInsert(HSSFPatriarch patriarch){ | |||||
} | |||||
public EscherContainerRecord getEscherContainer() { | public EscherContainerRecord getEscherContainer() { | ||||
return _escherContainer; | return _escherContainer; | ||||
} | } |
break; | break; | ||||
} | } | ||||
} | } | ||||
if (null != objRecord){ | |||||
HSSFShape shape = shapeCreator.createNewShape(spRecord.getShapeType(), container, objRecord); | |||||
out.addShape(shape); | |||||
CommonObjectDataSubRecord cmo = (CommonObjectDataSubRecord) objRecord.getSubRecords().get(0); | |||||
HSSFShape shape = null; | |||||
switch (cmo.getObjectType()) { | |||||
case CommonObjectDataSubRecord.OBJECT_TYPE_PICTURE: | |||||
shape = new HSSFPicture(container, objRecord); | |||||
break; | |||||
case CommonObjectDataSubRecord.OBJECT_TYPE_RECTANGLE: | |||||
shape = new HSSFSimpleShape(container, objRecord); | |||||
break; | |||||
case CommonObjectDataSubRecord.OBJECT_TYPE_TEXT: | |||||
shape = new HSSFTextbox(container, objRecord, txtRecord); | |||||
break; | |||||
default: | |||||
shape = new HSSFSimpleShape(container, objRecord); | |||||
} | } | ||||
if (null != txtRecord){ | |||||
//TODO resolve textbox | |||||
// TextboxShape shape = new TextboxShape(container, txtRecord); | |||||
// out.a | |||||
if (null != shape){ | |||||
out.addShape(shape); | |||||
} | } | ||||
// | |||||
// //TODO decide what shape to create based on ObjRecord / EscherSpRecord | |||||
// HSSFShape shape = new HSSFUnknownShape(container, objRecord); | |||||
// out.addShape(shape); | |||||
// if (null != objRecord){ | |||||
// HSSFShape shape = shapeCreator.createNewShape(spRecord.getShapeType(), container, objRecord); | |||||
// out.addShape(shape); | |||||
// } | |||||
// if (null != txtRecord){ | |||||
// //TODO resolve textbox | |||||
//// TextboxShape shape = new TextboxShape(container, txtRecord); | |||||
//// out.a | |||||
// } | |||||
//// | |||||
//// //TODO decide what shape to create based on ObjRecord / EscherSpRecord | |||||
//// HSSFShape shape = new HSSFUnknownShape(container, objRecord); | |||||
//// out.addShape(shape); | |||||
} | } | ||||
} | } | ||||
} | } |
_spgrRecord.setRectY2(255); | _spgrRecord.setRectY2(255); | ||||
} | } | ||||
@Override | |||||
protected EscherContainerRecord createSpContainer() { | |||||
return null; //To change body of implemented methods use File | Settings | File Templates. | |||||
} | |||||
@Override | |||||
protected ObjRecord createObjRecord() { | |||||
return null; //To change body of implemented methods use File | Settings | File Templates. | |||||
} | |||||
/** | /** | ||||
* Create another group under this group. | * Create another group under this group. | ||||
* @param anchor the position of the new group. | * @param anchor the position of the new group. |
import org.apache.poi.ddf.*; | import org.apache.poi.ddf.*; | ||||
import org.apache.poi.hssf.record.CommonObjectDataSubRecord; | import org.apache.poi.hssf.record.CommonObjectDataSubRecord; | ||||
import org.apache.poi.hssf.record.EndSubRecord; | |||||
import org.apache.poi.hssf.record.EscherAggregate; | |||||
import org.apache.poi.hssf.record.ObjRecord; | import org.apache.poi.hssf.record.ObjRecord; | ||||
import org.apache.poi.hssf.usermodel.drawing.HSSFShapeType; | |||||
import java.util.HashMap; | |||||
import java.util.Map; | |||||
/** | /** | ||||
* Represents a simple shape such as a line, rectangle or oval. | * Represents a simple shape such as a line, rectangle or oval. | ||||
int shapeType = OBJECT_TYPE_LINE; | int shapeType = OBJECT_TYPE_LINE; | ||||
private static final Map <Short, Short> objTypeToShapeType = new HashMap<Short, Short>(); | |||||
static { | |||||
objTypeToShapeType.put(OBJECT_TYPE_RECTANGLE, HSSFShapeType.RECTANGLE.getType()); | |||||
objTypeToShapeType.put(OBJECT_TYPE_PICTURE, HSSFShapeType.PICTURE.getType()); | |||||
objTypeToShapeType.put(OBJECT_TYPE_LINE, HSSFShapeType.LINE.getType()); | |||||
} | |||||
public HSSFSimpleShape(EscherContainerRecord spContainer, ObjRecord objRecord) { | public HSSFSimpleShape(EscherContainerRecord spContainer, ObjRecord objRecord) { | ||||
super(spContainer, objRecord); | super(spContainer, objRecord); | ||||
CommonObjectDataSubRecord cod = (CommonObjectDataSubRecord) objRecord.getSubRecords().get(0); | |||||
setShapeType(cod.getObjectType()); | |||||
} | } | ||||
public HSSFSimpleShape( HSSFShape parent, HSSFAnchor anchor) | public HSSFSimpleShape( HSSFShape parent, HSSFAnchor anchor) | ||||
{ | { | ||||
super( parent, anchor ); | super( parent, anchor ); | ||||
_escherContainer = createSpContainer(); | |||||
_objRecord = createObjRecord(); | |||||
setShapeType(OBJECT_TYPE_LINE); | |||||
} | |||||
@Override | |||||
protected EscherContainerRecord createSpContainer() { | |||||
EscherContainerRecord spContainer = new EscherContainerRecord(); | |||||
spContainer.setRecordId( EscherContainerRecord.SP_CONTAINER ); | |||||
spContainer.setOptions( (short) 0x000F ); | |||||
EscherSpRecord sp = new EscherSpRecord(); | |||||
sp.setRecordId( EscherSpRecord.RECORD_ID ); | |||||
sp.setFlags( EscherSpRecord.FLAG_HAVEANCHOR | EscherSpRecord.FLAG_HASSHAPETYPE ); | |||||
EscherClientDataRecord clientData = new EscherClientDataRecord(); | |||||
clientData.setRecordId( EscherClientDataRecord.RECORD_ID ); | |||||
clientData.setOptions( (short) 0x0000 ); | |||||
spContainer.addChildRecord(sp); | |||||
spContainer.addChildRecord(_optRecord); | |||||
spContainer.addChildRecord(anchor.getEscherAnchor()); | |||||
spContainer.addChildRecord(clientData); | |||||
return spContainer; | |||||
} | } | ||||
@Override | |||||
protected ObjRecord createObjRecord() { | |||||
ObjRecord obj = new ObjRecord(); | |||||
CommonObjectDataSubRecord c = new CommonObjectDataSubRecord(); | |||||
c.setLocked(true); | |||||
c.setPrintable(true); | |||||
c.setAutofill(true); | |||||
c.setAutoline(true); | |||||
EndSubRecord e = new EndSubRecord(); | |||||
obj.addSubRecord(c); | |||||
obj.addSubRecord(e); | |||||
return obj; | |||||
} | |||||
@Override | |||||
void afterInsert(HSSFPatriarch patriarch){ | |||||
EscherAggregate agg = patriarch._getBoundAggregate(); | |||||
agg.associateShapeToObjRecord(_escherContainer.getChildById(EscherClientDataRecord.RECORD_ID), getObjRecord()); | |||||
} | |||||
/** | /** | ||||
* Gets the shape type. | * Gets the shape type. | ||||
* @return One of the OBJECT_TYPE_* constants. | * @return One of the OBJECT_TYPE_* constants. | ||||
* @see #OBJECT_TYPE_PICTURE | * @see #OBJECT_TYPE_PICTURE | ||||
* @see #OBJECT_TYPE_COMMENT | * @see #OBJECT_TYPE_COMMENT | ||||
*/ | */ | ||||
public int getShapeType() { return shapeType; } | |||||
public int getShapeType() { | |||||
CommonObjectDataSubRecord cod = (CommonObjectDataSubRecord) _objRecord.getSubRecords().get(0); | |||||
return cod.getObjectType(); | |||||
} | |||||
/** | /** | ||||
* Sets the shape types. | * Sets the shape types. | ||||
* @see #OBJECT_TYPE_PICTURE | * @see #OBJECT_TYPE_PICTURE | ||||
* @see #OBJECT_TYPE_COMMENT | * @see #OBJECT_TYPE_COMMENT | ||||
*/ | */ | ||||
public void setShapeType( int shapeType ){ this.shapeType = shapeType; } | |||||
public void setShapeType( int shapeType ){ | |||||
CommonObjectDataSubRecord cod = (CommonObjectDataSubRecord) _objRecord.getSubRecords().get(0); | |||||
cod.setObjectType((short) shapeType); | |||||
EscherSpRecord spRecord = _escherContainer.getChildById(EscherSpRecord.RECORD_ID); | |||||
if (null == objTypeToShapeType.get((short)shapeType)){ | |||||
System.out.println("Unknown shape type: "+shapeType); | |||||
return; | |||||
} | |||||
spRecord.setShapeType(objTypeToShapeType.get((short)shapeType)); | |||||
} | |||||
} | } |
package org.apache.poi.hssf.usermodel; | package org.apache.poi.hssf.usermodel; | ||||
import org.apache.poi.ddf.*; | |||||
import org.apache.poi.hssf.record.*; | |||||
import org.apache.poi.ss.usermodel.RichTextString; | import org.apache.poi.ss.usermodel.RichTextString; | ||||
/** | /** | ||||
* | * | ||||
* @author Glen Stampoultzis (glens at apache.org) | * @author Glen Stampoultzis (glens at apache.org) | ||||
*/ | */ | ||||
public class HSSFTextbox | |||||
extends HSSFSimpleShape | |||||
{ | |||||
public final static short OBJECT_TYPE_TEXT = 6; | |||||
public class HSSFTextbox extends HSSFSimpleShape { | |||||
public final static short OBJECT_TYPE_TEXT = 6; | |||||
/** | /** | ||||
* How to align text horizontally | * How to align text horizontally | ||||
*/ | */ | ||||
public final static short HORIZONTAL_ALIGNMENT_LEFT = 1; | |||||
public final static short HORIZONTAL_ALIGNMENT_CENTERED = 2; | |||||
public final static short HORIZONTAL_ALIGNMENT_RIGHT = 3; | |||||
public final static short HORIZONTAL_ALIGNMENT_JUSTIFIED = 4; | |||||
public final static short HORIZONTAL_ALIGNMENT_DISTRIBUTED = 7; | |||||
public final static short HORIZONTAL_ALIGNMENT_LEFT = 1; | |||||
public final static short HORIZONTAL_ALIGNMENT_CENTERED = 2; | |||||
public final static short HORIZONTAL_ALIGNMENT_RIGHT = 3; | |||||
public final static short HORIZONTAL_ALIGNMENT_JUSTIFIED = 4; | |||||
public final static short HORIZONTAL_ALIGNMENT_DISTRIBUTED = 7; | |||||
/** | /** | ||||
* How to align text vertically | * How to align text vertically | ||||
*/ | */ | ||||
public final static short VERTICAL_ALIGNMENT_TOP = 1; | |||||
public final static short VERTICAL_ALIGNMENT_CENTER = 2; | |||||
public final static short VERTICAL_ALIGNMENT_BOTTOM = 3; | |||||
public final static short VERTICAL_ALIGNMENT_JUSTIFY = 4; | |||||
public final static short VERTICAL_ALIGNMENT_DISTRIBUTED= 7; | |||||
public final static short VERTICAL_ALIGNMENT_TOP = 1; | |||||
public final static short VERTICAL_ALIGNMENT_CENTER = 2; | |||||
public final static short VERTICAL_ALIGNMENT_BOTTOM = 3; | |||||
public final static short VERTICAL_ALIGNMENT_JUSTIFY = 4; | |||||
public final static short VERTICAL_ALIGNMENT_DISTRIBUTED = 7; | |||||
int marginLeft, marginRight, marginTop, marginBottom; | int marginLeft, marginRight, marginTop, marginBottom; | ||||
short halign, valign; | short halign, valign; | ||||
private TextObjectRecord _textObjectRecord; | |||||
public HSSFTextbox(EscherContainerRecord spContainer, ObjRecord objRecord, TextObjectRecord textObjectRecord) { | |||||
super(spContainer, objRecord); | |||||
this._textObjectRecord = textObjectRecord; | |||||
} | |||||
HSSFRichTextString string = new HSSFRichTextString(""); | HSSFRichTextString string = new HSSFRichTextString(""); | ||||
/** | /** | ||||
* Construct a new textbox with the given parent and anchor. | * Construct a new textbox with the given parent and anchor. | ||||
* | |||||
* @param parent | * @param parent | ||||
* @param anchor One of HSSFClientAnchor or HSSFChildAnchor | |||||
* @param anchor One of HSSFClientAnchor or HSSFChildAnchor | |||||
*/ | */ | ||||
public HSSFTextbox( HSSFShape parent, HSSFAnchor anchor ) | |||||
{ | |||||
super( parent, anchor ); | |||||
setShapeType(OBJECT_TYPE_TEXT); | |||||
public HSSFTextbox(HSSFShape parent, HSSFAnchor anchor) { | |||||
super(parent, anchor); | |||||
_textObjectRecord = createTextObjRecord(); | |||||
setHorizontalAlignment(HORIZONTAL_ALIGNMENT_LEFT); | |||||
setVerticalAlignment(VERTICAL_ALIGNMENT_TOP); | |||||
setString(new HSSFRichTextString("")); | |||||
} | |||||
protected TextObjectRecord createTextObjRecord(){ | |||||
TextObjectRecord obj = new TextObjectRecord(); | |||||
obj.setTextLocked(true); | |||||
obj.setTextOrientation(TextObjectRecord.TEXT_ORIENTATION_NONE); | |||||
return obj; | |||||
} | |||||
@Override | |||||
protected ObjRecord createObjRecord() { | |||||
ObjRecord obj = new ObjRecord(); | |||||
CommonObjectDataSubRecord c = new CommonObjectDataSubRecord(); | |||||
c.setObjectType(OBJECT_TYPE_TEXT); | |||||
c.setLocked( true ); | |||||
c.setPrintable( true ); | |||||
c.setAutofill( true ); | |||||
c.setAutoline( true ); | |||||
EndSubRecord e = new EndSubRecord(); | |||||
obj.addSubRecord( c ); | |||||
obj.addSubRecord( e ); | |||||
return obj; | |||||
} | |||||
@Override | |||||
protected EscherContainerRecord createSpContainer() { | |||||
EscherContainerRecord spContainer = new EscherContainerRecord(); | |||||
EscherSpRecord sp = new EscherSpRecord(); | |||||
EscherOptRecord opt = new EscherOptRecord(); | |||||
EscherClientDataRecord clientData = new EscherClientDataRecord(); | |||||
EscherTextboxRecord escherTextbox = new EscherTextboxRecord(); | |||||
spContainer.setRecordId(EscherContainerRecord.SP_CONTAINER); | |||||
spContainer.setOptions((short) 0x000F); | |||||
sp.setRecordId(EscherSpRecord.RECORD_ID); | |||||
sp.setOptions((short) ((EscherAggregate.ST_TEXTBOX << 4) | 0x2)); | |||||
halign = HORIZONTAL_ALIGNMENT_LEFT; | |||||
valign = VERTICAL_ALIGNMENT_TOP; | |||||
sp.setFlags(EscherSpRecord.FLAG_HAVEANCHOR | EscherSpRecord.FLAG_HASSHAPETYPE); | |||||
opt.setRecordId(EscherOptRecord.RECORD_ID); | |||||
opt.addEscherProperty(new EscherSimpleProperty(EscherProperties.TEXT__TEXTID, 0)); | |||||
opt.addEscherProperty(new EscherSimpleProperty(EscherProperties.TEXT__TEXTLEFT, getMarginLeft())); | |||||
opt.addEscherProperty(new EscherSimpleProperty(EscherProperties.TEXT__TEXTRIGHT, getMarginRight())); | |||||
opt.addEscherProperty(new EscherSimpleProperty(EscherProperties.TEXT__TEXTBOTTOM, getMarginBottom())); | |||||
opt.addEscherProperty(new EscherSimpleProperty(EscherProperties.TEXT__TEXTTOP, getMarginTop())); | |||||
opt.addEscherProperty(new EscherSimpleProperty(EscherProperties.TEXT__WRAPTEXT, 0)); | |||||
opt.addEscherProperty(new EscherSimpleProperty(EscherProperties.TEXT__ANCHORTEXT, 0)); | |||||
opt.addEscherProperty(new EscherSimpleProperty(EscherProperties.GROUPSHAPE__PRINT, 0x00080000)); | |||||
EscherRecord anchor = getAnchor().getEscherAnchor(); | |||||
clientData.setRecordId(EscherClientDataRecord.RECORD_ID); | |||||
clientData.setOptions((short) 0x0000); | |||||
escherTextbox.setRecordId(EscherTextboxRecord.RECORD_ID); | |||||
escherTextbox.setOptions((short) 0x0000); | |||||
spContainer.addChildRecord(sp); | |||||
spContainer.addChildRecord(opt); | |||||
spContainer.addChildRecord(anchor); | |||||
spContainer.addChildRecord(clientData); | |||||
spContainer.addChildRecord(escherTextbox); | |||||
return spContainer; | |||||
} | |||||
@Override | |||||
void afterInsert(HSSFPatriarch patriarch){ | |||||
EscherAggregate agg = patriarch._getBoundAggregate(); | |||||
agg.associateShapeToObjRecord(_escherContainer.getChildById(EscherClientDataRecord.RECORD_ID), getObjRecord()); | |||||
agg.associateShapeToObjRecord(_escherContainer.getChildById(EscherTextboxRecord.RECORD_ID), getTextObjectRecord()); | |||||
} | } | ||||
/** | /** | ||||
* @return the rich text string for this textbox. | |||||
* @return the rich text string for this textbox. | |||||
*/ | */ | ||||
public HSSFRichTextString getString() | |||||
{ | |||||
return string; | |||||
public HSSFRichTextString getString() { | |||||
return _textObjectRecord.getStr(); | |||||
} | } | ||||
/** | /** | ||||
* @param string Sets the rich text string used by this object. | |||||
* @param string Sets the rich text string used by this object. | |||||
*/ | */ | ||||
public void setString( RichTextString string ) | |||||
{ | |||||
HSSFRichTextString rtr = (HSSFRichTextString)string; | |||||
public void setString(RichTextString string) { | |||||
HSSFRichTextString rtr = (HSSFRichTextString) string; | |||||
// If font is not set we must set the default one | // If font is not set we must set the default one | ||||
if (rtr.numFormattingRuns() == 0) rtr.applyFont((short)0); | |||||
this.string = rtr; | |||||
if (rtr.numFormattingRuns() == 0) rtr.applyFont((short) 0); | |||||
_textObjectRecord.setStr(rtr); | |||||
} | } | ||||
/** | /** | ||||
* @return Returns the left margin within the textbox. | |||||
* @return Returns the left margin within the textbox. | |||||
*/ | */ | ||||
public int getMarginLeft() | |||||
{ | |||||
return marginLeft; | |||||
public int getMarginLeft() { | |||||
EscherSimpleProperty property = _optRecord.lookup(EscherProperties.TEXT__TEXTLEFT); | |||||
return property == null ? 0: property.getPropertyValue(); | |||||
} | } | ||||
/** | /** | ||||
* Sets the left margin within the textbox. | * Sets the left margin within the textbox. | ||||
*/ | */ | ||||
public void setMarginLeft( int marginLeft ) | |||||
{ | |||||
this.marginLeft = marginLeft; | |||||
public void setMarginLeft(int marginLeft) { | |||||
setPropertyValue(new EscherSimpleProperty(EscherProperties.TEXT__TEXTLEFT, marginLeft)); | |||||
} | } | ||||
/** | /** | ||||
* @return returns the right margin within the textbox. | |||||
* @return returns the right margin within the textbox. | |||||
*/ | */ | ||||
public int getMarginRight() | |||||
{ | |||||
return marginRight; | |||||
public int getMarginRight() { | |||||
EscherSimpleProperty property = _optRecord.lookup(EscherProperties.TEXT__TEXTRIGHT); | |||||
return property == null ? 0: property.getPropertyValue(); | |||||
} | } | ||||
/** | /** | ||||
* Sets the right margin within the textbox. | * Sets the right margin within the textbox. | ||||
*/ | */ | ||||
public void setMarginRight( int marginRight ) | |||||
{ | |||||
this.marginRight = marginRight; | |||||
public void setMarginRight(int marginRight) { | |||||
setPropertyValue(new EscherSimpleProperty(EscherProperties.TEXT__TEXTRIGHT, marginRight)); | |||||
} | } | ||||
/** | /** | ||||
* @return returns the top margin within the textbox. | |||||
* @return returns the top margin within the textbox. | |||||
*/ | */ | ||||
public int getMarginTop() | |||||
{ | |||||
return marginTop; | |||||
public int getMarginTop() { | |||||
EscherSimpleProperty property = _optRecord.lookup(EscherProperties.TEXT__TEXTTOP); | |||||
return property == null ? 0: property.getPropertyValue(); | |||||
} | } | ||||
/** | /** | ||||
* Sets the top margin within the textbox. | * Sets the top margin within the textbox. | ||||
*/ | */ | ||||
public void setMarginTop( int marginTop ) | |||||
{ | |||||
this.marginTop = marginTop; | |||||
public void setMarginTop(int marginTop) { | |||||
setPropertyValue(new EscherSimpleProperty(EscherProperties.TEXT__TEXTTOP, marginTop)); | |||||
} | } | ||||
/** | /** | ||||
* Gets the bottom margin within the textbox. | * Gets the bottom margin within the textbox. | ||||
*/ | */ | ||||
public int getMarginBottom() | |||||
{ | |||||
return marginBottom; | |||||
public int getMarginBottom() { | |||||
EscherSimpleProperty property = _optRecord.lookup(EscherProperties.TEXT__TEXTBOTTOM); | |||||
return property == null ? 0: property.getPropertyValue(); | |||||
} | } | ||||
/** | /** | ||||
* Sets the bottom margin within the textbox. | * Sets the bottom margin within the textbox. | ||||
*/ | */ | ||||
public void setMarginBottom( int marginBottom ) | |||||
{ | |||||
this.marginBottom = marginBottom; | |||||
public void setMarginBottom(int marginBottom) { | |||||
setPropertyValue(new EscherSimpleProperty(EscherProperties.TEXT__TEXTBOTTOM, marginBottom)); | |||||
} | } | ||||
/** | /** | ||||
* Gets the horizontal alignment. | * Gets the horizontal alignment. | ||||
*/ | */ | ||||
public short getHorizontalAlignment() | |||||
{ | |||||
return halign; | |||||
public short getHorizontalAlignment() { | |||||
return (short) _textObjectRecord.getHorizontalTextAlignment(); | |||||
} | } | ||||
/** | /** | ||||
* Sets the horizontal alignment. | * Sets the horizontal alignment. | ||||
*/ | */ | ||||
public void setHorizontalAlignment( short align ) | |||||
{ | |||||
this.halign = align; | |||||
public void setHorizontalAlignment(short align) { | |||||
_textObjectRecord.setHorizontalTextAlignment(align); | |||||
} | } | ||||
/** | /** | ||||
* Gets the vertical alignment. | * Gets the vertical alignment. | ||||
*/ | */ | ||||
public short getVerticalAlignment() | |||||
{ | |||||
return valign; | |||||
public short getVerticalAlignment() { | |||||
return (short) _textObjectRecord.getVerticalTextAlignment(); | |||||
} | } | ||||
/** | /** | ||||
* Sets the vertical alignment. | * Sets the vertical alignment. | ||||
*/ | */ | ||||
public void setVerticalAlignment( short align ) | |||||
{ | |||||
this.valign = align; | |||||
public void setVerticalAlignment(short align) { | |||||
_textObjectRecord.setVerticalTextAlignment(align); | |||||
} | } | ||||
public TextObjectRecord getTextObjectRecord() { | |||||
return _textObjectRecord; | |||||
} | |||||
@Override | |||||
public void setShapeType(int shapeType) {/**DO NOTHING**/} | |||||
} | } |
public HSSFUnknownShape(EscherRecord spContainer, ObjRecord objRecord) { | public HSSFUnknownShape(EscherRecord spContainer, ObjRecord objRecord) { | ||||
super((EscherContainerRecord) spContainer, objRecord); | super((EscherContainerRecord) spContainer, objRecord); | ||||
} | } | ||||
@Override | |||||
protected EscherContainerRecord createSpContainer() { | |||||
return null; //To change body of implemented methods use File | Settings | File Templates. | |||||
} | |||||
@Override | |||||
protected ObjRecord createObjRecord() { | |||||
return null; //To change body of implemented methods use File | Settings | File Templates. | |||||
} | |||||
} | } |
import org.apache.poi.hssf.usermodel.HSSFPicture; | import org.apache.poi.hssf.usermodel.HSSFPicture; | ||||
import org.apache.poi.hssf.usermodel.HSSFSimpleShape; | import org.apache.poi.hssf.usermodel.HSSFSimpleShape; | ||||
import org.apache.poi.hssf.usermodel.HSSFTextbox; | |||||
/** | /** | ||||
* @author Evgeniy Berlog | * @author Evgeniy Berlog | ||||
NOT_PRIMITIVE((short)0x0, null, (short)0), | NOT_PRIMITIVE((short)0x0, null, (short)0), | ||||
RECTANGLE((short)0x1, HSSFSimpleShape.class, HSSFSimpleShape.OBJECT_TYPE_RECTANGLE), | RECTANGLE((short)0x1, HSSFSimpleShape.class, HSSFSimpleShape.OBJECT_TYPE_RECTANGLE), | ||||
PICTURE((short)0x004B, HSSFPicture.class, HSSFSimpleShape.OBJECT_TYPE_PICTURE), | PICTURE((short)0x004B, HSSFPicture.class, HSSFSimpleShape.OBJECT_TYPE_PICTURE), | ||||
LINE((short)0x14, HSSFSimpleShape.class, HSSFSimpleShape.OBJECT_TYPE_LINE), | |||||
TEXT((short)202, HSSFTextbox.class, HSSFTextbox.OBJECT_TYPE_TEXT), | |||||
ROUND_RECTANGLE((short)0x2, null, null); | ROUND_RECTANGLE((short)0x2, null, null); | ||||
private Short type; | private Short type; | ||||
private Class shape; | private Class shape; | ||||
private Short objectId; | |||||
private Short objectType; | |||||
private HSSFShapeType(Short type, Class shape, Short objectId) { | |||||
private HSSFShapeType(Short type, Class shape, Short objectType) { | |||||
this.type = type; | this.type = type; | ||||
this.shape = shape; | this.shape = shape; | ||||
this.objectId = objectId; | |||||
this.objectType = objectType; | |||||
} | } | ||||
public Short getType() { | public Short getType() { | ||||
public Class getShape() { | public Class getShape() { | ||||
return shape; | return shape; | ||||
} | } | ||||
public Short getObjectType() { | |||||
return objectType; | |||||
} | |||||
} | } |
package org.apache.poi.hssf.model; | |||||
import org.apache.poi.hssf.usermodel.HSSFTextbox; | |||||
/** | |||||
* @author Evgeniy Berlog | |||||
* @date 25.06.12 | |||||
*/ | |||||
public class HSSFTestModelHelper { | |||||
public static TextboxShape createTextboxShape(int shapeId, HSSFTextbox textbox){ | |||||
return new TextboxShape(textbox, shapeId); | |||||
} | |||||
} |
((EscherContainerRecord)spgrContainer.getChild(2)).getChildById(EscherSpRecord.RECORD_ID); | ((EscherContainerRecord)spgrContainer.getChild(2)).getChildById(EscherSpRecord.RECORD_ID); | ||||
assertEquals(1026, sp2.getShapeId()); | assertEquals(1026, sp2.getShapeId()); | ||||
} | } | ||||
/** | |||||
* Test get new id for shapes from existing file | |||||
* File already have for 1 shape on each sheet, because document must contain EscherDgRecord for each sheet | |||||
*/ | |||||
public void testAllocateNewIds(){ | |||||
HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("empty.xls"); | |||||
HSSFSheet sheet = wb.getSheetAt(0); | |||||
HSSFPatriarch patriarch = sheet.getDrawingPatriarch(); | |||||
/** | |||||
* 2048 - main SpContainer id | |||||
* 2049 - existing shape id | |||||
*/ | |||||
assertEquals(HSSFTestHelper.allocateNewShapeId(patriarch), 2050); | |||||
assertEquals(HSSFTestHelper.allocateNewShapeId(patriarch), 2051); | |||||
assertEquals(HSSFTestHelper.allocateNewShapeId(patriarch), 2052); | |||||
sheet = wb.getSheetAt(1); | |||||
patriarch = sheet.getDrawingPatriarch(); | |||||
/** | |||||
* 3072 - main SpContainer id | |||||
* 3073 - existing shape id | |||||
*/ | |||||
assertEquals(HSSFTestHelper.allocateNewShapeId(patriarch), 3074); | |||||
assertEquals(HSSFTestHelper.allocateNewShapeId(patriarch), 3075); | |||||
assertEquals(HSSFTestHelper.allocateNewShapeId(patriarch), 3076); | |||||
sheet = wb.getSheetAt(2); | |||||
patriarch = sheet.getDrawingPatriarch(); | |||||
assertEquals(HSSFTestHelper.allocateNewShapeId(patriarch), 1026); | |||||
assertEquals(HSSFTestHelper.allocateNewShapeId(patriarch), 1027); | |||||
assertEquals(HSSFTestHelper.allocateNewShapeId(patriarch), 1028); | |||||
} | |||||
} | } |
public static EscherAggregate getEscherAggregate(HSSFPatriarch patriarch){ | public static EscherAggregate getEscherAggregate(HSSFPatriarch patriarch){ | ||||
return patriarch._getBoundAggregate(); | return patriarch._getBoundAggregate(); | ||||
} | } | ||||
public static int allocateNewShapeId(HSSFPatriarch patriarch){ | |||||
return patriarch.newShapeId(); | |||||
} | |||||
} | } |
package org.apache.poi.hssf.usermodel; | |||||
import junit.framework.TestCase; | |||||
import org.apache.poi.hssf.HSSFTestDataSamples; | |||||
import org.apache.poi.hssf.model.HSSFTestModelHelper; | |||||
import org.apache.poi.hssf.model.TextboxShape; | |||||
import org.apache.poi.hssf.record.CommonObjectDataSubRecord; | |||||
import org.apache.poi.hssf.record.ObjRecord; | |||||
import org.apache.poi.hssf.record.TextObjectRecord; | |||||
import java.util.Arrays; | |||||
/** | |||||
* @author Evgeniy Berlog | |||||
* @date 25.06.12 | |||||
*/ | |||||
public class TestText extends TestCase { | |||||
public void testResultEqualsToAbstractShape() { | |||||
HSSFWorkbook wb = new HSSFWorkbook(); | |||||
HSSFSheet sh = wb.createSheet(); | |||||
HSSFPatriarch patriarch = sh.createDrawingPatriarch(); | |||||
HSSFTextbox textbox = patriarch.createTextbox(new HSSFClientAnchor()); | |||||
TextboxShape textboxShape = HSSFTestModelHelper.createTextboxShape(0, textbox); | |||||
assertEquals(textbox.getEscherContainer().getChildRecords().size(), 5); | |||||
assertEquals(textboxShape.getSpContainer().getChildRecords().size(), 5); | |||||
//sp record | |||||
byte[] expected = textboxShape.getSpContainer().getChild(0).serialize(); | |||||
byte[] actual = textbox.getEscherContainer().getChild(0).serialize(); | |||||
assertEquals(expected.length, actual.length); | |||||
assertTrue(Arrays.equals(expected, actual)); | |||||
expected = textboxShape.getSpContainer().getChild(2).serialize(); | |||||
actual = textbox.getEscherContainer().getChild(2).serialize(); | |||||
assertEquals(expected.length, actual.length); | |||||
assertTrue(Arrays.equals(expected, actual)); | |||||
expected = textboxShape.getSpContainer().getChild(3).serialize(); | |||||
actual = textbox.getEscherContainer().getChild(3).serialize(); | |||||
assertEquals(expected.length, actual.length); | |||||
assertTrue(Arrays.equals(expected, actual)); | |||||
expected = textboxShape.getSpContainer().getChild(4).serialize(); | |||||
actual = textbox.getEscherContainer().getChild(4).serialize(); | |||||
assertEquals(expected.length, actual.length); | |||||
assertTrue(Arrays.equals(expected, actual)); | |||||
ObjRecord obj = textbox.getObjRecord(); | |||||
((CommonObjectDataSubRecord) obj.getSubRecords().get(0)).setObjectId(-1024); | |||||
ObjRecord objShape = textboxShape.getObjRecord(); | |||||
expected = obj.serialize(); | |||||
actual = objShape.serialize(); | |||||
assertEquals(expected.length, actual.length); | |||||
assertTrue(Arrays.equals(expected, actual)); | |||||
TextObjectRecord tor = textbox.getTextObjectRecord(); | |||||
TextObjectRecord torShape = textboxShape.getTextObjectRecord(); | |||||
expected = tor.serialize(); | |||||
actual = torShape.serialize(); | |||||
assertEquals(expected.length, actual.length); | |||||
assertTrue(Arrays.equals(expected, actual)); | |||||
} | |||||
public void testAddTextToExistingFile() { | |||||
HSSFWorkbook wb = new HSSFWorkbook(); | |||||
HSSFSheet sh = wb.createSheet(); | |||||
HSSFPatriarch patriarch = sh.createDrawingPatriarch(); | |||||
HSSFTextbox textbox = patriarch.createTextbox(new HSSFClientAnchor()); | |||||
textbox.setString(new HSSFRichTextString("just for test")); | |||||
HSSFTextbox textbox2 = patriarch.createTextbox(new HSSFClientAnchor()); | |||||
textbox2.setString(new HSSFRichTextString("just for test2")); | |||||
assertEquals(patriarch.getChildren().size(), 2); | |||||
wb = HSSFTestDataSamples.writeOutAndReadBack(wb); | |||||
sh = wb.getSheetAt(0); | |||||
patriarch = sh.getDrawingPatriarch(); | |||||
assertEquals(patriarch.getChildren().size(), 2); | |||||
HSSFTextbox text3 = patriarch.createTextbox(new HSSFClientAnchor()); | |||||
text3.setString(new HSSFRichTextString("text3")); | |||||
assertEquals(patriarch.getChildren().size(), 3); | |||||
wb = HSSFTestDataSamples.writeOutAndReadBack(wb); | |||||
sh = wb.getSheetAt(0); | |||||
patriarch = sh.getDrawingPatriarch(); | |||||
assertEquals(patriarch.getChildren().size(), 3); | |||||
assertEquals(((HSSFTextbox) patriarch.getChildren().get(0)).getString().getString(), "just for test"); | |||||
assertEquals(((HSSFTextbox) patriarch.getChildren().get(1)).getString().getString(), "just for test2"); | |||||
assertEquals(((HSSFTextbox) patriarch.getChildren().get(2)).getString().getString(), "text3"); | |||||
} | |||||
public void testSetGetProperties() { | |||||
HSSFWorkbook wb = new HSSFWorkbook(); | |||||
HSSFSheet sh = wb.createSheet(); | |||||
HSSFPatriarch patriarch = sh.createDrawingPatriarch(); | |||||
HSSFTextbox textbox = patriarch.createTextbox(new HSSFClientAnchor()); | |||||
textbox.setString(new HSSFRichTextString("test")); | |||||
assertEquals(textbox.getString().getString(), "test"); | |||||
textbox.setHorizontalAlignment((short) 5); | |||||
assertEquals(textbox.getHorizontalAlignment(), 5); | |||||
textbox.setVerticalAlignment((short) 6); | |||||
assertEquals(textbox.getVerticalAlignment(), (short) 6); | |||||
textbox.setMarginBottom(7); | |||||
assertEquals(textbox.getMarginBottom(), 7); | |||||
textbox.setMarginLeft(8); | |||||
assertEquals(textbox.getMarginLeft(), 8); | |||||
textbox.setMarginRight(9); | |||||
assertEquals(textbox.getMarginRight(), 9); | |||||
textbox.setMarginTop(10); | |||||
assertEquals(textbox.getMarginTop(), 10); | |||||
wb = HSSFTestDataSamples.writeOutAndReadBack(wb); | |||||
sh = wb.getSheetAt(0); | |||||
patriarch = sh.getDrawingPatriarch(); | |||||
textbox = (HSSFTextbox) patriarch.getChildren().get(0); | |||||
assertEquals(textbox.getString().getString(), "test"); | |||||
assertEquals(textbox.getHorizontalAlignment(), 5); | |||||
assertEquals(textbox.getVerticalAlignment(), (short) 6); | |||||
assertEquals(textbox.getMarginBottom(), 7); | |||||
assertEquals(textbox.getMarginLeft(), 8); | |||||
assertEquals(textbox.getMarginRight(), 9); | |||||
assertEquals(textbox.getMarginTop(), 10); | |||||
textbox.setString(new HSSFRichTextString("test1")); | |||||
textbox.setHorizontalAlignment(HSSFTextbox.HORIZONTAL_ALIGNMENT_CENTERED); | |||||
textbox.setVerticalAlignment(HSSFTextbox.VERTICAL_ALIGNMENT_TOP); | |||||
textbox.setMarginBottom(71); | |||||
textbox.setMarginLeft(81); | |||||
textbox.setMarginRight(91); | |||||
textbox.setMarginTop(101); | |||||
assertEquals(textbox.getString().getString(), "test1"); | |||||
assertEquals(textbox.getHorizontalAlignment(), HSSFTextbox.HORIZONTAL_ALIGNMENT_CENTERED); | |||||
assertEquals(textbox.getVerticalAlignment(), HSSFTextbox.VERTICAL_ALIGNMENT_TOP); | |||||
assertEquals(textbox.getMarginBottom(), 71); | |||||
assertEquals(textbox.getMarginLeft(), 81); | |||||
assertEquals(textbox.getMarginRight(), 91); | |||||
assertEquals(textbox.getMarginTop(), 101); | |||||
wb = HSSFTestDataSamples.writeOutAndReadBack(wb); | |||||
sh = wb.getSheetAt(0); | |||||
patriarch = sh.getDrawingPatriarch(); | |||||
textbox = (HSSFTextbox) patriarch.getChildren().get(0); | |||||
assertEquals(textbox.getString().getString(), "test1"); | |||||
assertEquals(textbox.getHorizontalAlignment(), HSSFTextbox.HORIZONTAL_ALIGNMENT_CENTERED); | |||||
assertEquals(textbox.getVerticalAlignment(), HSSFTextbox.VERTICAL_ALIGNMENT_TOP); | |||||
assertEquals(textbox.getMarginBottom(), 71); | |||||
assertEquals(textbox.getMarginLeft(), 81); | |||||
assertEquals(textbox.getMarginRight(), 91); | |||||
assertEquals(textbox.getMarginTop(), 101); | |||||
} | |||||
public void testExistingFileWithText(){ | |||||
HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("drawings.xls"); | |||||
HSSFSheet sheet = wb.getSheet("text"); | |||||
HSSFPatriarch drawing = sheet.getDrawingPatriarch(); | |||||
assertEquals(1, drawing.getChildren().size()); | |||||
HSSFTextbox textbox = (HSSFTextbox) drawing.getChildren().get(0); | |||||
assertEquals(textbox.getHorizontalAlignment(), HSSFTextbox.HORIZONTAL_ALIGNMENT_LEFT); | |||||
assertEquals(textbox.getVerticalAlignment(), HSSFTextbox.VERTICAL_ALIGNMENT_TOP); | |||||
assertEquals(textbox.getMarginTop(), 0); | |||||
assertEquals(textbox.getMarginBottom(), 3600000); | |||||
assertEquals(textbox.getMarginLeft(), 3600000); | |||||
assertEquals(textbox.getMarginRight(), 0); | |||||
assertEquals(textbox.getString().getString(), "teeeeesssstttt"); | |||||
} | |||||
} |