Aprire presentazioni in C++

Introduzione

Oltre a creare presentazioni PowerPoint da zero, Aspose.Slides consente anche di aprire presentazioni esistenti. Dopo aver caricato una presentazione, è possibile recuperare informazioni su di essa, modificare il contenuto delle diapositive, aggiungere nuove diapositive, rimuovere quelle esistenti e altro ancora.

Aprire presentazioni

Per aprire una presentazione esistente, istanziare la classe Presentation e passare il percorso del file al suo costruttore.

Il seguente esempio C++ mostra come aprire una presentazione e ottenere il conteggio delle diapositive:

// Instanzia la classe Presentation e passa un percorso file al suo costruttore.
auto presentation = MakeObject<Presentation>(u"Sample.pptx");

// Stampa il numero totale di diapositive nella presentazione.
Console::WriteLine(presentation->get_Slides()->get_Count());

presentation->Dispose();

Aprire presentazioni protette da password

Quando è necessario aprire una presentazione protetta da password, passare la password tramite il metodo set_Password della classe LoadOptions per decifrarla e caricarla. Il seguente codice C++ dimostra quest’operazione:

auto loadOptions = MakeObject<LoadOptions>();
loadOptions->set_Password(u"YOUR_PASSWORD");

auto presentation = MakeObject<Presentation>(u"Sample.pptx", loadOptions);
    
// Esegui operazioni sulla presentazione decrittata.

presentation->Dispose();

Aprire presentazioni di grandi dimensioni

Aspose.Slides fornisce opzioni—in particolare il metodo get_BlobManagementOptions nella classe LoadOptions—per aiutare a caricare presentazioni di grandi dimensioni.

Il seguente codice C++ dimostra il caricamento di una presentazione di grandi dimensioni (ad esempio, 2 GB):

auto filePath = u"LargePresentation.pptx";

auto loadOptions = MakeObject<LoadOptions>();
// Scegli il comportamento KeepLocked—il file della presentazione rimarrà bloccato per tutta la durata di
// l'istanza Presentation, ma non è necessario caricarlo in memoria o copiarlo in un file temporaneo.
loadOptions->get_BlobManagementOptions()->set_PresentationLockingBehavior(PresentationLockingBehavior::KeepLocked);
loadOptions->get_BlobManagementOptions()->set_IsTemporaryFilesAllowed(true);
loadOptions->get_BlobManagementOptions()->set_MaxBlobsBytesInMemory(10 * 1024 * 1024); // 10 MB

auto presentation = MakeObject<Presentation>(filePath, loadOptions);

// La presentazione di grandi dimensioni è stata caricata e può essere usata, mantenendo un consumo di memoria basso.

// Apporta modifiche alla presentazione.
presentation->get_Slide(0)->set_Name(u"Large presentation");

// Salva la presentazione in un altro file. Il consumo di memoria rimane basso durante questa operazione.
presentation->Save(u"LargePresentation-copy.pptx", SaveFormat::Pptx);

// Non farlo! Verrà generata un'eccezione I/O perché il file è bloccato fino a quando l'oggetto presentation non viene eliminato.
File::Delete(filePath);

presentation->Dispose();

// Qui va bene farlo. Il file di origine non è più bloccato dall'oggetto presentation.
File::Delete(filePath);

Controllare le risorse esterne

Aspose.Slides fornisce l’interfaccia IResourceLoadingCallback che consente di gestire le risorse esterne. Il seguente codice C++ mostra come utilizzare l’interfaccia IResourceLoadingCallback:

class ImageLoadingHandler : public IResourceLoadingCallback
{
public:
    ResourceLoadingAction ResourceLoading(SharedPtr<IResourceLoadingArgs> args) override
    {
        if (args->get_OriginalUri().EndsWith(u".jpg"))
        {
            try
            {
                // Carica un'immagine sostitutiva.
                auto imageData = File::ReadAllBytes(u"aspose-logo.jpg");
                args->SetData(imageData);
                return ResourceLoadingAction::UserProvided;
            }
            catch (Exception&)
            {
                return ResourceLoadingAction::Skip;
            }
        }
        else if (args->get_OriginalUri().EndsWith(u".png"))
        {
            // Imposta un URL sostitutivo.
            args->set_Uri(u"http://www.google.com/images/logos/ps_logo2.png");
            return ResourceLoadingAction::Default;
        }

        // Ignora tutte le altre immagini.
        return ResourceLoadingAction::Skip;
    }
};
auto loadOptions = MakeObject<LoadOptions>();
loadOptions->set_ResourceLoadingCallback(MakeObject<ImageLoadingHandler>());

auto presentation = MakeObject<Presentation>(u"Sample.pptx", loadOptions);

Caricare presentazioni senza oggetti binari incorporati

Una presentazione PowerPoint può contenere i seguenti tipi di oggetti binari incorporati:

Utilizzando il metodo ILoadOptions::set_DeleteEmbeddedBinaryObjects è possibile caricare una presentazione senza alcun oggetto binario incorporato.

Questo metodo è utile per rimuovere contenuti binari potenzialmente dannosi. Il seguente codice C++ dimostra come caricare una presentazione senza alcun contenuto binario incorporato:

auto loadOptions = MakeObject<LoadOptions>();
loadOptions->set_DeleteEmbeddedBinaryObjects(true);

auto presentation = MakeObject<Presentation>(u"malware.ppt", loadOptions);

// Esegui operazioni sulla presentazione.

presentation->Dispose();

FAQ

Come posso capire se un file è corrotto e non può essere aperto?

Durante il caricamento si genera un’eccezione di convalida del parsing/formato. Tali errori spesso indicano una struttura ZIP non valida o record PowerPoint danneggiati.

Cosa succede se mancano i font richiesti durante l’apertura?

Il file si apre, ma successivamente la renderizzazione/esportazione potrebbe sostituire i font. Configura le sostituzioni dei font o aggiungi i font richiesti all’ambiente di runtime.

E i media incorporati (video/audio) durante l’apertura?

Diventano disponibili come risorse della presentazione. Se i media sono riferiti tramite percorsi esterni, assicurati che tali percorsi siano accessibili nel tuo ambiente; altrimenti la renderizzazione/esportazione potrebbe omettere i media.