Получить границы текстовой части из презентаций в Python через Java

Обзор

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

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

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

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

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation

presentation = Presentation("Shapes.pptx")
try:
    slide = presentation.getSlides().get_Item(0)
    shape = slide.getShapes().get_Item(0)

    for paragraph in shape.getTextFrame().getParagraphs():
        for portion in paragraph.getPortions():
            rectangle = portion.getRect()
            print(f"X = {rectangle.x}; Y = {rectangle.y}; Width = {rectangle.width}; Height = {rectangle.height}")
finally:
    presentation.dispose()

Получение координат текстовой части

Используйте Portion.getCoordinates для получения координат начала текстовой части:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation

presentation = Presentation("Shapes.pptx")
try:
    slide = presentation.getSlides().get_Item(0)
    shape = slide.getShapes().get_Item(0)

    for paragraph in shape.getTextFrame().getParagraphs():
        for portion in paragraph.getPortions():
            point = portion.getCoordinates()
            print(f"X = {point.x}; Y = {point.y}")
finally:
    presentation.dispose()

FAQ

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

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

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

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

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

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

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

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