Arbeiten mit Formen

In diesem Thema wird erläutert, wie Sie mithilfe von Aspose.Words programmgesteuert mit Formen arbeiten.

Die Formen in Aspose.Words stellen ein Objekt in der Zeichenebene dar, beispielsweise eine AutoForm, ein Textfeld, eine Freiform, ein OLE-Objekt, ein ActiveX-Steuerelement oder ein Bild. Ein Word-Dokument kann eine oder mehrere verschiedene Formen enthalten. Formen des Dokuments werden durch die Shape-Klasse dargestellt.

Einfügen von Formen mit Document Builder

Mit der insert_shape-Methode können Sie Inline-Formen mit angegebenem Typ und Größe sowie frei schwebende Formen mit angegebener Position, Größe und Textumbruchart in ein Dokument einfügen. Die insert_shape-Methode ermöglicht das Einfügen einer DML-Form in das Dokumentmodell. Das Dokument muss in dem Format gespeichert werden, das DML-Formen unterstützt, andernfalls werden solche Knoten beim Speichern des Dokuments in VML-Formen konvertiert.

Das folgende Codebeispiel zeigt, wie diese Arten von Formen in das Dokument eingefügt werden:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
shape = builder.insert_shape(aw.drawing.ShapeType.TEXT_BOX, aw.drawing.RelativeHorizontalPosition.PAGE, 100,
aw.drawing.RelativeVerticalPosition.PAGE, 100, 50, 50, aw.drawing.WrapType.NONE)
shape.rotation = 30.0
builder.writeln()
shape = builder.insert_shape(aw.drawing.ShapeType.TEXT_BOX, 50, 50)
shape.rotation = 30.0
saveOptions = aw.saving.OoxmlSaveOptions(aw.SaveFormat.DOCX)
saveOptions.compliance = aw.saving.OoxmlCompliance.ISO29500_2008_TRANSITIONAL
doc.save(docs_base.artifacts_dir + "WorkingWithShapes.insert_shape.docx", saveOptions)

Stellen Sie das Seitenverhältnis auf gesperrt ein

Mit Aspose.Words können Sie über die aspect_ratio_locked-Eigenschaft angeben, ob das Seitenverhältnis der Form gesperrt ist.

Das folgende Codebeispiel zeigt, wie mit der AspectRatioLocked-Eigenschaft gearbeitet wird:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
shape = builder.insert_image(docs_base.images_dir + "Transparent background logo.png")
shape.aspect_ratio_locked = False
doc.save(docs_base.artifacts_dir + "WorkingWithShapes.aspect_ratio_locked.docx")

Legen Sie das Formlayout in der Zelle fest

Mithilfe der is_layout_in_cell-Eigenschaft können Sie außerdem festlegen, ob die Form innerhalb oder außerhalb einer Tabelle angezeigt wird.

Das folgende Codebeispiel zeigt, wie mit der IsLayoutInCell-Eigenschaft gearbeitet wird:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
builder.start_table()
builder.row_format.height = 100
builder.row_format.height_rule = aw.HeightRule.EXACTLY
for i in range(0, 31) :
if (i != 0 and i % 7 == 0) :
builder.end_row()
builder.insert_cell()
builder.write("Cell contents")
builder.end_table()
watermark = aw.drawing.Shape(doc, aw.drawing.ShapeType.TEXT_PLAIN_TEXT)
watermark.relative_horizontal_position = aw.drawing.RelativeHorizontalPosition.PAGE
watermark.relative_vertical_position = aw.drawing.RelativeVerticalPosition.PAGE
watermark.is_layout_in_cell = True # Display the shape outside of the table cell if it will be placed into a cell.
watermark.width = 300
watermark.height = 70
watermark.horizontal_alignment = aw.drawing.HorizontalAlignment.CENTER
watermark.vertical_alignment = aw.drawing.VerticalAlignment.CENTER
watermark.rotation = -40
watermark.fill_color = drawing.Color.gray
watermark.stroke_color = drawing.Color.gray
watermark.text_path.text = "watermarkText"
watermark.text_path.font_family = "Arial"
watermark.name = "WaterMark_" + str(uuid.uuid4())
watermark.wrap_type = aw.drawing.WrapType.NONE
run = doc.get_child_nodes(aw.NodeType.RUN, True)[doc.get_child_nodes(aw.NodeType.RUN, True).count - 1].as_run()
builder.move_to(run)
builder.insert_node(watermark)
doc.compatibility_options.optimize_for(aw.settings.MsWordVersion.WORD2010)
doc.save(docs_base.artifacts_dir + "WorkingWithShapes.layout_in_cell.docx")

Erstellen Sie ein Snip Corner-Rechteck

Mit Aspose.Words können Sie ein ausgeschnittenes Eckrechteck erstellen. Die Formtypen sind SINGLE_CORNER_SNIPPED, TOP_CORNERS_SNIPPED, DIAGONAL_CORNERS_SNIPPED, TOP_CORNERS_ONE_ROUNDED_ONE_SNIPPED, SINGLE_CORNER_ROUNDED, TOP_CORNERS_ROUNDED und DIAGONAL_CORNERS_ROUNDED.

Die DML-Form wird mithilfe der insert_shape-Methode mit diesen Formtypen erstellt. Diese Typen können nicht zum Erstellen von VML-Formen verwendet werden. Der Versuch, eine Form mithilfe des öffentlichen Konstruktors der Shape-Klasse zu erstellen, löst die Ausnahme “NotSupportedException” aus.

Das folgende Codebeispiel zeigt, wie diese Art von Formen in das Dokument eingefügt wird:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
builder.insert_shape(aw.drawing.ShapeType.TOP_CORNERS_SNIPPED, 50, 50)
saveOptions = aw.saving.OoxmlSaveOptions(aw.SaveFormat.DOCX)
saveOptions.compliance = aw.saving.OoxmlCompliance.ISO29500_2008_TRANSITIONAL
doc.save(docs_base.artifacts_dir + "WorkingWithShapes.add_corners_snipped.docx", saveOptions)

Erhalten Sie tatsächliche Formbegrenzungspunkte

Mit Aspose.Words API können Sie die Position und Größe des die Form enthaltenden Blocks in Punkten relativ zum Anker der obersten Form ermitteln. Verwenden Sie dazu die bounds_in_points-Eigenschaft.

Das folgende Codebeispiel zeigt, wie mit der BoundsInPoints-Eigenschaft gearbeitet wird:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
shape = builder.insert_image(docs_base.images_dir + "Transparent background logo.png")
shape.aspect_ratio_locked = False
print("\nGets the actual bounds of the shape in points: ")
print(shape.get_shape_renderer().bounds_in_points)

Geben Sie den vertikalen Anker an

Sie können die vertikale Textausrichtung innerhalb einer Form mithilfe der vertical_anchor-Eigenschaft angeben.

Das folgende Codebeispiel zeigt, wie mit der VerticalAnchor-Eigenschaft gearbeitet wird:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
textBox = builder.insert_shape(aw.drawing.ShapeType.TEXT_BOX, 200, 200)
textBox.text_box.vertical_anchor = aw.drawing.TextBoxAnchor.BOTTOM
builder.move_to(textBox.first_paragraph)
builder.write("Textbox contents")
doc.save(docs_base.artifacts_dir + "WorkingWithShapes.vertical_anchor.docx")

SmartArt-Form erkennen

Aspose.Words ermöglicht auch die Erkennung, ob die Form ein SmartArt-Objekt hat. Verwenden Sie dazu die has_smart_art-Eigenschaft-Eigenschaft.

Das folgende Codebeispiel zeigt, wie mit der HasSmartArt-Eigenschaft gearbeitet wird:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document(docs_base.my_dir + "SmartArt.docx")
count = 0
for shape in doc.get_child_nodes(aw.NodeType.SHAPE, True) :
shape = shape.as_shape()
if(shape.has_smart_art) :
count += 1
print("The document has 0 shapes with SmartArt.", count)

Fügen Sie eine horizontale Linie in das Dokument ein

Mit der insert_horizontal_rule-Methode können Sie eine horizontale Linienform in ein Dokument einfügen.

Das folgende Codebeispiel zeigt, wie das geht:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
builder.writeln("Insert a horizontal rule shape into the document.")
builder.insert_horizontal_rule()
doc.save(docs_base.artifacts_dir + "AddContentUsingDocumentBuilder.insert_horizontal_rule.docx")

Aspose.Words API stellt die horizontal_rule_format-Eigenschaft bereit, um auf die Eigenschaften der horizontalen Regelform zuzugreifen. Die HorizontalRuleFormat-Klasse stellt grundlegende Eigenschaften wie height, color, no_shade usw. für die Formatierung einer horizontalen Linie bereit.

Das folgende Codebeispiel zeigt, wie HorizontalRuleFormat festgelegt wird:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
builder = aw.DocumentBuilder()
shape = builder.insert_horizontal_rule()
horizontalRuleFormat = shape.horizontal_rule_format
horizontalRuleFormat.alignment = aw.drawing.HorizontalRuleAlignment.CENTER
horizontalRuleFormat.width_percent = 70
horizontalRuleFormat.height = 3
horizontalRuleFormat.color = drawing.Color.blue
horizontalRuleFormat.no_shade = True
builder.document.save(docs_base.artifacts_dir + "AddContentUsingDocumentBuilder.horizontal_rule_format.docx")

OLE-Objekt als Symbol einfügen

Aspose.Words API bietet eine Shape.insert_ole_object_as_icon-Funktion zum Einfügen eines eingebetteten oder verknüpften OLE-Objekts als Symbol in das Dokument. Mit dieser Funktion können Sie die Symboldatei und die Beschriftung angeben. Der OLE-Objekttyp wird anhand der Dateierweiterung erkannt.

Das folgende Codebeispiel zeigt, wie man ein OLE-Objekt als Symbol in das Dokument einfügt:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
builder.insert_ole_object_as_icon(docs_base.my_dir + "Presentation.pptx", False, docs_base.images_dir + "Logo icon.ico", "My embedded file")
doc.save(docs_base.artifacts_dir + "WorkingWithOleObjectsAndActiveX.insert_ole_object_as_icon.docx")

Importieren Sie Formen mit Mathe-XML als Formen in DOM

Sie können die convert_shape_to_office_math-Eigenschaft verwenden, um die Formen mit EquationXML in Office Math-Objekte zu konvertieren. Der Standardwert dieser Eigenschaft entspricht dem Verhalten von MS Word, dh Formen mit Gleichungs-XML werden nicht in Office-Matheobjekte konvertiert.

Das folgende Codebeispiel zeigt, wie Formen in Office Math-Objekte konvertiert werden:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
loadOptions = aw.loading.LoadOptions()
loadOptions.convert_shape_to_office_math = True
doc = aw.Document(docs_base.my_dir + "Office math.docx", loadOptions)
doc.save(docs_base.artifacts_dir + "WorkingWithLoadOptions.convert_shape_to_office_math.docx", aw.SaveFormat.DOCX)