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

Обзор

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

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

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

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

using var presentation = new Presentation("Shapes.pptx");
var slide = presentation.Slides[0];
var shape = (IAutoShape)slide.Shapes[0];

foreach (var paragraph in shape.TextFrame.Paragraphs)
{
    foreach (var portion in paragraph.Portions)
    {
        var rectangle = portion.GetRect();
        Console.WriteLine($"X = {rectangle.X}; Y = {rectangle.Y}; Width = {rectangle.Width}; Height = {rectangle.Height}");
    }
}

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

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

using var presentation = new Presentation("Shapes.pptx");
var slide = presentation.Slides[0];
var shape = (IAutoShape)slide.Shapes[0];

foreach (var paragraph in shape.TextFrame.Paragraphs)
{
    foreach (var portion in paragraph.Portions)
    {
        var point = portion.GetCoordinates();
        Console.WriteLine($"X = {point.X}; Y = {point.Y}");
    }
}

FAQ

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

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

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

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

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

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

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

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