Pobieranie i aktualizacja informacji o prezentacji w Javie
Przegląd
Aspose.Slides może zidentyfikować format prezentacji i odczytać metadane dokumentu bez tworzenia pełnego modelu obiektowego prezentacji. Jest to przydatne, gdy trzeba sklasyfikować pliki, stworzyć inwentaryzację lub sprawdzić właściwości przed podjęciem decyzji o załadowaniu i przetworzeniu zawartości prezentacji.
Ten artykuł demonstruje lekką inspekcję przy użyciu PresentationFactory oraz IPresentationInfo, a także ukierunkowane aktualizacje przy użyciu IDocumentProperties.
Sprawdź format prezentacji
Jeśli masz już załadowaną prezentację, zobacz Determine the Original Presentation Format dla wykrywania po załadowaniu i ograniczeń starszych strumieni PPT, PPS i POT.
Użyj PresentationFactory.getPresentationInfo aby sprawdzić plik bez tworzenia instancji Presentation. Metoda IPresentationInfo.getLoadFormat raportuje wykryty format, taki jak PPTX, PPT lub ODP.
import com.aspose.slides.IPresentationInfo;
import com.aspose.slides.LoadFormat;
import com.aspose.slides.PresentationFactory;
String[] fileNames = { "pres.pptx", "pres.ppt", "pres.odp" };
for (String fileName : fileNames) {
IPresentationInfo presentationInfo = PresentationFactory.getInstance().getPresentationInfo(fileName);
int loadFormat = presentationInfo.getLoadFormat();
String formatName = "Other (" + loadFormat + ")";
if (loadFormat == LoadFormat.Pptx) {
formatName = "PPTX";
} else if (loadFormat == LoadFormat.Ppt) {
formatName = "PPT";
} else if (loadFormat == LoadFormat.Odp) {
formatName = "ODP";
}
System.out.println(fileName + ": " + formatName);
}
Zbuduj lekką inwentaryzację prezentacji
Kiedy przetwarzasz wiele plików prezentacji, możesz potrzebować zwartej inwentaryzacji w celu walidacji, indeksowania lub systemu zarządzania dokumentami. W takim scenariuszu użyj PresentationFactory.getPresentationInfo aby uzyskać obiekt IPresentationInfo, a następnie wywołaj IPresentationInfo.readDocumentProperties aby odczytać metadane dokumentu. To podejście nie tworzy instancji Presentation ani nie wymaga przeglądania pełnego modelu obiektowego prezentacji.
Rozszerzone właściwości udostępniane przez IDocumentProperties zapewniają następujące wartości inwentaryzacji:
| Metoda | Wartość inwentaryzacji |
|---|---|
| getSlides | Całkowita liczba slajdów. |
| getHiddenSlides | Liczba ukrytych slajdów. |
| getNotes | Liczba slajdów zawierających notatki. |
| getParagraphs | Całkowita liczba akapitów, jeśli dostępna. |
| getWords | Całkowita liczba słów. |
| getMultimediaClips | Całkowita liczba klipów audio i wideo. |
Poniższy przykład odczytuje te wartości bez tworzenia obiektu Presentation i wypisuje zwartą inwentaryzację. Łączy także getHeadingPairs z getTitlesOfParts aby wyświetlić grupy zawartości, takie jak czcionki, motywy i tytuły slajdów.
import com.aspose.slides.IDocumentProperties;
import com.aspose.slides.IHeadingPair;
import com.aspose.slides.IPresentationInfo;
import com.aspose.slides.LoadFormat;
import com.aspose.slides.PresentationFactory;
import java.nio.file.Paths;
String filePath = "sample.pptx";
IPresentationInfo presentationInfo = PresentationFactory.getInstance().getPresentationInfo(filePath);
IDocumentProperties documentProperties = presentationInfo.readDocumentProperties();
int loadFormat = presentationInfo.getLoadFormat();
String formatName = "Other (" + loadFormat + ")";
if (loadFormat == LoadFormat.Pptx) {
formatName = "PPTX";
} else if (loadFormat == LoadFormat.Ppt) {
formatName = "PPT";
} else if (loadFormat == LoadFormat.Odp) {
formatName = "ODP";
}
System.out.println("File: " + Paths.get(filePath).getFileName());
System.out.println("Format: " + formatName);
System.out.println("Title: " + documentProperties.getTitle());
System.out.println("Author: " + documentProperties.getAuthor());
System.out.println("Statistics:");
System.out.println(" Slides: " + documentProperties.getSlides());
System.out.println(" Hidden slides: " + documentProperties.getHiddenSlides());
System.out.println(" Slides with notes: " + documentProperties.getNotes());
System.out.println(" Paragraphs: " + documentProperties.getParagraphs());
System.out.println(" Words: " + documentProperties.getWords());
System.out.println(" Multimedia clips: " + documentProperties.getMultimediaClips());
IHeadingPair[] headingPairs = documentProperties.getHeadingPairs();
String[] titlesOfParts = documentProperties.getTitlesOfParts();
headingPairs = headingPairs != null ? headingPairs : new IHeadingPair[0];
titlesOfParts = titlesOfParts != null ? titlesOfParts : new String[0];
int partIndex = 0;
if (headingPairs.length == 0 || titlesOfParts.length == 0) {
System.out.println("Content groups: not available");
} else {
System.out.println("Content groups:");
for (IHeadingPair headingPair : headingPairs) {
System.out.println(" " + headingPair.getName() + " (" + headingPair.getCount() + ")");
for (int partOffset = 0; partOffset < headingPair.getCount() && partIndex < titlesOfParts.length; partOffset++) {
System.out.println(" - " + titlesOfParts[partIndex]);
partIndex++;
}
}
if (partIndex < titlesOfParts.length) {
System.out.println(" Other parts:");
while (partIndex < titlesOfParts.length) {
System.out.println(" - " + titlesOfParts[partIndex]);
partIndex++;
}
}
}
Każdy IHeadingPair dostarcza nazwę grupy i liczbę elementów w tej grupie. IDocumentProperties.getTitlesOfParts zwraca płaską, uporządkowaną tablicę, więc przetwarzaj liczbę kolejnych tytułów określoną przez każdą parę nagłówka.
Przechowywane metadane i ograniczenia formatów
Właściwości inwentaryzacji zwracane przez IPresentationInfo.readDocumentProperties odzwierciedlają metadane dostępne w źródłowym dokumencie. Aspose.Slides nie ładuje i nie przegląda modelu obiektowego prezentacji, aby przeliczyć te wartości przy tym wywołaniu. Brakujące właściwości są reprezentowane wartościami domyślnymi, a przechowywane wartości mogą być nieaktualne, jeśli aplikacja ostatnio zapisująca plik nie zaktualizowała właściwości dokumentu.
- PPTX: Format zapewnia rozszerzone właściwości dokumentu dla liczby slajdów, notatek, ukrytych slajdów, akapitów, słów i multimediów, a także par nagłówków i tytułów części. Dostępność zależy od tego, które właściwości zostały zapisane przez twórcę dokumentu.
- PPT: Format binarny może przechowywać odpowiadające właściwości podsumowania dokumentu. Jeśli właściwość jest nieobecna lub nie została odświeżona przez twórcę dokumentu, Aspose.Slides zwraca jej zapisaną lub domyślną wartość zamiast obliczać ją na podstawie slajdów.
- ODP: Metadane OpenDocument dostarczają ogólne statystyki dokumentu, takie jak liczba stron, akapitów i słów, ale te wartości nie mapują się na wszystkie specyficzne dla PowerPointa rozszerzone właściwości. Metadane dotyczące ukrytych slajdów, notatek, multimediów, par nagłówków i tytułów części mogą być niedostępne, a właściwości inwentaryzacji mogą zwracać wartości domyślne. Nie traktuj wartości zerowej ani pustej tablicy jako ostatecznego dowodu, że odpowiadająca zawartość jest nieobecna.
Użyj lekkiego podejścia opartego na metadanych do inwentaryzacji i wstępnych kontroli. Załaduj prezentację i sprawdź jej żywy model obiektowy, gdy wynik musi odzwierciedlać zmiany w pamięci lub gdy potrzebujesz zweryfikować faktyczną zawartość prezentacji.
Aktualizuj właściwości prezentacji
Właściwości zwracane przez IPresentationInfo.readDocumentProperties mogą być również zmieniane bez tworzenia instancji Presentation. Zastosuj zmiany za pomocą IPresentationInfo.updateDocumentProperties, a następnie zapisz powiązaną prezentację metodą IPresentationInfo.writeBindedPresentation.
Poniższy obraz przedstawia oryginalne właściwości dokumentu prezentacji PowerPoint:

Poniższy przykład zmienia tytuł oraz czas ostatniego zapisu i zapisuje wynik do nowego pliku:
import com.aspose.slides.IDocumentProperties;
import com.aspose.slides.IPresentationInfo;
import com.aspose.slides.PresentationFactory;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.Date;
String sourceFile = "sample.pptx";
String outputFile = "sample_with_updated_properties.pptx";
IPresentationInfo presentationInfo = PresentationFactory.getInstance().getPresentationInfo(sourceFile);
IDocumentProperties documentProperties = presentationInfo.readDocumentProperties();
documentProperties.setTitle("Quarterly sales report");
documentProperties.setLastSavedTime(new Date());
presentationInfo.updateDocumentProperties(documentProperties);
try (OutputStream outputStream = new FileOutputStream(outputFile)) {
presentationInfo.writeBindedPresentation(outputStream);
}
Poniższy obraz przedstawia zaktualizowane właściwości dokumentu prezentacji PowerPoint:

Przydatne linki
W odniesieniu do powiązanych kontroli bezpieczeństwa i ustawień ochrony, zobacz następujące artykuły:
FAQ
Jak mogę sprawdzić, czy czcionki są osadzone i które to są?
Załaduj prezentację i użyj Presentation.getFontsManager. Wywołaj IFontsManager.getEmbeddedFonts aby uzyskać osadzone czcionki oraz IFontsManager.getFonts aby uzyskać czcionki używane w prezentacji. Porównaj oba wyniki, aby znaleźć czcionki wymagane do renderowania, które nie są osadzone.
Jak szybko stwierdzić, czy plik zawiera ukryte slajdy i ile ich jest?
Gdy przechowywane metadane dokumentu są wystarczające, odczytaj IDocumentProperties.getHiddenSlides poprzez PresentationFactory.getPresentationInfo i IPresentationInfo.readDocumentProperties. Jest to odpowiednie dla lekkiej inwentaryzacji. Jeśli prezentacja została zmodyfikowana w pamięci, przechowywane metadane mogą być niekompletne lub nieaktualne, lub potrzebujesz zweryfikować wartości bieżące – w takim wypadku iteruj przez Presentation.getSlides i sprawdź metodę ISlide.getHidden każdego slajdu.
Czy mogę wykryć, czy używany jest niestandardowy rozmiar i orientacja slajdu oraz czy różnią się od domyślnych?
Tak. Załaduj prezentację i wywołaj Presentation.getSlideSize. Użyj ISlideSize.getType, ISlideSize.getSize oraz ISlideSize.getOrientation aby porównać bieżące ustawienia z domyślnym zestawem i wymiarami.
Czy istnieje szybki sposób, aby sprawdzić, czy wykresy odwołują się do zewnętrznych źródeł danych?
Tak. Zlokalizuj każdy Chart i wywołaj IChartData.getDataSourceType. Dla zewnętrznego skoroszytu wywołaj IChartData.getExternalWorkbookPath. Typ źródła danych i ścieżka wskazują odwołanie zewnętrzne, ale weryfikacja dostępności celu wymaga osobnego sprawdzenia zasobów.
Jak mogę ocenić „ciężkie” slajdy, które mogą spowalniać renderowanie lub eksport do PDF?
Nie istnieje pojedyncza właściwość opisująca złożoność. Przeglądaj Presentation.getSlides i kolekcję IBaseSlide.getShapes każdego slajdu. Używaj liczby kształtów oraz obecności dużych obrazów, efektów, animacji czy multimediów jako wskaźników, a także przeprowadź reprezentatywny test renderingu lub eksportu, zanim uznasz slajd za potwierdzony wąskie gardło wydajności.