Форматирование текста презентации в Python

Обзор

Эта статья показывает, как форматировать текст в презентациях PowerPoint и OpenDocument с помощью Aspose.Slides for Python via .NET. Она охватывает выделение, цвета фона, прозрачность, межсимвольный интервал, свойства шрифта, вращение, интервал абзацев, поведение автоподгонки, привязку текста, табуляцию и настройки языка.

В примерах ниже мы будем использовать файл с именем “sample.pptx”, который содержит один текстовый блок на первом слайде со следующим текстом:

Sample text

Выделение текста

Используйте метод TextFrame.highlight_text, когда необходимо выделить текст, соответствующий определённому образцу внутри текстового кадра. Метод применяет цвет выделения к найденным фрагментам текста и может быть использован вместе с TextSearchOptions для управления способом поиска, например, для совпадения только полных слов.

Пример кода ниже выделяет все вхождения символов “try”, а затем выделяет только полное слово “to”.

import aspose.pydrawing as draw
import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    # Получить первую форму с первого слайда.
    shape = presentation.slides[0].shapes[0]

    # Выделить слово "try" в форме.
    shape.text_frame.highlight_text("try", draw.Color.light_blue)

    search_options = slides.TextSearchOptions()
    search_options.whole_words_only = True

    # Выделить слово "to" в форме.
    shape.text_frame.highlight_text("to", draw.Color.violet, search_options, None)

    presentation.save("highlighted_text.pptx", slides.export.SaveFormat.PPTX)

Результат:

Выделенный текст

Выделение текста с помощью регулярных выражений

Метод TextFrame.highlight_regex выделяет совпадения текста, найденные с помощью регулярного выражения. В Python этот API доступен через TextFrame.

Пример кода ниже выделяет все слова, содержащие семь или более символов:

import aspose.pydrawing as draw
import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    shape = presentation.slides[0].shapes[0]

    regex = r"\b[^\s]{7,}\b"

    # Выделить все слова, содержащие семь или более символов.
    shape.text_frame.highlight_regex(regex, draw.Color.yellow, None)

    presentation.save("highlighted_text_using_regex.pptx", slides.export.SaveFormat.PPTX)

Результат:

Выделенный текст с использованием регулярного выражения

Установка фонового цвета текста

Используйте ParagraphFormat.default_portion_format для установки цвета выделения по умолчанию для абзаца или используйте PortionFormat.highlight_color для отдельных фрагментов текста.

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

import aspose.pydrawing as draw
import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    auto_shape = presentation.slides[0].shapes[0]
    paragraph = auto_shape.text_frame.paragraphs[0]

    # Установить цвет выделения для всего абзаца.
    paragraph.paragraph_format.default_portion_format.highlight_color.color = draw.Color.light_gray

    presentation.save("gray_paragraph.pptx", slides.export.SaveFormat.PPTX)

Результат:

Серый абзац

Пример кода ниже демонстрирует, как установить фоновый цвет для текстовых фрагментов полужирным шрифтом:

import aspose.pydrawing as draw
import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    auto_shape = presentation.slides[0].shapes[0]
    paragraph = auto_shape.text_frame.paragraphs[0]

    for portion in paragraph.portions:
        if portion.portion_format.get_effective().font_bold:
            # Установить цвет выделения для текстового фрагмента.
            portion.portion_format.highlight_color.color = draw.Color.light_gray

    presentation.save("gray_text_portions.pptx", slides.export.SaveFormat.PPTX)

Результат:

Серые текстовые фрагменты

Выравнивание абзацев текста

Используйте ParagraphFormat.alignment для установки выравнивания абзаца внутри текстового кадра. Значение может быть центрировано, выровнено по левому краю, по правому краю, по ширине и т.д.

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

import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    auto_shape = presentation.slides[0].shapes[0]
    paragraph = auto_shape.text_frame.paragraphs[0]

    # Установить выравнивание абзаца по центру.
    paragraph.paragraph_format.alignment = slides.TextAlignment.CENTER

    presentation.save("aligned_paragraph.pptx", slides.export.SaveFormat.PPTX)

Результат:

Выровненный абзац

Установка прозрачности текста

Прозрачность текста управляется через альфа‑компонент цвета, назначенного PortionFormat.fill_format. В приведённых ниже примерах alpha = 50 — это значение альфа‑канала ARGB в диапазоне 0‑255, а не процент прозрачности.

Пример кода ниже показывает, как применить прозрачность к всему абзацу:

import aspose.pydrawing as draw
import aspose.slides as slides

alpha = 50

with slides.Presentation("sample.pptx") as presentation:
    auto_shape = presentation.slides[0].shapes[0]
    paragraph = auto_shape.text_frame.paragraphs[0]

    # Установить цвет заливки текста в прозрачный цвет.
    paragraph.paragraph_format.default_portion_format.fill_format.fill_type = slides.FillType.SOLID
    paragraph.paragraph_format.default_portion_format.fill_format.solid_fill_color.color = draw.Color.from_argb(alpha, draw.Color.black)

    presentation.save("transparent_paragraph.pptx", slides.export.SaveFormat.PPTX)

Результат:

Прозрачный абзац

Следующий пример кода показывает, как применить прозрачность к текстовым фрагментам полужирным шрифтом:

import aspose.pydrawing as draw
import aspose.slides as slides

alpha = 50

with slides.Presentation("sample.pptx") as presentation:
    auto_shape = presentation.slides[0].shapes[0]
    paragraph = auto_shape.text_frame.paragraphs[0]

    for portion in paragraph.portions:
        if portion.portion_format.get_effective().font_bold:
            # Установить прозрачность текстового фрагмента.
            portion.portion_format.fill_format.fill_type = slides.FillType.SOLID
            portion.portion_format.fill_format.solid_fill_color.color = draw.Color.from_argb(alpha, draw.Color.black)

    presentation.save("transparent_text_portions.pptx", slides.export.SaveFormat.PPTX)

Результат:

Прозрачные текстовые фрагменты

Установка межсимвольного интервала для текста

Используйте BasePortionFormat.spacing для увеличения или уменьшения интервала между символами в текстовом блоке.

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

import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    auto_shape = presentation.slides[0].shapes[0]
    paragraph = auto_shape.text_frame.paragraphs[0]

    # Примечание: используйте отрицательные значения, чтобы сжать межсимвольный интервал.
    paragraph.paragraph_format.default_portion_format.spacing = 3  # Расширить межсимвольный интервал.

    presentation.save("character_spacing_in_paragraph.pptx", slides.export.SaveFormat.PPTX)

Результат:

Межсимвольный интервал в абзаце

Пример кода ниже показывает, как расширить межсимвольный интервал в текстовых фрагментах полужирным шрифтом:

import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    auto_shape = presentation.slides[0].shapes[0]
    paragraph = auto_shape.text_frame.paragraphs[0]

    for portion in paragraph.portions:
        if portion.portion_format.get_effective().font_bold:
            # Примечание: используйте отрицательные значения, чтобы сжать межсимвольный интервал.
            portion.portion_format.spacing = 3  # Расширить межсимвольный интервал.

    presentation.save("character_spacing_in_text_portions.pptx", slides.export.SaveFormat.PPTX)

Результат:

Межсимвольный интервал в текстовых фрагментах

Отключение кернинга для определённых шрифтов

В некоторых случаях текст, отрисованный Aspose.Slides, может выглядеть немного плотнее, чем тот же текст в PowerPoint. Это может происходить, потому что PowerPoint может игнорировать данные кернинга для определённых шрифтов, даже если шрифт содержит корректную информацию о кернинге и кернинг включён в настройках PowerPoint.

Чтобы сделать вывод ближе к PowerPoint в подобных случаях, можно отключить кернинг для текстовых фрагментов, использующих затронутый шрифт. Установите PortionFormat.kerning_minimal_size в значение, значительно превышающее реальный размер шрифта:

import aspose.slides as slides

with slides.Presentation("presentation.pptx") as presentation:
    auto_shape = presentation.slides[0].shapes[0]
    target_font = "Roboto"

    for paragraph in auto_shape.text_frame.paragraphs:
        for portion in paragraph.portions:
            latin_font = portion.portion_format.latin_font
            east_asian_font = portion.portion_format.east_asian_font
            complex_script_font = portion.portion_format.complex_script_font

            if ((latin_font is not None and latin_font.font_name == target_font) or
                    (east_asian_font is not None and east_asian_font.font_name == target_font) or
                    (complex_script_font is not None and complex_script_font.font_name == target_font)):
                portion.portion_format.kerning_minimal_size = 100

    presentation.save("output.pptx", slides.export.SaveFormat.PPTX)

Эта настройка предотвращает применение кернинга к соответствующим текстовым фрагментам и может помочь согласовать рендеринг Aspose.Slides с визуальным выводом PowerPoint для шрифтов, затронутых этим специфическим поведением PowerPoint.

Управление свойствами шрифта текста

Свойства шрифта можно задавать на уровне абзаца через ParagraphFormat.default_portion_format или для отдельных фрагментов через PortionFormat.

Следующий код задаёт шрифт и стиль текста для всего абзаца: он применяет размер шрифта, полужирный, курсив, пунктирное подчёркивание и шрифт Times New Roman ко всем фрагментам в абзаце.

import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    auto_shape = presentation.slides[0].shapes[0]
    paragraph = auto_shape.text_frame.paragraphs[0]

    # Установить свойства шрифта для абзаца.
    paragraph.paragraph_format.default_portion_format.font_height = 12
    paragraph.paragraph_format.default_portion_format.font_bold = slides.NullableBool.TRUE
    paragraph.paragraph_format.default_portion_format.font_italic = slides.NullableBool.TRUE
    paragraph.paragraph_format.default_portion_format.font_underline = slides.TextUnderlineType.DOTTED
    paragraph.paragraph_format.default_portion_format.latin_font = slides.FontData("Times New Roman")

    presentation.save("font_properties_for_paragraph.pptx", slides.export.SaveFormat.PPTX)

Результат:

Свойства шрифта для абзаца

Пример кода ниже применяет аналогичные свойства к текстовым фрагментам полужирным шрифтом:

import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    auto_shape = presentation.slides[0].shapes[0]
    paragraph = auto_shape.text_frame.paragraphs[0]

    for portion in paragraph.portions:
        if portion.portion_format.get_effective().font_bold:
            # Установить свойства шрифта для текстового фрагмента.
            portion.portion_format.font_height = 13
            portion.portion_format.font_italic = slides.NullableBool.TRUE
            portion.portion_format.font_underline = slides.TextUnderlineType.DOTTED
            portion.portion_format.latin_font = slides.FontData("Times New Roman")

    presentation.save("font_properties_for_text_portions.pptx", slides.export.SaveFormat.PPTX)

Результат:

Свойства шрифта для текстовых фрагментов

Установка вращения текста

Используйте TextFrameFormat.text_vertical_type для установки предопределённой ориентации текста внутри фигуры.

Следующий пример кода устанавливает ориентацию текста в фигуре в VERTICAL270, что вращает текст на 90 градусов против часовой стрелки:

import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    auto_shape = presentation.slides[0].shapes[0]

    auto_shape.text_frame.text_frame_format.text_vertical_type = slides.TextVerticalType.VERTICAL270

    presentation.save("text_rotation.pptx", slides.export.SaveFormat.PPTX)

Результат:

Вращение текста

Установка пользовательского вращения для текстовых кадров

Используйте TextFrameFormat.rotation_angle для задания пользовательского угла вращения для TextFrame.

Пример кода ниже вращает текстовый кадр на 3 градуса по часовой стрелке внутри фигуры:

import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    auto_shape = presentation.slides[0].shapes[0]

    auto_shape.text_frame.text_frame_format.rotation_angle = 3

    presentation.save("custom_text_rotation.pptx", slides.export.SaveFormat.PPTX)

Результат:

Пользовательское вращение текста

Установка межстрочного интервала абзацев

Aspose.Slides предоставляет ParagraphFormat.space_after, ParagraphFormat.space_before, и ParagraphFormat.space_within для управления интервалом абзацев. Эти свойства используются следующим образом:

  • Укажите положительное значение, чтобы задать межстрочный интервал в процентах от высоты строки.
  • Укажите отрицательное значение, чтобы задать межстрочный интервал в пунктах.

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

import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    auto_shape = presentation.slides[0].shapes[0]
    paragraph = auto_shape.text_frame.paragraphs[0]

    paragraph.paragraph_format.space_within = 200

    presentation.save("line_spacing.pptx", slides.export.SaveFormat.PPTX)

Результат:

Межстрочный интервал в абзаце

Установка типа автоподгонки для текстовых кадров

TextFrameFormat.autofit_type определяет, как текст ведёт себя, когда превышает границы своего контейнера. Используйте его, чтобы управлять тем, уменьшается ли текст, выходит за пределы или автоматически изменяет размер фигуры.

import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    auto_shape = presentation.slides[0].shapes[0]

    auto_shape.text_frame.text_frame_format.autofit_type = slides.TextAutofitType.SHAPE

    presentation.save("autofit_type.pptx", slides.export.SaveFormat.PPTX)

Установка привязки текстовых кадров

TextFrameFormat.anchoring_type определяет, как текст позиционируется вертикально внутри фигуры, например вверху, посередине или внизу.

import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    auto_shape = presentation.slides[0].shapes[0]

    auto_shape.text_frame.text_frame_format.anchoring_type = slides.TextAnchorType.BOTTOM

    presentation.save("text_anchor.pptx", slides.export.SaveFormat.PPTX)

Установка табуляции текста

Используйте ParagraphFormat.default_tab_size и ParagraphFormat.tabs для настройки табуляций в абзаце.

import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    auto_shape = presentation.slides[0].shapes[0]
    paragraph = auto_shape.text_frame.paragraphs[0]

    paragraph.paragraph_format.default_tab_size = 100
    paragraph.paragraph_format.tabs.add(30, slides.TabAlignment.LEFT)

    presentation.save("paragraph_tabs.pptx", slides.export.SaveFormat.PPTX)

Результат:

Табуляции абзаца

Установка языка проверки правописания

Aspose.Slides предоставляет PortionFormat.language_id, который позволяет задать язык проверки правописания для текстового фрагмента. Язык проверки определяет язык, используемый для проверки орфографии и грамматики в PowerPoint.

Следующий пример кода показывает, как задать язык проверки правописания для текстового фрагмента:

import aspose.slides as slides

with slides.Presentation("presentation.pptx") as presentation:
    auto_shape = presentation.slides[0].shapes[0]

    paragraph = auto_shape.text_frame.paragraphs[0]
    paragraph.portions.clear()

    font = slides.FontData("SimSun")

    text_portion = slides.Portion()
    text_portion.portion_format.complex_script_font = font
    text_portion.portion_format.east_asian_font = font
    text_portion.portion_format.latin_font = font

    # Установить идентификатор языка проверки правописания.
    text_portion.portion_format.language_id = "zh-CN"

    text_portion.text = "1."
    paragraph.portions.add(text_portion)

    presentation.save("proofing_language.pptx", slides.export.SaveFormat.PPTX)

Установка языка по умолчанию

Используйте LoadOptions.default_text_language для определения языка по умолчанию для текста, создаваемого при загрузке или создании презентации.

import aspose.slides as slides

load_options = slides.LoadOptions()
load_options.default_text_language = "en-US"

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

    # Добавить новую прямоугольную форму с текстом.
    shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 20, 20, 150, 50)
    shape.text_frame.text = "Sample text"

    # Проверить язык первой части.
    portion = shape.text_frame.paragraphs[0].portions[0]
    print(portion.portion_format.language_id)

Установка стиля текста по умолчанию

Чтобы применить форматирование текста по умолчанию на уровне презентации, используйте Presentation.default_text_style.

Следующий пример кода показывает, как задать шрифт по умолчанию полужирным размером 14 пунктов для всего текста на слайдах новой презентации.

import aspose.slides as slides

with slides.Presentation() as presentation:
    # Получить формат абзаца верхнего уровня.
    paragraph_format = presentation.default_text_style.get_level(0)

    if paragraph_format is not None:
        paragraph_format.default_portion_format.font_height = 14
        paragraph_format.default_portion_format.font_bold = slides.NullableBool.TRUE

    presentation.save("default_text_style.pptx", slides.export.SaveFormat.PPTX)

Извлечение текста с эффектом All-Caps

В PowerPoint применение эффекта шрифта All Caps заставляет текст отображаться заглавными буквами на слайде, даже если он был изначально введён строчными. При получении такого текстового фрагмента с помощью Aspose.Slides библиотека возвращает текст точно в том виде, в каком он был введён. Чтобы соответствовать отображаемому тексту, проверьте TextCapType и преобразуйте возвращённую строку в верхний регистр, когда значение равно ALL.

Допустим, у нас есть следующий текстовый блок на первом слайде файла sample2.pptx.

Эффект All Caps

Пример кода ниже показывает, как извлечь текст с применённым эффектом All Caps:

import aspose.slides as slides

with slides.Presentation("sample2.pptx") as presentation:
    auto_shape = presentation.slides[0].shapes[0]
    text_portion = auto_shape.text_frame.paragraphs[0].portions[0]

    print("Original text:", text_portion.text)

    text_format = text_portion.portion_format.get_effective()
    if text_format.text_cap_type == slides.TextCapType.ALL:
        text = text_portion.text.upper()
        print("All-Caps effect:", text)

Вывод:

Original text: Hello, Aspose!
All-Caps effect: HELLO, ASPOSE!

FAQ

Как изменить текст в таблице на слайде?

Чтобы изменить текст в таблице на слайде, используйте Table. Итерируйте ячейки и обновляйте каждую ячейку через Cell.text_frame и форматирование абзацев через Paragraph.paragraph_format.

Как применить градиентный цвет к тексту в слайде PowerPoint?

Чтобы применить градиентный цвет к тексту, используйте PortionFormat.fill_format. Установите FillFormat.fill_type в значение FillType.GRADIENT и настройте градиентные остановки, направление и прозрачность.