Otwieranie prezentacji w Javie
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ę, zainstaluj klasę Prezentacja i przekaż ścieżkę do pliku w jej konstruktorze.
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 w jej konstruktorze.
Presentation presentation = new Presentation("Sample.pptx");
try {
// Wypisz łączną liczbę slajdów w prezentacji.
System.out.println(presentation.getSlides().size());
} finally {
presentation.dispose();
}
Otwieranie prezentacji zabezpieczonych hasłem
Gdy musisz otworzyć prezentację zabezpieczoną hasłem, przekaż hasło do metody 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 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 zgłoszony wyjątek I/O, ponieważ plik jest zablokowany, dopóki obiekt prezentacji nie zostanie zwolniony.
//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 skopiować 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 o wysokiej rozdzielczości itp.) możesz użyć Zarządzanie BLOB 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 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 {
// Wczytaj zamienny obraz.
byte[] imageData = Files.readAllBytes(new File("aspose-logo.jpg").toPath());
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 poprzez IPresentation.getVbaProject);
- Osadzone dane obiektu OLE (dostępne poprzez IOleEmbeddedDataInfo.getEmbeddedFileData);
- Binarny kod kontrolki ActiveX (dostępny poprzez 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 żadnych osadzonych treści binarnych:
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 zostać otwarty?
Podczas ładowania otrzymasz wyjątek parsowania/validacji formatu. Takie błędy często wskazują na nieprawidłową strukturę ZIP lub uszkodzone rekordy PowerPoint.
Co się stanie, jeśli podczas otwierania brakują wymagane czcionki?
Plik zostanie otwarty, ale później renderowanie/eksport może zastąpić czcionki. Skonfiguruj zamiany czcionek lub dodaj wymagane czcionki w środowisku uruchomieniowym.
Co z osadzonymi mediami (wideo/audio) podczas otwierania?
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.