Otwieranie prezentacji w .NET

Wstęp

Poza tworzeniem prezentacji PowerPoint od podstaw, Aspose.Slides umożliwia także otwieranie istniejących prezentacji. Po załadowaniu prezentacji możesz odczytać informacje o niej, edytować treść 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ż jej ścieżkę do pliku w konstruktorze.

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

// Utwórz instancję klasy Presentation i przekaż ścieżkę do pliku do jej konstruktora.
using (Presentation presentation = new Presentation("Sample.pptx"))
{
    // Wypisz całkowitą liczbę slajdów w prezentacji.
    System.Console.WriteLine(presentation.Slides.Count);
}

Otwieranie prezentacji chronionych hasłem

Gdy musisz otworzyć prezentację zabezpieczoną hasłem, przekaż hasło przez właściwość Password klasy LoadOptions, aby odszyfrować i załadować plik. Poniższy kod w C# demonstruje tę operację:

LoadOptions loadOptions = new LoadOptions {Password = "YOUR_PASSWORD"};
using (Presentation presentation = new Presentation("Sample.pptx", loadOptions))
{
    // Wykonaj operacje na odszyfrowanej prezentacji.
}

Otwieranie dużych prezentacji

Aspose.Slides oferuje opcje — w szczególności właściwość BlobManagementOptions w klasie LoadOptions — które pomagają ładować duże prezentacje.

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

const string filePath = "LargePresentation.pptx";

LoadOptions loadOptions = new LoadOptions
{
    BlobManagementOptions = 
    {
        // Wybierz zachowanie KeepLocked — plik prezentacji pozostanie zablokowany przez okres życia 
        // instancji Presentation, ale nie musi być ładowany do pamięci ani kopiowany do pliku tymczasowego.
        PresentationLockingBehavior = PresentationLockingBehavior.KeepLocked,
        IsTemporaryFilesAllowed = true,
        MaxBlobsBytesInMemory = 10 * 1024 * 1024 // 10 MB
    }
};

using (Presentation presentation = new 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.Slides[0].Name = "Large presentation";

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

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

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

Kontrola zasobów zewnętrznych

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

LoadOptions loadOptions = new LoadOptions();
loadOptions.ResourceLoadingCallback = new ImageLoadingHandler();

Presentation presentation = new Presentation("Sample.pptx", loadOptions);
public class ImageLoadingHandler : IResourceLoadingCallback
{
    public ResourceLoadingAction ResourceLoading(IResourceLoadingArgs args)
    {
        if (args.OriginalUri.EndsWith(".jpg"))
        {
            try
            {
                // Wczytaj zastępczy obraz.
                byte[] imageData = File.ReadAllBytes("aspose-logo.jpg");
                args.SetData(imageData);
                return ResourceLoadingAction.UserProvided;
            }
            catch (Exception)
            {
                return ResourceLoadingAction.Skip;
            }
        }
        else if (args.OriginalUri.EndsWith(".png"))
        {
            // Ustaw zastępczy URL.
            args.Uri = "http://www.google.com/images/logos/ps_logo2.png";
            return ResourceLoadingAction.Default;
        }

        // Pomiń wszystkie inne obrazy.
        return ResourceLoadingAction.Skip;
    }
}

Ładowanie prezentacji bez osadzonych obiektów binarnych

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

Używając właściwości ILoadOptions.DeleteEmbeddedBinaryObjects możesz załadować prezentację bez jakichkolwiek osadzonych obiektów binarnych.

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

LoadOptions loadOptions = new LoadOptions()
{
    DeleteEmbeddedBinaryObjects = true
}

using (Presentation presentation = new Presentation("malware.ppt", loadOptions))
{
    // Wykonaj operacje na prezentacji.
}

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 zawierają informację o nieprawidłowej strukturze ZIP lub uszkodzonych rekordach PowerPoint.

Co się stanie, jeśli przy otwieraniu brakuje wymaganych czcionek?

Plik zostanie otwarty, ale późniejsze renderowanie/eksport może podmienić czcionki. Skonfiguruj zastępowanie czcionek lub dodaj wymagane czcionki do środowiska uruchomieniowego.

A co z osadzonymi mediami (wideo/audio) przy otwieraniu?

Stają się one dostępne jako zasoby prezentacji. Jeśli media są odwoływane za pomocą ścieżek zewnętrznych, upewnij się, że te ścieżki są dostępne w Twoim środowisku; w przeciwnym razie renderowanie/eksport może pominąć media.