Estrazione avanzata di testo da presentazioni in C++

Panoramica

L’estrazione del testo da presentazioni è un’operazione comune ma essenziale per gli sviluppatori che lavorano con contenuti diapositive. Sia che tu stia gestendo file Microsoft PowerPoint in formato PPT o PPTX, sia che tu lavori con presentazioni OpenDocument (ODP), accedere e recuperare i dati testuali può essere cruciale per analisi, automazione, indicizzazione o migrazione di contenuti.

Questo articolo fornisce una guida completa su come estrarre in modo efficiente testo da vari formati di presentazione, inclusi PPT, PPTX e ODP, utilizzando Aspose.Slides per C++. Imparerai a iterare sistematicamente gli elementi della presentazione per recuperare accuratamente il contenuto testuale necessario.

Estrai testo da una diapositiva

Aspose.Slides per C++ fornisce lo spazio dei nomi Aspose.Slides.Util che include la classe SlideUtil. Questa classe espone diversi metodi statici sovraccaricati per estrarre tutto il testo da una presentazione o da una diapositiva. Per estrarre testo da una diapositiva in una presentazione, utilizza il metodo GetAllTextBoxes. Questo metodo accetta come parametro un oggetto di tipo IBaseSlide. Quando viene eseguito, il metodo scansiona l’intera diapositiva alla ricerca di testo e restituisce un array di oggetti di tipo ITextFrame, conservando qualsiasi formattazione del testo.

Il seguente frammento di codice estrae tutto il testo dalla prima diapositiva della presentazione:

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();

Estrai testo da una presentazione

Per scansionare il testo dell’intera presentazione, utilizza il metodo statico GetAllTextFrames esposto dalla classe SlideUtil. Accetta due parametri:

  1. In primo luogo, un oggetto IPresentation che rappresenta una presentazione PowerPoint o OpenDocument da cui verrà estratto il testo.
  2. In secondo luogo, un valore Boolean che indica se le diapositive master debbano essere incluse durante la scansione del testo nella presentazione.

Il metodo restituisce un array di oggetti di tipo ITextFrame, includendo le informazioni di formattazione del testo. Il codice seguente esegue la scansione del testo e dei dettagli di formattazione da una presentazione, includendo le diapositive master.

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();

Estrazione di testo categorizzata e veloce

La classe PresentationFactory fornisce anche metodi per estrarre tutto il testo dalle presentazioni:

System::SharedPtr<IPresentationText> GetPresentationText(System::String file, TextExtractionArrangingMode mode);
System::SharedPtr<IPresentationText> GetPresentationText(System::SharedPtr<System::IO::Stream> stream, TextExtractionArrangingMode mode);
System::SharedPtr<IPresentationText> GetPresentationText(System::SharedPtr<System::IO::Stream> stream, TextExtractionArrangingMode mode, System::SharedPtr<ILoadOptions> options);

L’argomento enum TextExtractionArrangingMode indica la modalità di organizzazione del risultato di estrazione del testo e può essere impostato sui seguenti valori:

  • Unarranged - Testo grezzo senza considerare la sua posizione sulla diapositiva.
  • Arranged - Testo organizzato nello stesso ordine in cui appare sulla diapositiva.

La modalità non organizzata può essere utilizzata quando la velocità è fondamentale; è più veloce della modalità organizzata.

IPresentationText rappresenta il testo grezzo estratto dalla presentazione. Il suo metodo get_SlidesText() restituisce un array di oggetti di tipo ISlideText. Ogni oggetto rappresenta il testo della corrispondente diapositiva. L’oggetto di tipo ISlideText dispone dei seguenti metodi:

  • get_Text() - Il testo all’interno delle forme della diapositiva.
  • get_MasterText() - Il testo all’interno delle forme della diapositiva master associate a questa diapositiva.
  • get_LayoutText() - Il testo all’interno delle forme della diapositiva layout associate a questa diapositiva.
  • get_NotesText() - Il testo all’interno delle forme della diapositiva note associate a questa diapositiva.
  • get_CommentsText() - Il testo all’interno dei commenti associati a questa diapositiva.
auto presentationPath = u"presentation.ppt";
auto arrangingMode = TextExtractionArrangingMode::Unarranged;
auto presentationText = PresentationFactory::get_Instance()->GetPresentationText(presentationPath, arrangingMode);
auto firstSlideText = presentationText->get_SlidesText()[0];

Console::WriteLine(firstSlideText->get_Text());
Console::WriteLine(firstSlideText->get_LayoutText());
Console::WriteLine(firstSlideText->get_MasterText());
Console::WriteLine(firstSlideText->get_NotesText());
Console::WriteLine(firstSlideText->get_CommentsText());

FAQ

Quanto velocemente Aspose.Slides elabora presentazioni di grandi dimensioni durante l’estrazione del testo?

Aspose.Slides è ottimizzato per alte prestazioni e può elaborare anche presentazioni di grandi dimensioni, rendendolo adatto a scenari di elaborazione in tempo reale o batch.

Aspose.Slides può estrarre testo da tabelle e grafici all’interno delle presentazioni?

Sì. Aspose.Slides può estrarre testo da molti elementi della diapositiva, incluse tabelle e oggetti correlati a grafici, così da consentire l’accesso e l’analisi del contenuto testuale nelle strutture di presentazione più comuni.

È necessaria una licenza speciale di Aspose.Slides per estrarre testo dalle presentazioni?

Puoi estrarre testo utilizzando la versione di prova gratuita di Aspose.Slides, sebbene presenti alcune limitazioni, come la possibilità di elaborare solo un numero limitato di diapositive. Per un utilizzo illimitato e per gestire presentazioni più grandi, è consigliato acquistare una licenza completa.