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

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

Aspose.Slides for Java предоставляет класс SlideUtil. Этот класс содержит несколько перегруженных статических методов для извлечения полного текста из презентации или слайда. Чтобы извлечь текст со слайда в PPTX‑презентации, используйте перегруженный статический метод getAllTextBoxes класса SlideUtil. Этот метод принимает объект Slide в качестве параметра.
При выполнении метод Slide просматривает весь текст переданного слайда и возвращает массив объектов TextFrame. Это означает, что доступно любое форматирование, связанное с текстом. Ниже приведён пример кода, который извлекает весь текст с первого слайда презентации:

//Создать объект класса Presentation, представляющий файл PPTX
Presentation pres = new Presentation("demo.pptx");
try {
    for (ISlide slide : pres.getSlides()) 
    {
        //Получить массив объектов ITextFrame со всех слайдов PPTX
        ITextFrame[] textFramesPPTX = SlideUtil.getAllTextBoxes(slide);

        //Пройти по массиву TextFrames
        for (int i = 0; i < textFramesPPTX.length; i++) {
            //Пройти по абзацам в текущем ITextFrame
            for (IParagraph para : textFramesPPTX[i].getParagraphs()) {
                //Пройти по частям (portions) в текущем IParagraph
                for (IPortion port : para.getPortions()) {
                    //Вывести текст текущей части
                    System.out.println(port.getText());

                    //Вывести высоту шрифта текста
                    System.out.println(port.getPortionFormat().getFontHeight());

                    //Вывести название шрифта текста
                    if (port.getPortionFormat().getLatinFont() != null)
                        System.out.println(port.getPortionFormat().getLatinFont().getFontName());
                }
            }
        }
    }
} finally {
    pres.dispose();
}

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

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

  1. Сначала объект Presentation, представляющий презентацию, из которой извлекается текст.
  2. Затем логическое значение, определяющее, включать ли мастер‑слайд при сканировании текста презентации.

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

//Создать экземпляр класса Presentation, представляющего файл PPTX
Presentation pres = new Presentation("demo.pptx");
try {
    //Получить массив объектов ITextFrame со всех слайдов PPTX
    ITextFrame[] textFramesPPTX = SlideUtil.getAllTextFrames(pres, true);

    //Перебрать массив TextFrames
    for (int i = 0; i < textFramesPPTX.length; i++) 
    {
        //Перебрать абзацы в текущем ITextFrame
        for (IParagraph para : textFramesPPTX[i].getParagraphs())
        {
            //Перебрать части (portions) в текущем IParagraph
            for (IPortion port : para.getPortions())
            {
                //Отобразить текст в текущей части
                System.out.println(port.getText());

                //Отобразить высоту шрифта текста
                System.out.println(port.getPortionFormat().getFontHeight());

                //Отобразить название шрифта текста
                if (port.getPortionFormat().getLatinFont() != null)
                    System.out.println(port.getPortionFormat().getLatinFont().getFontName());
            }
        }
    }
} finally {
    pres.dispose();
}

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

В класс Presentation добавлен новый статический метод getPresentationText. Для этого метода существует три перегрузки:

public IPresentationText getPresentationText(String file, int mode);
public IPresentationText getPresentationText(InputStream stream, int mode);
public IPresentationText getPresentationText(InputStream stream, int mode, ILoadOptions options);

The TextExtractionArrangingMode enum argument indicates the mode to organize the output of text result and can be set to the following values:

  • Unarranged - The raw text with no respect to position on the slide
  • Arranged - The text is positioned in the same order as on the slide

Unarranged mode can be used when speed is critical, it’s faster than Arranged mode.

IPresentationText represents the raw text extracted from the presentation. It contains a getSlidesText method which returns an array of ISlideText objects. Every object represent the text on the corresponding slide. ISlideText object have the following methods:

There is also a SlideText class which implements the ISlideText interface.

The new API can be used like this:

IPresentationText text1 = PresentationFactory.getInstance().getPresentationText("presentation.pptx", TextExtractionArrangingMode.Unarranged);
System.out.println(text1.getSlidesText()[0].getText());
System.out.println(text1.getSlidesText()[0].getLayoutText());
System.out.println(text1.getSlidesText()[0].getMasterText());
System.out.println(text1.getSlidesText()[0].getNotesText());

FAQ

Насколько быстро Aspose.Slides обрабатывает большие презентации при извлечении текста?

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

Может ли Aspose.Slides извлекать текст из таблиц и диаграмм в презентациях?

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

Нужна ли специальная лицензия Aspose.Slides для извлечения текста из презентаций?

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