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

Обзор

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

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

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

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

const presentation = new aspose.slides.Presentation("Shapes.pptx");
try {
    const slide = presentation.getSlides().get_Item(0);
    const shape = slide.getShapes().get_Item(0);
    const paragraphs = shape.getTextFrame().getParagraphs();

    for (let paragraphIndex = 0; paragraphIndex < paragraphs.getCount(); paragraphIndex++) {
        const paragraph = paragraphs.get_Item(paragraphIndex);
        const portions = paragraph.getPortions();

        for (let portionIndex = 0; portionIndex < portions.getCount(); portionIndex++) {
            const portion = portions.get_Item(portionIndex);
            const rectangle = portion.getRect();
            console.log("X = " + rectangle.x + "; Y = " + rectangle.y + "; Width = " + rectangle.width + "; Height = " + rectangle.height);
        }
    }
} finally {
    presentation.dispose();
}

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

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

const presentation = new aspose.slides.Presentation("Shapes.pptx");
try {
    const slide = presentation.getSlides().get_Item(0);
    const shape = slide.getShapes().get_Item(0);
    const paragraphs = shape.getTextFrame().getParagraphs();

    for (let paragraphIndex = 0; paragraphIndex < paragraphs.getCount(); paragraphIndex++) {
        const paragraph = paragraphs.get_Item(paragraphIndex);
        const portions = paragraph.getPortions();

        for (let portionIndex = 0; portionIndex < portions.getCount(); portionIndex++) {
            const portion = portions.get_Item(portionIndex);
            const point = portion.getCoordinates();
            console.log("X = " + point.x + "; Y = " + point.y);
        }
    }
} finally {
    presentation.dispose();
}

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

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

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

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

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

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

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

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

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