Praca z kształtami

W tym temacie omówiono sposób programowej pracy z kształtami przy użyciu formatu Aspose.Words.

Kształty w formacie Aspose.Words reprezentują obiekt w warstwie rysunku, taki jak Autokształt, pole tekstowe, dowolny kształt, obiekt OLE, formant ActiveX lub obraz. Dokument programu Word może zawierać jeden lub więcej różnych kształtów. Kształty dokumentu są reprezentowane przez klasę Shape.

Wstawianie kształtów za pomocą narzędzia Document Builder

Za pomocą metody insert_shape możesz wstawić do dokumentu kształt osadzony o określonym typie i rozmiarze oraz kształt swobodny o określonej pozycji, rozmiarze i typie zawijania tekstu. Metoda insert_shape umożliwia wstawienie kształtu DML do modelu dokumentu. Dokument musi zostać zapisany w formacie obsługującym kształty DML, w przeciwnym razie podczas zapisywania dokumentu takie węzły zostaną skonwertowane do kształtu VML.

Poniższy przykład kodu pokazuje, jak wstawić tego typu kształty do dokumentu:

# 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)

Ustaw współczynnik proporcji zablokowany

Używając Aspose.Words, możesz określić, czy proporcje kształtu mają być blokowane poprzez właściwość aspect_ratio_locked.

Poniższy przykład kodu pokazuje, jak pracować z właściwością AspectRatioLocked:

# 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")

Ustaw układ kształtu w komórce

Możesz także określić, czy kształt ma być wyświetlany wewnątrz tabeli, czy poza nią, za pomocą właściwości is_layout_in_cell.

Poniższy przykład kodu pokazuje, jak pracować z właściwością IsLayoutInCell:

# 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")

Utwórz prostokąt z narożnika Snip

Za pomocą Aspose.Words możesz utworzyć prostokąt z wyciętym narożnikiem. Typy kształtów to SINGLE_CORNER_SNIPPED, TOP_CORNERS_SNIPPED, DIAGONAL_CORNERS_SNIPPED, TOP_CORNERS_ONE_ROUNDED_ONE_SNIPPED, SINGLE_CORNER_ROUNDED, TOP_CORNERS_ROUNDED i DIAGONAL_CORNERS_ROUNDED.

Dla tych typów kształtów kształt DML jest tworzony metodą insert_shape. Tych typów nie można używać do tworzenia kształtów VML. Próba utworzenia kształtu przy użyciu konstruktora publicznego klasy Shape wywołuje wyjątek “NotSupportedException”.

Poniższy przykład kodu pokazuje, jak wstawić tego typu kształty do dokumentu:

# 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)

Zdobądź rzeczywiste punkty granic kształtu

Używając Aspose.Words API, możesz uzyskać lokalizację i rozmiar kształtu zawierającego blok w punktach, w stosunku do kotwicy najwyższego kształtu. Aby to zrobić, użyj właściwości bounds_in_points.

Poniższy przykład kodu pokazuje, jak pracować z właściwością BoundsInPoints:

# 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)

Określ zaczepienie pionowe

Wyrównanie tekstu w pionie w kształcie można określić za pomocą właściwości vertical_anchor.

Poniższy przykład kodu pokazuje, jak pracować z właściwością VerticalAnchor:

# 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")

Wykryj kształt grafiki SmartArt

Aspose.Words pozwala również wykryć, czy kształt ma obiekt SmartArt. Aby to zrobić, użyj właściwości has_smart_art właściwość.

Poniższy przykład kodu pokazuje, jak pracować z właściwością HasSmartArt:

# 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)

Wstaw linię poziomą do dokumentu

Możesz wstawić kształt linii poziomej do dokumentu za pomocą metody insert_horizontal_rule.

Poniższy przykład kodu pokazuje, jak to zrobić:

# 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 udostępnia właściwość horizontal_rule_format umożliwiającą dostęp do właściwości kształtu linii poziomej. Klasa HorizontalRuleFormat udostępnia podstawowe właściwości, takie jak height, color, no_shade itp., służące do formatowania linii poziomej.

Poniższy przykład kodu demonstruje, jak ustawić HorizontalRuleFormat:

# 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")

Wstaw obiekt OLE jako ikonę

Aspose.Words API udostępnia funkcję Kształt.insert_ole_object_as_icon umożliwiającą wstawienie osadzonego lub połączonego obiektu OLE jako ikony do dokumentu. Ta funkcja umożliwia określenie pliku ikony i podpisu. Typ obiektu OLE należy wykryć na podstawie rozszerzenia pliku.

Poniższy przykład kodu demonstruje, jak ustawić wstawianie obiektu OLE jako ikony w dokumencie:

# 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")

Importuj kształty z matematycznym XMLem jako kształty do DOM

Możesz użyć właściwości convert_shape_to_office_math, aby przekonwertować kształty za pomocą EquationXML na obiekty Office Math. Domyślna wartość tej właściwości odpowiada zachowaniu MS Word, tj. kształty z równaniami XML nie są konwertowane na obiekty matematyczne pakietu Office.

Poniższy przykład kodu pokazuje, jak konwertować kształty na obiekty pakietu Office Math:

# 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)