Управление текстовыми частями в презентациях в .NET

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

GetCoordinates() метод был добавлен в IPortion и класс Portion, что позволяет получать координаты начала части:

using (Presentation presentation = new Presentation("Shapes.pptx"))
{
    IAutoShape shape = (IAutoShape)presentation.Slides[0].Shapes[0];
    var textFrame = (ITextFrame)shape.TextFrame;

    foreach (var paragraph in textFrame.Paragraphs)
    {
        foreach (Portion portion in paragraph.Portions)
        {
            PointF point = portion.GetCoordinates();
            Console.Write(Environment.NewLine + "Corrdinates X =" + point.X + " Corrdinates Y =" + point.Y);
        }
    }
}

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

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

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

Как работает наследование стилей: что переопределяет Portion и что берётся из Paragraph/TextFrame?

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

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

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

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

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