Управление текстовыми полями в презентациях с помощью Python

Обзор

Текст на слайдах обычно находится в текстовых полях или фигурах. Поэтому, чтобы добавить текст на слайд, нужно добавить текстовое поле, а затем разместить в нём некоторый текст. Aspose.Slides for Python предоставляет класс AutoShape , который позволяет добавить фигуру, содержащую текст.

Создание текстовых полей на слайдах

  1. Создайте экземпляр класса Presentation .
  2. Получите ссылку на первый слайд.
  3. Добавьте AutoShape с ShapeType.RECTANGLE в нужное положение на слайде.
  4. Установите текст в свойстве TextFrame фигуры.
  5. Сохраните презентацию как файл PPTX.

Следующий пример на Python реализует эти шаги:

import aspose.slides as slides

# Создать экземпляр класса Presentation.
with slides.Presentation() as presentation:

    # Получить первый слайд в презентации.
    slide = presentation.slides[0]

    # Добавить AutoShape типа RECTANGLE.
    shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 150, 75, 150, 50)

    shape.text_frame.text = "Aspose TextBox"

    # Сохранить презентацию на диск.
    presentation.save("TextBox.pptx", slides.export.SaveFormat.PPTX)

Проверка, является ли фигура текстовым полем

Aspose.Slides предоставляет свойство is_text_box в классе AutoShape , которое позволяет определить, является ли фигура текстовым полем.

Текстовое поле и фигура

Этот пример на Python показывает, как проверить, создана ли фигура как текстовое поле:

import aspose.slides as slides

with slides.Presentation("Sample.pptx") as presentation:
    for slide in presentation.slides:
        for shape in slide.shapes:
            if isinstance(shape, slides.AutoShape):
                print("shape is a text box" if shape.is_text_box else "shape is not a text box")

Обратите внимание, что если вы добавляете AutoShape с помощью класса ShapeCollection , свойство is_text_box фигуры возвращает False. Однако после добавления текста — либо методом add_text_frame, либо установкой свойства textis_text_box возвращает True.

import aspose.slides as slides

with slides.Presentation() as presentation:
    slide = presentation.slides[0]

    shape1 = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 10, 10, 100, 40)
    # shape1.is_text_box равно false
    shape1.add_text_frame("shape 1")
    # shape1.is_text_box равно true

    shape2 = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 10, 110, 100, 40)
    # shape2.is_text_box равно false
    shape2.text_frame.text = "shape 2"
    # shape2.is_text_box равно true

    shape3 = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 10, 210, 100, 40)
    # shape3.is_text_box равно false
    shape3.add_text_frame("")
    # shape3.is_text_box равно false

    shape4 = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 10, 310, 100, 40)
    # shape4.is_text_box равно false
    shape4.text_frame.text = ""
    # shape4.is_text_box равно false

Добавление колонок в текстовые поля

Aspose.Slides предоставляет свойства column_count и column_spacing в классе TextFrameFormat для добавления колонок в текстовые поля. Вы можете указать количество колонок и задать расстояние (в пунктах) между колонками.

Следующий код на Python демонстрирует эту операцию:

import aspose.slides as slides

with slides.Presentation() as presentation:

	# Получить первый слайд в презентации.
	slide = presentation.slides[0]

	# Добавить AutoShape типа RECTANGLE.
	shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 100, 100, 300, 300)

	# Добавить TextFrame к прямоугольнику.
	shape.add_text_frame("All of these columns are confined to a single text container—" +
	"you can add or delete text, and any new or remaining text automatically reflows " +
	"within the container. You cannot have text flow from one container to another, " +
	"though—PowerPoint’s column options for text are limited!")

	# Получить формат текста TextFrame.
	format = shape.text_frame.text_frame_format

	# Указать количество колонок в TextFrame.
	format.column_count = 3

	# Указать интервал между колонками.
	format.column_spacing = 10

	# Сохранить презентацию.
	presentation.save("ColumnCount.pptx", slides.export.SaveFormat.PPTX)

Обновление текста

Aspose.Slides позволяет обновлять текст в отдельном текстовом поле или во всей презентации.

Следующий пример на Python демонстрирует, как обновить весь текст в презентации:

import aspose.slides as slides

with slides.Presentation("Sample.pptx") as presentation:
    for slide in presentation.slides:
        for shape in slide.shapes:
            if type(shape) is slides.AutoShape:
                for paragraph in shape.text_frame.paragraphs:
                    for portion in paragraph.portions:
                        portion.text = portion.text.replace("years", "months")
                        portion.portion_format.font_bold = 1
  
    # Сохранить изменённую презентацию.
    presentation.save("TextChanged.pptx", slides.export.SaveFormat.PPTX)

Добавление текстовых полей со ссылками

Вы можете вставить ссылку в текстовое поле. При щелчке по полю ссылка открывается.

Чтобы добавить текстовое поле, содержащее гиперссылку, выполните следующие действия:

  1. Создайте экземпляр класса Presentation .
  2. Получите ссылку на первый слайд.
  3. Добавьте AutoShape с ShapeType.RECTANGLE в нужное положение на слайде.
  4. Установите текст в свойстве TextFrame фигуры.
  5. Получите ссылку на HyperlinkManager .
  6. Используйте свойство hyperlink_manager для задания внешней гиперссылки по нажатию.
  7. Сохраните презентацию как файл PPTX.

Этот пример на Python показывает, как добавить текстовое поле с гиперссылкой на слайд:

import aspose.slides as slides

# Создать экземпляр класса Presentation.
with slides.Presentation() as presentation:

    # Получить первый слайд в презентации.
    slide = presentation.slides[0]

    # Добавить AutoShape типа RECTANGLE.
    shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 150, 150, 150, 50)

    text_portion = shape.text_frame.paragraphs[0].portions[0]

    # Добавить текст в фрейм.
    text_portion.text = "Aspose.Slides"

    # Установить гиперссылку для текста части.
    hyperlink_manager = text_portion.portion_format.hyperlink_manager
    hyperlink_manager.set_external_hyperlink_click("http://www.aspose.com")

    # Сохранить презентацию как файл PPTX.
    presentation.save("Hyperlink.pptx", slides.export.SaveFormat.PPTX)

Часто задаваемые вопросы

В чём разница между текстовым полем и заполняющим текстом (placeholder) при работе с мастер‑слайдами?

placeholder наследует стиль/позицию от [master]https://reference.aspose.com/slides/python-net/aspose.slides/masterslide/ и может быть переопределён на [layouts]https://reference.aspose.com/slides/python-net/aspose.slides/layoutslide/ , тогда как обычное текстовое поле является независимым объектом на конкретном слайде и не меняется при переключении макетов.

Как выполнить массовую замену текста во всей презентации, не затрагивая текст внутри диаграмм, таблиц и SmartArt?

Ограничьте итерацию авто‑формами, которые имеют TextFrame, и исключите встроенные объекты ([charts]https://reference.aspose.com/slides/python-net/aspose.slides.charts/chart/ , [tables]https://reference.aspose.com/slides/python-net/aspose.slides/table/ , [SmartArt]https://reference.aspose.com/slides/python-net/aspose.slides.smartart/smartart/) , обойдя их коллекции отдельно или пропустив типы этих объектов.