Получить границы текстового фрагмента в презентациях на Python

Обзор

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

В этой статье показано, как получить ограничивающий прямоугольник фрагмента, используя Portion.get_rect. Также показано, как получить координаты начала фрагмента, используя Portion.get_coordinates. Кроме того, рассмотрены типичные сценарии, связанные с фрагментами, такие как применение гиперссылки к отдельному текстовому отрывку, понимание того, как форматирование разрешается через уровень фрагмента, абзаца, TextFrame и наследование темы, а также обработка случаев, когда указанный шрифт недоступен.

Получение границ текстового фрагмента

Используйте Portion.get_rect чтобы получить ограничивающий прямоугольник текстового фрагмента:

import aspose.slides as slides

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

    for paragraph in shape.text_frame.paragraphs:
        for portion in paragraph.portions:
            rectangle = portion.get_rect()
            print(f"X = {rectangle.x}; Y = {rectangle.y}; Width = {rectangle.width}; Height = {rectangle.height}")

Получение координат текстового фрагмента

Используйте Portion.get_coordinates чтобы получить координаты начала текстового фрагмента:

import aspose.slides as slides

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

    for paragraph in shape.text_frame.paragraphs:
        for portion in paragraph.portions:
            point = portion.get_coordinates()
            print(f"X = {point.x}; Y = {point.y}")

Вопросы и ответы

Могу ли я применить гиперссылку только к части текста внутри одного абзаца?

Да, вы можете назначить гиперссылку отдельному фрагменту; только этот отрывок будет кликабельным, а не весь абзац.

Как работает наследование стилей: что переопределяется на уровне фрагмента, а что берётся из абзаца или TextFrame?

Свойства уровня фрагмента имеют высший приоритет. Если свойство не задано у Portion, Aspose.Slides берёт его из Paragraph. Если и там оно не задано, Aspose.Slides использует стиль из TextFrame или theme.

Что происходит, если шрифт, указанный для фрагмента, отсутствует на целевой машине или сервере?

Правила подстановки шрифтов применяются. Текст может перераспределиться: метрики, переносы и ширина могут измениться, что важно для точного позиционирования.

Могу ли я задать прозрачность заливки текста или градиент для конкретного фрагмента независимо от остального абзаца?

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