Продвинутое извлечение текста из презентаций на C++

Обзор

Извлечение текста из презентаций — распространённая, но при этом важная задача для разработчиков, работающих с содержимым слайдов. Независимо от того, имеете ли вы дело с файлами Microsoft PowerPoint в формате PPT или PPTX, или с презентациями OpenDocument (ODP), доступ к текстовым данным может быть критически важным для анализа, автоматизации, индексации или миграции контента.

В этой статье представлено подробное руководство по эффективному извлечению текста из различных форматов презентаций, включая PPT, PPTX и ODP, с использованием Aspose.Slides for C++. Вы узнаете, как систематически проходить элементы презентации, чтобы точно получить нужный текстовый контент.

Извлечение текста со слайда

Aspose.Slides for C++ предоставляет пространство имён Aspose.Slides.Util, которое включает класс SlideUtil. Этот класс раскрывает несколько перегруженных статических методов для извлечения всего текста из презентации или слайда. Чтобы извлечь текст со слайда в презентации, используйте метод GetAllTextBoxes. Этот метод принимает объект типа IBaseSlide в качестве параметра. При выполнении метод сканирует весь слайд на наличие текста и возвращает массив объектов типа ITextFrame, сохраняя любое форматирование текста.

Следующий фрагмент кода извлекает весь текст с первого слайда презентации:

auto slideIndex = 0;

auto presentation = System::MakeObject<Presentation>(u"demo.pptx");
auto slide = presentation->get_Slide(slideIndex);

auto textFrames = Util::SlideUtil::GetAllTextBoxes(slide);

for (const auto& textFrame : textFrames)
{
    for (const auto& paragraph : textFrame->get_Paragraphs())
    {
        for (const auto& portion : paragraph->get_Portions())
        {
            auto portionText = portion->get_Text();
            Console::WriteLine(portionText);

            auto portionFormat = portion->get_PortionFormat();
            auto fontHeight = portionFormat->get_FontHeight();
            Console::WriteLine(fontHeight);

            auto latinFont = portionFormat->get_LatinFont();
            if (latinFont != nullptr)
            {
                auto fontName = latinFont->get_FontName();
                Console::WriteLine(fontName);
            }
        }
    }
}

presentation->Dispose();

Извлечение текста из презентации

Чтобы просканировать текст всей презентации, используйте статический метод GetAllTextFrames класса SlideUtil. Он принимает два параметра:

  1. Во‑первых, объект IPresentation, представляющий презентацию PowerPoint или OpenDocument, из которой будет извлекаться текст.
  2. Во‑вторых, значение Boolean, указывающее, следует ли включать мастер‑слайды при сканировании текста презентации.

Метод возвращает массив объектов типа ITextFrame, включающий сведения о форматировании текста. Приведённый ниже код сканирует текст и детали форматирования во всей презентации, включая мастер‑слайды.

auto presentation = System::MakeObject<Presentation>(u"demo.pptx");

auto includeMasterSlides = true;
auto textFrames = Util::SlideUtil::GetAllTextFrames(presentation, includeMasterSlides);

for (const auto& textFrame : textFrames)
{
    for (const auto& paragraph : textFrame->get_Paragraphs())
    {
        for (const auto& portion : paragraph->get_Portions())
        {
            auto portionText = portion->get_Text();
            Console::WriteLine(portionText);

            auto portionFormat = portion->get_PortionFormat();
            auto fontHeight = portionFormat->get_FontHeight();
            Console::WriteLine(fontHeight);

            auto latinFont = portionFormat->get_LatinFont();
            if (latinFont != nullptr)
            {
                auto fontName = latinFont->get_FontName();
                Console::WriteLine(fontName);
            }
        }
    }
}

presentation->Dispose();

**Категоризованное и быстрое извл