a:bodyPr (Body Properties)
Defines text body properties like wrapping, margins, rotation, and vertical anchoring.
Child elements
Description
a:bodyPr specifies formatting properties for text bodies in DrawingML shapes. It is defined in ECMA-376 Part 1 §20.1.2.27.
It controls:
- Text wrapping mode (square, none)
- Vertical anchoring (top, center, bottom)
- Internal margins (left, right, top, bottom insets)
- Text rotation and skew
- Auto-fit options (resize text to fit, etc.)
- 3D scene for text (for special effects)
Attributes
| Attribute | Type | Possible Values | Description |
|---|---|---|---|
rot |
ST_Angle |
Integer in degrees × 60000 (e.g., 2700000 = 90° × 60000). May be negative. |
Rotation angle in 60,000ths of a degree. |
flipH |
xsd:boolean |
0 | 1 | Flip text horizontally. |
flipV |
xsd:boolean |
0 | 1 | Flip text vertically. |
anchor |
ST_TextAnchoringType |
t (top), ctr (center), b (bottom), just (justified), dist (distributed) |
Vertical text anchor point. |
anchorCtr |
xsd:boolean |
0 | 1 | Center text box vertically within bounds. |
wrap |
ST_TextWrappingType |
none, square |
Text wrapping behavior. |
rtlCol |
xsd:boolean |
0 | 1 | Use right-to-left column layout. |
lIns |
ST_Coordinate32 |
Non-negative integer in EMUs | Left inset/margin. |
tIns |
ST_Coordinate32 |
Non-negative integer in EMUs | Top inset/margin. |
rIns |
ST_Coordinate32 |
Non-negative integer in EMUs | Right inset/margin. |
bIns |
ST_Coordinate32 |
Non-negative integer in EMUs | Bottom inset/margin. |
numCol |
ST_TextColumnCount |
1 to 16 | Number of text columns. |
spcCol |
ST_Coordinate32 |
Non-negative integer in EMUs | Space between columns. |
rtlCol |
xsd:boolean |
0 | 1 | Column flow direction (RTL). |
Examples
Text Body with Square Wrapping and Center Anchoring
<a:bodyPr anchor="ctr" wrap="square" lIns="45720" tIns="22860" rIns="45720" bIns="22860"/>
using DocumentFormat.OpenXml.Drawing;
var bodyPr = new BodyProperties
{
Anchor = TextAnchoringTypeValues.Center,
Wrap = TextWrappingTypeValues.Square,
LeftInset = 45720,
TopInset = 22860,
RightInset = 45720,
BottomInset = 22860
};
Rotated Text Body with Top Anchoring
<a:bodyPr rot="2700000" anchor="t" anchorCtr="true" wrap="square" lIns="91440" tIns="45720" rIns="91440" bIns="45720"/>
var bodyPr = new BodyProperties
{
Rotation = 2700000, // 90 degrees
Anchor = TextAnchoringTypeValues.Top,
AnchorCenter = true,
Wrap = TextWrappingTypeValues.Square,
LeftInset = 91440,
TopInset = 45720,
RightInset = 91440,
BottomInset = 45720
};
Text Body with Multiple Columns and Right-to-Left Layout
<a:bodyPr anchor="t" wrap="none" numCol="3" spcCol="228600" rtlCol="true" lIns="45720" rIns="45720"/>
var bodyPr = new BodyProperties
{
Anchor = TextAnchoringTypeValues.Top,
Wrap = TextWrappingTypeValues.None,
ColumnCount = 3,
ColumnSpacing = 228600,
RightToLeftColumns = true,
LeftInset = 45720,
RightInset = 45720
};
Notes
- Inset values (lIns, tIns, rIns, bIns) are in EMUs; 914400 EMUs = 1 inch.
- Rotation angle is in 60,000ths of a degree; divide display degrees by 1 and multiply by 60000 to convert.
- Text wrapping “square” allows text to wrap within the shape bounds; “none” prevents wrapping.
- The
anchorattribute determines vertical positioning:t(top),ctr(center),b(bottom). -
Multiple columns are useful for newspaper-style text layouts;
numColranges 1–16. - The permitted child elements and attribute values depend on the surrounding OOXML part and the schema version in use.
- In practice, DrawingML content is usually generated from higher-level shape or picture APIs rather than built manually element-by-element.
- When this element appears inside a document package, it is typically linked by relationships or contained in a drawing part that is referenced from a shape or graphic object.