Работа с формами
В этом разделе обсуждается, как программно работать с фигурами, используя Aspose.Words.
Фигуры в Aspose.Words представляют объект на уровне рисования, такой как AutoShape, текстовое поле, объект произвольной формы, OLE, элемент управления ActiveX или изображение. Документ Word может содержать одну или несколько различных фигур. Формы документа представлены классом Shape.
Вставка фигур с помощью конструктора документов
Вы можете вставить в документ встроенную фигуру с указанным типом и размером, а также свободно перемещающуюся фигуру с указанным положением, размером и типом переноса текста, используя метод insert_shape. Метод insert_shape позволяет вставить фигуру DML в модель документа. Документ должен быть сохранен в формате, поддерживающем формы DML, в противном случае такие узлы будут преобразованы в форму VML при сохранении документа.
В следующем примере кода показано, как вставить эти типы фигур в документ:
# 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) |
Установите фиксированное соотношение сторон
Используя Aspose.Words, вы можете указать, будет ли зафиксировано соотношение сторон фигуры с помощью свойства aspect_ratio_locked.
В следующем примере кода показано, как работать со свойством 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") |
Установите Расположение Фигуры В Ячейке
Вы также можете указать, будет ли фигура отображаться внутри таблицы или за ее пределами, используя свойство is_layout_in_cell.
В следующем примере кода показано, как работать со свойством 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") |
Создайте прямоугольник с отрезанным углом
Вы можете создать прямоугольник с отрезанным углом, используя Aspose.Words. Существуют следующие типы фигур SINGLE_CORNER_SNIPPED, TOP_CORNERS_SNIPPED, DIAGONAL_CORNERS_SNIPPED, TOP_CORNERS_ONE_ROUNDED_ONE_SNIPPED, SINGLE_CORNER_ROUNDED, TOP_CORNERS_ROUNDED, и DIAGONAL_CORNERS_ROUNDED.
Фигура DML создается с использованием метода insert_shape с этими типами фигур. Эти типы не могут быть использованы для создания фигур VML. Попытка создать фигуру с помощью открытого конструктора класса Shape приводит к возникновению исключения “NotSupportedException”.
В следующем примере кода показано, как вставить фигуры такого типа в документ:
# 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) |
Получите реальные точки границ формы
Используя Aspose.Words API, вы можете получить местоположение и размер фигуры, содержащей блок, в точках относительно привязки самой верхней фигуры. Для этого используйте свойство bounds_in_points.
В следующем примере кода показано, как работать со свойством 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) |
Укажите вертикальную привязку
Вы можете задать выравнивание текста по вертикали внутри фигуры, используя свойство vertical_anchor.
В следующем примере кода показано, как работать со свойством 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") |
Определить форму SmartArt
Aspose.Words также позволяет определить, есть ли у фигуры объект SmartArt
. Для этого используйте свойство has_smart_art property.
В следующем примере кода показано, как работать со свойством 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) |
Вставить горизонтальную линейку в документ
Вы можете вставить горизонтальную линейчатую фигуру в документ, используя метод insert_horizontal_rule.
В следующем примере кода показано, как это сделать:
# 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 предоставляет свойство horizontal_rule_format для доступа к свойствам формы горизонтального правила. Класс HorizontalRuleFormat предоставляет базовые свойства, такие как height, color, no_shade и т.д. для форматирования горизонтального правила.
В следующем примере кода показано, как установить 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") |
Вставить объект OLE в качестве значка
Aspose.Words API предоставляет функцию Shape.insert_ole_object_as_icon для вставки встроенного или связанного объекта OLE в виде значка в документ. Эта функция позволяет указать файл значка и подпись к нему. Тип объекта OLE
определяется по расширению файла.
В следующем примере кода показано, как установить объект insert OLE в качестве значка в документе:
# 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") |
Импортируйте фигуры с математикой XML в виде фигур в DOM
Вы можете использовать свойство convert_shape_to_office_math для преобразования фигур с уравнением EquationXML в объекты Office Math. Значение этого свойства по умолчанию соответствует MS поведению Word, т.е. фигуры с уравнением XML не преобразуются в объекты Office math.
В следующем примере кода показано, как преобразовать фигуры в объекты 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) |