Otwieranie prezentacji w C++

Wprowadzenie

Poza tworzeniem prezentacji PowerPoint od podstaw, Aspose.Slides umożliwia również otwieranie istniejących prezentacji. Po załadowaniu prezentacji możesz pobrać informacje na jej temat, edytować zawartość slajdów, dodawać nowe slajdy, usuwać istniejące i wiele więcej.

Otwieranie prezentacji

Aby otworzyć istniejącą prezentację, utwórz instancję klasy Presentation i przekaż ścieżkę do pliku do jej konstruktora.

Poniższy przykład w C++ pokazuje, jak otworzyć prezentację i uzyskać liczbę jej slajdów:

// Utwórz instancję klasy Presentation i przekaż ścieżkę do pliku do jej konstruktora.
auto presentation = MakeObject<Presentation>(u"Sample.pptx");

// Wypisz całkowitą liczbę slajdów w prezentacji.
Console::WriteLine(presentation->get_Slides()->get_Count());

presentation->Dispose();

Otwieranie prezentacji chronionych hasłem

Gdy trzeba otworzyć prezentację chronioną hasłem, przekaż hasło metodą set_Password klasy LoadOptions aby odszyfrować i załadować ją. Poniższy kod w C++ demonstruje tę operację:

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

auto presentation = MakeObject<Presentation>(u"Sample.pptx", loadOptions);
    
// Wykonaj operacje na odszyfrowanej prezentacji.

presentation->Dispose();

Otwieranie dużych prezentacji

Aspose.Slides udostępnia opcje — w szczególności metodę get_BlobManagementOptions klasy LoadOptions, aby pomóc w ładowaniu dużych prezentacji.

Poniższy kod w C++ demonstruje ładowanie dużej prezentacji (na przykład 2 GB):

auto filePath = u"LargePresentation.pptx";

auto loadOptions = MakeObject<LoadOptions>();
// Wybierz zachowanie KeepLocked — plik prezentacji pozostanie zablokowany przez cały okres życia
// instancji Presentation, ale nie musi być ładowany do pamięci ani kopiowany do pliku tymczasowego.
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);

// Duża prezentacja została załadowana i może być używana, przy jednoczesnym niskim zużyciu pamięci.

// Wprowadź zmiany w prezentacji.
presentation->get_Slide(0)->set_Name(u"Large presentation");

// Zapisz prezentację do innego pliku. Zużycie pamięci pozostaje niskie podczas tej operacji.
presentation->Save(u"LargePresentation-copy.pptx", SaveFormat::Pptx);

// Nie rób tego! Zostanie rzucony wyjątek I/O, ponieważ plik jest zablokowany aż do zwolnienia obiektu prezentacji.
File::Delete(filePath);

presentation->Dispose();

// Można to zrobić tutaj. Plik źródłowy nie jest już zablokowany przez obiekt prezentacji.
File::Delete(filePath);

Kontrola zewnętrznych zasobów

Aspose.Slides udostępnia interfejs IResourceLoadingCallback, który umożliwia zarządzanie zasobami zewnętrznymi. Poniższy kod w C++ pokazuje, jak używać interfejsu IResourceLoadingCallback:

class ImageLoadingHandler : public IResourceLoadingCallback
{
public:
    ResourceLoadingAction ResourceLoading(SharedPtr<IResourceLoadingArgs> args) override
    {
        if (args->get_OriginalUri().EndsWith(u".jpg"))
        {
            try
            {
                // Wczytaj zastępczy obraz.
                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"))
        {
            // Ustaw zastępczy adres URL.
            args->set_Uri(u"http://www.google.com/images/logos/ps_logo2.png");
            return ResourceLoadingAction::Default;
        }

        // Pomiń wszystkie pozostałe obrazy.
        return ResourceLoadingAction::Skip;
    }
};
auto loadOptions = MakeObject<LoadOptions>();
loadOptions->set_ResourceLoadingCallback(MakeObject<ImageLoadingHandler>());

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

Ładowanie prezentacji bez osadzonych obiektów binarnych

Prezentacja PowerPoint może zawierać następujące typy osadzonych obiektów binarnych:

Używając metody ILoadOptions::set_DeleteEmbeddedBinaryObjects, możesz załadować prezentację bez żadnych osadzonych obiektów binarnych.

Ta metoda jest przydatna do usuwania potencjalnie złośliwych treści binarnych. Poniższy kod w C++ demonstruje, jak załadować prezentację bez jakichkolwiek osadzonych treści binarnych:

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

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

// Wykonaj operacje na prezentacji.

presentation->Dispose();

FAQ

Jak mogę stwierdzić, że plik jest uszkodzony i nie może zostać otwarty?

Podczas ładowania otrzymasz wyjątek parsowania/validacji formatu. Takie błędy często wskazują na nieprawidłową strukturę ZIP lub uszkodzone rekordy PowerPoint.

Co się stanie, jeśli podczas otwierania brakuje wymaganych czcionek?

Plik zostanie otwarty, ale później rendering/export może zastąpić czcionki. Configure font substitutions lub add the required fonts w środowisku uruchomieniowym.

Co z osadzonymi mediami (wideo/audio) przy otwieraniu?

Stają się dostępne jako zasoby prezentacji. Jeśli media są odwoływane przez zewnętrzne ścieżki, upewnij się, że te ścieżki są dostępne w twoim środowisku; w przeciwnym razie rendering/export może pominąć media.