Pobieranie i aktualizacja informacji o prezentacji w systemie Android

Przegląd

Aspose.Slides może rozpoznać format prezentacji i odczytać metadane dokumentu bez tworzenia pełnego modelu obiektu 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 i 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 w celu wykrycia po załadowaniu oraz ograniczenia starszych strumieni PPT, PPS i POT.

Użyj PresentationFactory.getPresentationInfo do inspekcji pliku bez tworzenia instancji Presentation. Metoda IPresentationInfo.getLoadFormat zwraca 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) {
    IPPresentationInfo 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ć kompaktowej inwentaryzacji do 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 obiektu prezentacji.

Rozszerzone właściwości udostępniane przez IDocumentProperties zapewniają następujące wartości inwentaryzacyjne:

Metoda Wartość inwentarza
getSlides Łączna liczba slajdów.
getHiddenSlides Liczba ukrytych slajdów.
getNotes Liczba slajdów zawierających notatki.
getParagraphs Łączna liczba akapitów, jeśli dostępna.
getWords Łączna liczba słów.
getMultimediaClips Łączna liczba klipów audio i wideo.

Poniższy przykład odczytuje te wartości bez tworzenia obiektu Presentation i wypisuje zwartą inwentaryzację. Łączy również 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";
IPPresentationInfo 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 należy pobrać liczbę kolejnych tytułów określoną przez każdy nagłówek.

Przechowywane metadane i ograniczenia formatów

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 obiektu prezentacji, aby przeliczyć te wartości dla tego wywołania. Brakujące właściwości są reprezentowane wartościami domyślnymi, a zapisane wartości mogą być nieaktualne, jeśli aplikacja ostatnio zapisująca plik nie zaktualizowała ich właściwości dokumentu.

  • PPTX: Format udostępnia rozszerzone właściwości dokumentu dotyczące 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ólnych statystyk dokumentu, takich jak liczba stron, akapitów i słów, ale wartości te nie odpowiadają wszystkim rozszerzonym właściwościom specyficznym dla PowerPoint. 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 inwentaryzacyjne mogą zwracać wartości domyślne. Nie traktuj zerowej wartości 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 sprawdzeniach. Załaduj prezentację i sprawdź jej żywy model obiektu, gdy wynik musi odzwierciedlać zmiany w pamięci lub gdy trzeba zweryfikować faktyczną zawartość prezentacji.

Aktualizuj właściwości prezentacji

Właściwości zwracane przez IPresentationInfo.readDocumentProperties można również 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 obrazek przedstawia oryginalne właściwości dokumentu prezentacji PowerPoint.

Oryginalne właściwości dokumentu prezentacji PowerPoint

Poniższy przykład zmienia tytuł i czas ostatniego zapisu oraz 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 obrazek przedstawia zaktualizowane właściwości dokumentu prezentacji PowerPoint.

Zmienione właściwości dokumentu prezentacji PowerPoint

Przydatne linki

W celu uzyskania informacji o kontrolach bezpieczeństwa i ustawieniach 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 potrzebne do renderowania, które nie są osadzone.

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

Gdy przechowywane metadane dokumentu są wystarczające, odczytaj IDocumentProperties.getHiddenSlides za pomocą 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ć nieaktualne lub brakujące; w takim wypadku iteruj przez Presentation.getSlides i sprawdzaj metodę ISlide.getHidden każdego slajdu.

Czy mogę wykryć, czy użyto niestandardowego rozmiaru i orientacji 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 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 skoroszytu 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 osobnego sprawdzenia.

Jak ocenić „ciężkie” slajdy, które mogą spowalniać renderowanie lub eksport do PDF?

Nie istnieje pojedyncza właściwość określająca złożoność. Przejdź przez Presentation.getSlides oraz 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 sygnałów ostrzegawczych oraz zmierz reprezentatywny render lub eksport przed uznaniem slajdu za potwierdzony wąskie gardło wydajności.