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

Обзор

Текстовый фрагмент представляет собой определённый кусок текста внутри абзаца и позволяет работать с этим куском независимо от окружающего содержимого. В 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())
        {
            android.graphics.RectF rectangle = portion.getRect();
            System.out.println("X = " + rectangle.left + "; Y = " + rectangle.top + "; 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())
        {
            PointF point = portion.getCoordinates();
            System.out.println("X = " + point.x + "; Y = " + point.y);
        }
    }
} finally {
    presentation.dispose();
}

FAQ

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

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

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

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

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

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

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

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