Otwieranie prezentacji w PHP

Wprowadzenie

Poza tworzeniem prezentacji PowerPoint od podstaw, Aspose.Slides pozwala również otwierać istniejące prezentacje. Po załadowaniu prezentacji możesz pobrać informacje o niej, edytować zawartość slajdów, dodawać nowe slajdy, usuwać istniejące i wiele innych.

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 PHP pokazuje, jak otworzyć prezentację i uzyskać liczbę slajdów:

// Utwórz instancję klasy Presentation i przekaż ścieżkę do pliku do jej konstruktora.
$presentation = new Presentation("Sample.pptx");
try {
    // Wyświetl całkowitą liczbę slajdów w prezentacji.
    echo($presentation->getSlides()->size());
} finally {
    $presentation->dispose();
}

Otwieranie prezentacji zabezpieczonych hasłem

Kiedy potrzebujesz otworzyć prezentację zabezpieczoną hasłem, przekaż hasło metodą setPassword klasy LoadOptions, aby odszyfrować i załadować ją. Poniższy kod PHP demonstruje tę operację:

$loadOptions = new LoadOptions();
$loadOptions->setPassword("YOUR_PASSWORD");

$presentation = new Presentation("Sample.pptx", $loadOptions);
try {
    // Wykonaj operacje na odszyfrowanej prezentacji.
} finally {
    $presentation->dispose();
}

Otwieranie dużych prezentacji

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

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

$filePath = "LargePresentation.pptx";

$loadOptions = new 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->getBlobManagementOptions()->setPresentationLockingBehavior(PresentationLockingBehavior::KeepLocked);
$loadOptions->getBlobManagementOptions()->setTemporaryFilesAllowed(true);
$loadOptions->getBlobManagementOptions()->setMaxBlobsBytesInMemory(10 * 1024 * 1024); // 10 MB

$presentation = new Presentation($filePath, $loadOptions);
try {
    // 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->getSlides()->get_Item(0)->setName("Very 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 do momentu zwolnienia obiektu prezentacji.
	//unlink($filePath);
} finally {
    $presentation->dispose();
}
// Można to zrobić tutaj. Plik źródłowy nie jest już zablokowany przez obiekt prezentacji.
unlink($filePath);

Kontrola zasobów zewnętrznych

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

class ImageLoadingHandler {
    function resourceLoading($args) {
        if (java_values($args->getOriginalUri()->endsWith(".jpg"))) {
            // Załaduj zastępczy obraz.
			$bytes = file_get_contents("aspose-logo.jpg");
			$javaByteArray = java_values($bytes);
            $args->setData($javaByteArray);
            return ResourceLoadingAction::UserProvided;
        } else if (java_values($args->getOriginalUri()->endsWith(".png"))) {
            // Ustaw zastępczy adres URL.
            $args->setUri("http://www.google.com/images/logos/ps_logo2.png");
            return ResourceLoadingAction::Default;
        }
        // Pomiń wszystkie pozostałe obrazy.
        return ResourceLoadingAction::Skip;
    }
}

$loadingHandler = java_closure(new ImageLoadingHandler(), null, java("com.aspose.slides.IResourceLoadingCallback"));

$loadOptions = new LoadOptions();
$loadOptions->setResourceLoadingCallback($loadingHandler);

$presentation = new Presentation("Sample.pptx", $loadOptions);

Ładowanie prezentacji bez osadzonych obiektów binarnych

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

Korzystając z metody LoadOptions.setDeleteEmbeddedBinaryObjects, możesz załadować prezentację bez żadnych osadzonych obiektów binarnych.

Ta metoda jest przydatna do usuwania potencjalnie złośliwej treści binarnej. Poniższy kod PHP demonstruje, jak załadować prezentację bez żadnych osadzonych obiektów binarnych:

$loadOptions = new LoadOptions();
$loadOptions->setDeleteEmbeddedBinaryObjects(true);

$presentation = new Presentation("malware.ppt", $loadOptions);
try {
    // Wykonaj operacje na prezentacji.
} finally {
    $presentation->dispose();
}

Najczęściej zadawane pytania

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

Podczas ładowania otrzymasz wyjątek związany z parsowaniem/validacją formatu. Takie błędy często wskazują na nieprawidłową strukturę ZIP lub uszkodzone rekordy PowerPoint.

Co się stanie, jeśli przy otwieraniu brakują wymagane czcionki?

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

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

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