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

Обзор

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

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

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

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

Presentation presentation = new Presentation("Shapes.pptx");
try {
    ISlide slide = presentation.getSlides().get_Item(0);
    IAutoShape shape = (IAutoShape) slide.getShapes().get_Item(0);

    for (IParagraph paragraph : shape.getTextFrame().getParagraphs())
    {
        for (IPortion portion : paragraph.getPortions())
        {
            java.awt.geom.Rectangle2D.Float rectangle = portion.getRect();
            System.out.println("X = " + rectangle.x + "; Y = " + rectangle.y + "; Width = " + rectangle.width + "; Height = " + rectangle.height);
        }
    }
} finally {
    presentation.dispose();
}

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

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

Presentation presentation = new Presentation("Shapes.pptx");
try {
    ISlide slide = presentation.getSlides().get_Item(0);
    IAutoShape shape = (IAutoShape) slide.getShapes().get_Item(0);

    for (IParagraph paragraph : shape.getTextFrame().getParagraphs())
    {
        for (IPortion portion : paragraph.getPortions())
        {
            java.awt.geom.Point2D.Float point = portion.getCoordinates();
            System.out.println("X = " + point.x + "; Y = " + point.y);
        }
    }
} finally {
    presentation.dispose();
}

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

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

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

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

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

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

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

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

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