Управление текстовыми фрагментами в презентациях с использованием C++

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

GetCoordinates() method has been added to IPortion and Portion class which allows retrieving the coordinates of the beginning of the portion:

auto presentation = System::MakeObject<Presentation>(u"Shapes.pptx");
auto shape = System::ExplicitCast<IAutoShape>(presentation->get_Slides()->idx_get(0)->get_Shapes()->idx_get(0));
auto textFrame = shape->get_TextFrame();

for (const auto& paragraph : textFrame->get_Paragraphs())
{
    for (const auto& portion : paragraph->get_Portions())
    {
        PointF point = portion->GetCoordinates();
        Console::WriteLine(String(u"Coordinates X =") + point.get_X() + u" Coordinates Y =" + point.get_Y());
    }
}

Вопросы и ответы

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

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

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

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

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

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

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

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