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);
Info
Aby obejść niektóre ograniczenia przy pracy ze strumieniami, Aspose.Slides może kopiować zawartość strumienia. Ładowanie dużej prezentacji ze strumienia powoduje kopiowanie prezentacji i może spowolnić ładowanie. Dlatego, gdy musisz załadować dużą prezentację, zdecydowanie zalecamy użycie ścieżki do pliku prezentacji zamiast strumienia.
Podczas tworzenia prezentacji zawierającej duże obiekty (wideo, audio, obrazy wysokiej rozdzielczości itp.), możesz użyć BLOB management, aby zmniejszyć zużycie pamięci.
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:
- projekt VBA (dostępny przez Presentation.getVbaProject);
- osadzone dane obiektu OLE (dostępne przez OleEmbeddedDataInfo.getEmbeddedFileData);
- binarne dane kontroli ActiveX (dostępne przez Control.getActiveXControlBinary).
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.