Продвинутое извлечение текста из презентаций в .NET
Обзор
Извлечение текста из презентаций – распространённая, но при этом важная задача для разработчиков, работающих с содержимым слайдов. Независимо от того, имеете ли вы дело с файлами Microsoft PowerPoint в формате PPT или PPTX, или с презентациями OpenDocument (ODP), доступ к текстовым данным и их получение могут быть критически важными для анализа, автоматизации, индексации или миграции контента.
В этой статье представлено полное руководство по эффективному извлечению текста из различных форматов презентаций, включая PPT, PPTX и ODP, с помощью Aspose.Slides for .NET. Вы узнаете, как систематически перебрать элементы презентации для точного получения необходимого текстового содержания.
Извлечение текста со слайда
Aspose.Slides for .NET предоставляет пространство имён Aspose.Slides.Util, которое включает класс SlideUtil. Этот класс раскрывает несколько перегруженных статических методов для извлечения всего текста из презентации или отдельного слайда. Чтобы извлечь текст со слайда в презентации, используйте метод GetAllTextBoxes. Этот метод принимает объект типа ISlide в качестве параметра. При выполнении метод просматривает весь слайд в поиске текста и возвращает массив объектов типа ITextFrame, сохраняющих любое форматирование текста.
Следующий фрагмент кода извлекает весь текст с первого слайда презентации:
int slideIndex = 0;
// Создайте экземпляр класса Presentation, представляющего файл презентации (PPT, PPTX, ODP и т.д.).
using Presentation presentation = new Presentation("demo.pptx");
// Get a reference to the slide.
ISlide slide = presentation.Slides[slideIndex];
// Get an array of text frames from the slide.
ITextFrame[] textFrames = Aspose.Slides.Util.SlideUtil.GetAllTextBoxes(slide);
// Loop through the array of the text frames.
for (int i = 0; i < textFrames.Length; i++)
{
// Переберите абзацы в текущем текстовом фрейме.
foreach (IParagraph paragraph in textFrames[i].Paragraphs)
{
// Переберите части текста в текущем абзаце.
foreach (IPortion portion in paragraph.Portions)
{
// Выведите текст текущей части.
Console.WriteLine(portion.Text);
// Выведите высоту шрифта текста.
Console.WriteLine(portion.PortionFormat.FontHeight);
// Выведите имя шрифта текста.
if (portion.PortionFormat.LatinFont != null)
Console.WriteLine(portion.PortionFormat.LatinFont.FontName);
}
}
}
Извлечение текста из презентации
Чтобы просканировать текст во всей презентации, используйте статический метод GetAllTextFrames класса SlideUtil. Он принимает два параметра:
- Сначала объект Presentation, представляющий презентацию PowerPoint или OpenDocument, из которой будет извлечён текст.
- Затем значение
Boolean, указывающее, следует ли включать мастер‑слайды при сканировании текста презентации.
Метод возвращает массив объектов типа ITextFrame, включающий информацию о форматировании текста. Приведённый ниже код сканирует текст и детали форматирования из презентации, включая мастер‑слайды.
// Создать экземпляр класса Presentation, представляющего файл презентации (PPT, PPTX, ODP и т.д.).
using Presentation presentation = new Presentation("demo.pptx");
// Get an array of text frames from all slides in the presentation.
ITextFrame[] textFrames = Aspose.Slides.Util.SlideUtil.GetAllTextFrames(presentation, true);
// Loop through the array of the text frames.
for (int i = 0; i < textFrames.Length; i++)
{
// Перебрать абзацы в текущем текстовом фрейме.
foreach (IParagraph paragraph in textFrames[i].Paragraphs)
{
// Перебрать части текста в текущем абзаце.
foreach (IPortion portion in paragraph.Portions)
{
// Вывести текст текущей части.
Console.WriteLine(portion.Text);
// Вывести высоту шрифта текста.
Console.WriteLine(portion.PortionFormat.FontHeight);
// Вывести имя шрифта текста.
if (portion.PortionFormat.LatinFont != null)
Console.WriteLine(portion.PortionFormat.LatinFont.FontName);
}
}
}
Категоризированное и быстрое извлечение текста
Класс PresentationFactory также предоставляет статические методы для извлечения всего текста из презентаций:
IPresentationText GetPresentationText(string file, TextExtractionArrangingMode mode);
IPresentationText GetPresentationText(Stream stream, TextExtractionArrangingMode mode);
IPresentationText GetPresentationText(Stream stream, TextExtractionArrangingMode mode, ILoadOptions options);
Аргумент перечисления TextExtractionArrangingMode указывает режим организации результата извлечения текста и может принимать следующие значения:
Unarranged– необработанный текст без учёта его позиции на слайде.Arranged– текст упорядочен в том же порядке, что и на слайде.
Неупорядоченный режим может использоваться, когда важна скорость; он быстрее упорядоченного режима.
IPresentationText представляет необработанный текст, извлечённый из презентации. Он содержит свойство SlidesText из пространства имён Aspose.Slides.Util, которое возвращает массив объектов типа ISlideText. Каждый объект представляет текст на соответствующем слайде. Объект типа ISlideText имеет следующие свойства:
Text– текст внутри фигур слайда.MasterText– текст внутри фигур мастер‑слайда, связанного с данным слайдом.LayoutText– текст внутри фигур шаблона слайда, связанного с данным слайдом.NotesText– текст внутри фигур слайда заметок, связанного с данным слайдом.CommentsText– текст внутри комментариев, связанных с этим слайдом.
IPresentationText text = new PresentationFactory().GetPresentationText("presentation.ppt", TextExtractionArrangingMode.Unarranged);
Console.WriteLine(text.SlidesText[0].Text);
Console.WriteLine(text.SlidesText[0].LayoutText);
Console.WriteLine(text.SlidesText[0].MasterText);
Console.WriteLine(text.SlidesText[0].NotesText);
Console.WriteLine(text.SlidesText[0].CommentsText);
FAQ
Насколько быстро Aspose.Slides обрабатывает большие презентации при извлечении текста?
Aspose.Slides оптимизирован для высокой производительности и эффективно обрабатывает даже крупные презентации, что делает его подходящим для сценариев в реальном времени или массовой обработки.
Может ли Aspose.Slides извлекать текст из таблиц и диаграмм внутри презентаций?
Да, Aspose.Slides полностью поддерживает извлечение текста из таблиц, диаграмм и других сложных элементов слайда, позволяя легко получать и анализировать всё текстовое содержание.
Нужна ли специальная лицензия Aspose.Slides для извлечения текста из презентаций?
Текст можно извлекать с помощью бесплатной пробной версии Aspose.Slides, однако она имеет определённые ограничения, например, обработку ограниченного количества слайдов. Для неограниченного использования и работы с крупными презентациями рекомендуется приобрести полную лицензию.