Working with Shapes

This topic discusses how to work programmatically with shapes using Aspose.Words.

The shapes in Aspose.Words represent an object in the drawing layer, such as an AutoShape, textbox, freeform, OLE object, ActiveX control, or picture. A Word document can contain one or more different shapes. Shapes of the document are represented by the Shape class.

Inserting Shapes Using Document Builder

You can insert inline shape with specified type and size and free-floating shape with the specified position, size and text wrap type into a document using insertShape method. The insertShape method allows inserting DML shape into the document model. The document must be saved in the format, which supports DML shapes, otherwise, such nodes will be converted to VML shape, while document saving.

The following code example shows how to insert these types of shapes into the document:

Set Aspect Ratio Locked

Using Aspose.Words, you can specify whether the shape’s aspect ratio is locked through the aspectRatioLocked property.

The following code example shows how to work with the AspectRatioLocked property:

Set Shape Layout In Cell

You can also specify whether the shape is displayed inside a table or outside of it using the isLayoutInCell property property.

The following code example shows how to work with the IsLayoutInCell property:

Create Snip Corner Rectangle

You can create a snip corner rectangle using Aspose.Words. The shape types are SingleCornerSnipped, TopCornersSnipped, DiagonalCornersSnippedTopCornersOneRoundedOneSnippedSingleCornerRoundedTopCornersRounded, and DiagonalCornersRounded.

The DML shape is created using insertShape method with these shape types. These types cannot be used to create VML shapes. Attempt to create shape by using the public constructor of the Shape class raises the “NotSupportedException” exception.

The following code example shows how to insert these type of shapes into the document:

Get Actual Shape Bounds Points

Using Aspose.Words API, you can get the location and size of the shape containing block in points, relative to the anchor of the topmost shape. To do this, use the boundsInPoints2 property.

The following code example shows how to work with the BoundsInPoints property:

Specify Vertical Anchor

You can specify the text vertical alignment within a shape using the verticalAnchor property.

The following code example shows how to work with the VerticalAnchor property:

Detect SmartArt Shape

Aspose.Words also allows to detect if the Shape has a SmartArt object. To do this, use the hasSmartArt property.

The following code example shows how to work with the HasSmartArt property:

Insert Horizontal Rule into Document

You can insert horizontal rule shape into a document using the insertHorizontalRule method.

The following code example shows how to do this:

Aspose.Words API provides the horizontalRuleFormat property to access the properties of the horizontal rule shape. The HorizontalRuleFormat class exposes basic properties like height, color, noShade etc. for the formatting of a horizontal rule.

The following code example demonstrates how to set HorizontalRuleFormat:

Insert OLE Object as an Icon

Aspose.Words API provides Shape.insert_ole_object_as_icon function to insert an embedded or linked OLE object as an icon into the document. This function allows specifying the icon file and the caption. The OLE object type shall be detected using the file extension.

The following code example demonstrates how to set insert OLE object as an Icon into the document:

Import Shapes with Math XML as Shapes into DOM

You can use convertShapeToOfficeMath property to convert the shapes with EquationXML to Office Math objects. The default value of this property corresponds to MS Word behavior i.e. shapes with equation XML are not converted to Office math objects.

The following code example shows how to convert shapes to Office Math objects:


FAQ

  1. Q: How do I insert an inline shape versus a floating shape?
    A: Use DocumentBuilder.insertShape and set the WrapType property. For an inline shape, set WrapType to WrapType.Inline; for a floating shape, set it to WrapType.Square (or another wrap type) and optionally specify the position with Left and Top.

  2. Q: How can I lock the aspect ratio of a shape so it doesn’t get distorted when resized?
    A: Set the aspectRatioLocked property of the shape’s ShapeBase to true. This ensures the width‑to‑height ratio remains constant when the shape is resized programmatically or by the user.

  3. Q: How can I determine whether a shape contains a SmartArt object?
    A: Check the hasSmartArt property of the Shape instance. It returns true if the shape is a SmartArt diagram, allowing you to handle it differently (e.g., skip processing or apply specific formatting).

  4. Q: How do I insert an OLE object as an icon with a custom caption?
    A: Call Shape.insert_ole_object_as_icon on a Shape created with InsertShape. Provide the file path of the OLE source, the icon image path, and the desired caption string. The icon size must be 32 × 32 pixels for correct display.

  5. Q: How can I set the vertical alignment of text inside a textbox shape?
    A: Use the verticalAnchor property of the TextBox (which derives from Shape). Assign one of the VerticalAnchor enum values such as Top, Center, or Bottom to control where the text is positioned vertically within the textbox.