Presentaties openen in C++

Inleiding

Naast het vanaf nul maken van PowerPoint‑presentaties biedt Aspose.Slides ook de mogelijkheid om bestaande presentaties te openen. Nadat u een presentatie hebt geladen, kunt u er informatie over opvragen, de inhoud van dia’s bewerken, nieuwe dia’s toevoegen, bestaande dia’s verwijderen en meer.

Presentaties openen

Om een bestaande presentatie te openen, maakt u een instantie van de Presentation‑klasse en geeft u het bestandspad door aan de constructor.

Het volgende C++‑voorbeeld toont hoe u een presentatie opent en het aantal dia’s ophaalt:

// Maak een instantie van de Presentation‑klasse en geef een bestandspad door aan de constructor.
auto presentation = MakeObject<Presentation>(u"Sample.pptx");

// Print het totale aantal dia's in de presentatie.
Console::WriteLine(presentation->get_Slides()->get_Count());

presentation->Dispose();

Wachtwoord‑beveiligde presentaties openen

Wanneer u een wachtwoord‑beveiligde presentatie moet openen, geeft u het wachtwoord door aan de set_Password‑methode van de LoadOptions‑klasse om deze te ontsleutelen en te laden. Het volgende C++‑codefragment demonstreert deze bewerking:

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

auto presentation = MakeObject<Presentation>(u"Sample.pptx", loadOptions);
    
// Voer bewerkingen uit op de gedecrypteerde presentatie.

presentation->Dispose();

Grote presentaties openen

Aspose.Slides biedt opties—met name de get_BlobManagementOptions‑methode in de LoadOptions‑klasse—om u te helpen grote presentaties te laden.

Het volgende C++‑codefragment toont het laden van een grote presentatie (bijvoorbeeld 2 GB):

auto filePath = u"LargePresentation.pptx";

auto loadOptions = MakeObject<LoadOptions>();
// Kies het KeepLocked gedrag — het presentiebestand blijft vergrendeld gedurende de levensduur van
// de Presentation‑instantie, maar het hoeft niet in het geheugen geladen te worden of gekopieerd naar een tijdelijk bestand.
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);

// De grote presentatie is geladen en kan worden gebruikt, terwijl het geheugenverbruik laag blijft.

// Breng wijzigingen aan in de presentatie.
presentation->get_Slide(0)->set_Name(u"Large presentation");

// Sla de presentatie op in een ander bestand. Het geheugenverbruik blijft laag tijdens deze bewerking.
presentation->Save(u"LargePresentation-copy.pptx", SaveFormat::Pptx);

// Doe dit niet! Er wordt een I/O‑exception gegooid omdat het bestand vergrendeld blijft totdat het presentatiedobject wordt vrijgegeven.
File::Delete(filePath);

presentation->Dispose();

// Het is hier wel toegestaan. Het bronbestand is niet langer vergrendeld door het presentatiedobject.
File::Delete(filePath);

Externe bronnen beheren

Aspose.Slides levert de IResourceLoadingCallback‑interface waarmee u externe bronnen kunt beheren. Het volgende C++‑codefragment laat zien hoe u de IResourceLoadingCallback‑interface gebruikt:

class ImageLoadingHandler : public IResourceLoadingCallback
{
public:
    ResourceLoadingAction ResourceLoading(SharedPtr<IResourceLoadingArgs> args) override
    {
        if (args->get_OriginalUri().EndsWith(u".jpg"))
        {
            try
            {
                // Laad een vervangende afbeelding.
                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"))
        {
            // Stel een vervangende URL in.
            args->set_Uri(u"http://www.google.com/images/logos/ps_logo2.png");
            return ResourceLoadingAction::Default;
        }

        // Sla alle andere afbeeldingen over.
        return ResourceLoadingAction::Skip;
    }
};
auto loadOptions = MakeObject<LoadOptions>();
loadOptions->set_ResourceLoadingCallback(MakeObject<ImageLoadingHandler>());

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

Presentaties laden zonder ingebedde binaire objecten

A PowerPoint‑presentatie kan de volgende typen ingebedde binaire objecten bevatten:

Met de ILoadOptions::set_DeleteEmbeddedBinaryObjects‑methode kunt u een presentatie laden zonder enige ingebedde binaire objecten.

Deze methode is handig om potentieel kwaadaardige binaire inhoud te verwijderen. Het volgende C++‑codefragment demonstreert hoe u een presentatie laadt zonder enige ingebedde binaire inhoud:

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

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

// Voer bewerkingen uit op de presentatie.

presentation->Dispose();

FAQ

Hoe kan ik zien dat een bestand beschadigd is en niet kan worden geopend?

U krijgt tijdens het laden een parse‑/formatvalidatie‑exception. Dergelijke fouten vermelden vaak een ongeldige ZIP‑structuur of beschadigde PowerPoint‑records.

Wat gebeurt er als vereiste lettertypen ontbreken bij het openen?

Het bestand wordt geopend, maar later kan bij rendering/export een vervanging van lettertypen plaatsvinden. Configureer lettertype‑vervangingen of voeg de vereiste lettertypen toe aan de runtime‑omgeving.

Wat gebeurt er met ingebedde media (video/audio) bij het openen?

Ze worden beschikbaar als presentatieresources. Als media via externe paden worden gerefereerd, zorg er dan voor dat die paden toegankelijk zijn in uw omgeving; anders kan bij rendering/export de media worden weggelaten.