Pobieranie i aktualizacja informacji o prezentacji w języku Java

Przegląd

Aspose.Slides może zidentyfikować format prezentacji i odczytać jej metadane dokumentu bez tworzenia pełnego modelu obiektowego prezentacji. Jest to przydatne, gdy trzeba sklasyfikować pliki, utworzyć inwentaryzację lub sprawdzić właściwości przed podjęciem decyzji o wczytaniu i przetworzeniu zawartości prezentacji.

Ten artykuł demonstruje lekką inspekcję za pomocą PresentationFactory i IPresentationInfo, a także ukierunkowane aktualizacje za pomocą IDocumentProperties.

Sprawdzenie formatu prezentacji

Użyj PresentationFactory.getPresentationInfo aby sprawdzić plik bez tworzenia instancji Presentation. Metoda IPresentationInfo.getLoadFormat zgłasza 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);
}

Budowanie lekkiej inwentaryzacji prezentacji

Podczas przetwarzania wielu plików prezentacji możesz potrzebować kompaktowej inwentaryzacji w celach walidacji, indeksowania lub systemu zarządzania dokumentami. W tym 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 dostarczają 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, gdy 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 w celu wyświetlenia grup treści, takich 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 oraz liczbę elementów w tej grupie. IDocumentProperties.getTitlesOfParts zwraca płaską, uporządkowaną tablicę, więc należy pobrać liczbę kolejnych tytułów określoną przez każdy nagłówek.

Przechowywane metadane i ograniczenia formatu

Właściwości inwentaryzacyjne 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 w ramach tego wywołania. Brakujące właściwości są reprezentowane przez wartości domyślne, a przechowywane wartości mogą być nieaktualne, jeśli aplikacja ostatnio zapisująca plik nie zaktualizowała właściwości dokumentu.

  • PPTX: Format udostępnia rozszerzone właściwości dokumentu obejmujące liczbę 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 przechowywaną 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ą na wszystkie rozszerzone właściwości specyficzne dla PowerPointa. Metadane dotyczące ukrytych slajdów, slajdów z notatkami, multimediów, par nagłówków i tytułów części mogą być niedostępne, a właściwości inwentaryzacyjne mogą zwracać wartości domyślne. Nie traktuj wartości zero ani pustej tablicy jako ostatecznego dowodu na brak odpowiadającej treści.

Używaj lekkiego podejścia opartego na metadanych przy tworzeniu inwentaryzacji i wstępnych kontroli. Wczytaj prezentację i sprawdź jej bieżący model obiektowy, gdy wynik musi odzwierciedlać zmiany w pamięci lub gdy potrzebujesz zweryfikować faktyczną zawartość prezentacji.

Aktualizacja właściwości prezentacji

Właściwości zwracane przez IPresentationInfo.readDocumentProperties można także zmienić bez tworzenia instancji Presentation. Zastosuj zmiany za pomocą IPresentationInfo.updateDocumentProperties, a następnie zapisz powiązaną prezentację przy użyciu IPresentationInfo.writeBindedPresentation.

Poniższy obraz przedstawia pierwotne właściwości dokumentu.

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.

Zmienione właściwości dokumentu prezentacji PowerPoint

Przydatne linki

W celu uzyskania informacji o powiązanych kontroli bezpieczeństwa i ustawieniach ochrony, zobacz następujące artykuły:

FAQ

Jak mogę sprawdzić, czy czcionki są osadzone i które to są?

Wczytaj 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 zostały osadzone.

Jak szybko sprawdzić, czy plik ma ukryte slajdy i ile ich jest?

Gdy przechowywane metadane dokumentu są wystarczające, odczytaj IDocumentProperties.getHiddenSlides przy pomocy PresentationFactory.getPresentationInfo i IPresentationInfo.readDocumentProperties. To rozwiązanie nadaje się do lekkiej inwentaryzacji. Jeśli prezentacja została zmodyfikowana w pamięci, przechowywane metadane mogą być niekompletne lub nieaktualne, lub gdy potrzebujesz zweryfikować wartości w toku, przeglądaj Presentation.getSlides i sprawdzaj metodę ISlide.getHidden każdego slajdu.

Czy mogę wykryć, czy używany jest niestandardowy rozmiar i orientacja slajdu oraz czy różnią się od wartości domyślnych?

Tak. Wczytaj prezentację i wywołaj Presentation.getSlideSize. Użyj ISlideSize.getType, ISlideSize.getSize oraz ISlideSize.getOrientation aby porównać bieżące ustawienia z oczekiwanymi presetami 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 arkusza wywołaj IChartData.getExternalWorkbookPath. Typ źródła danych i ścieżka identyfikują odwołanie zewnętrzne, ale weryfikacja dostępności docelowego zasobu wymaga oddzielnego sprawdzenia.

Jak mogę ocenić ‘ciężkie’ slajdy, które mogą spowolnić renderowanie lub eksport do PDF?

Nie istnieje pojedyncza właściwość określająca złożoność. Przeglądaj Presentation.getSlides oraz kolekcję IBaseSlide.getShapes każdego slajdu. Zwróć uwagę na liczbę kształtów oraz obecność dużych obrazów, efektów, animacji lub multimediów jako sygnały ostrzegawcze i zmierz reprezentacyjne renderowanie lub eksport, zanim uznasz slajd za potwierdzony wąski gardło wydajności.