Otwieranie prezentacji na Androidzie
Wprowadzenie
Poza tworzeniem prezentacji PowerPoint od podstaw, Aspose.Slides umożliwia także otwieranie istniejących prezentacji. Po załadowaniu prezentacji możesz pobrać informacje o niej, 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 języku Java pokazuje, jak otworzyć prezentację i uzyskać liczbę slajdów:
// Utwórz instancję klasy Presentation i przekaż ścieżkę do pliku do jej konstruktora.
Presentation presentation = new Presentation("Sample.pptx");
try {
// Wypisz całkowitą liczbę slajdów w prezentacji.
System.out.println(presentation.getSlides().size());
} finally {
presentation.dispose();
}
Otwieranie zabezpieczonych hasłem prezentacji
Gdy musisz otworzyć prezentację zabezpieczoną hasłem, przekaż hasło poprzez metodę setPassword klasy LoadOptions, aby odszyfrować i załadować ją. Poniższy kod w języku Java demonstruje tę operację:
LoadOptions loadOptions = new LoadOptions();
loadOptions.setPassword("YOUR_PASSWORD");
Presentation 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 w języku Java demonstruje ładowanie dużej prezentacji (na przykład 2 GB):
final String filePath = "LargePresentation.pptx";
LoadOptions 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 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("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 prezentacji.
//Files.delete(Paths.get(filePath));
} finally {
presentation.dispose();
}
// Można to zrobić tutaj. Plik źródłowy nie jest już zablokowany przez obiekt prezentacji.
Files.delete(Paths.get(filePath));
Info
Aby obejść pewne ograniczenia przy pracy ze strumieniami, Aspose.Slides może kopiować zawartość strumienia. Ładowanie dużej prezentacji ze strumienia powoduje skopiowanie 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 zewnętrznych zasobów
Aspose.Slides udostępnia interfejs IResourceLoadingCallback, który pozwala zarządzać zewnętrznymi zasobami. Poniższy kod w języku Java pokazuje, jak używać interfejsu IResourceLoadingCallback:
LoadOptions loadOptions = new LoadOptions();
loadOptions.setResourceLoadingCallback(new ImageLoadingHandler());
Presentation presentation = new Presentation("Sample.pptx", loadOptions);
class ImageLoadingHandler implements IResourceLoadingCallback {
public int resourceLoading(IResourceLoadingArgs args) {
if (args.getOriginalUri().endsWith(".jpg")) {
try {
// Załaduj zamienny obraz.
byte[] imageData = getImageBytes("aspose-logo.jpg"); // Użyj dowolnej metody, aby uzyskać bajty
args.setData(imageData);
return ResourceLoadingAction.UserProvided;
} catch (RuntimeException ex) {
return ResourceLoadingAction.Skip;
} catch (IOException ex) {
ex.printStackTrace();
}
} else if (args.getOriginalUri().endsWith(".png")) {
// Ustaw zamienny adres URL.
args.setUri("http://www.google.com/images/logos/ps_logo2.png");
return ResourceLoadingAction.Default;
}
// Pomiń wszystkie pozostałe obrazy.
return ResourceLoadingAction.Skip;
}
}
Ł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 IPresentation.getVbaProject);
- Osadzone dane obiektu OLE (dostępne przez IOleEmbeddedDataInfo.getEmbeddedFileData);
- Danych binarnych kontrolki ActiveX (dostępne przez IControl.getActiveXControlBinary).
Korzystając z metody ILoadOptions.setDeleteEmbeddedBinaryObjects, 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 języku Java demonstruje, jak załadować prezentację bez jakiejkolwiek osadzonej treści binarnej:
LoadOptions loadOptions = new LoadOptions();
loadOptions.setDeleteEmbeddedBinaryObjects(true);
Presentation presentation = new Presentation("malware.ppt", loadOptions);
try {
// Wykonaj operacje na prezentacji.
} finally {
presentation.dispose();
}
FAQ
Jak mogę stwierdzić, że plik jest uszkodzony i nie może być otwarty?
Podczas ładowania otrzymasz wyjątek walidacji parsowania/formatu. Takie błędy często wskazują na nieprawidłową strukturę ZIP lub uszkodzone rekordy PowerPoint.
Co się stanie, jeśli wymagane czcionki są brakujące podczas otwierania?
Plik zostanie otwarty, ale później podczas renderowania/eksportu mogą zostać zastąpione czcionki. Skonfiguruj zamiany czcionek lub dodaj wymagane czcionki do środowiska uruchomieniowego.
A co z osadzonymi mediami (wideo/audio) podczas otwierania?
Stają się dostępne jako zasoby prezentacji. Jeśli media są odwoływane przez zewnętrzne ścieżki, upewnij się, że są dostępne w Twoim środowisku; w przeciwnym razie podczas renderowania/eksportu media mogą zostać pominięte.