Pobieranie i aktualizacja informacji o prezentacji w Pythonie za pośrednictwem Java

Przegląd

Aspose.Slides może zidentyfikować format prezentacji i odczytać jej metadane dokumentu bez tworzenia pełnego modelu obiektu prezentacji. Jest to przydatne, gdy trzeba klasyfikować pliki, tworzyć inwentaryzację lub sprawdzać właściwości przed podjęciem decyzji o załadowaniu i przetworzeniu zawartości prezentacji.

Przykłady wymagają Aspose.Slides for Python via Java oraz kompatybilnego środowiska uruchomieniowego Java. Każdy przykład uruchamia JVM, jeśli nie jest już uruchomiona. Dostarcz istniejące pliki prezentacji pod ścieżkami używanymi w przykładach.

Ten artykuł demonstruje lekką inspekcję przy użyciu PresentationFactory oraz PresentationInfo, a także ukierunkowane aktualizacje przy użyciu DocumentProperties.

Sprawdź format prezentacji

Jeśli masz już załadowaną prezentację, zobacz Determine the Original Presentation Format w celu wykrycia po załadowaniu oraz ograniczeń formatów legacy PPT, PPS i POT.

Użyj PresentationFactory.getPresentationInfo, aby sprawdzić plik bez tworzenia instancji Presentation. Metoda PresentationInfo.getLoadFormat zgłasza wykryty format, taki jak PPTX, PPT lub ODP.

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import LoadFormat, PresentationFactory

file_names = ["pres.pptx", "pres.ppt", "pres.odp"]

for file_name in file_names:
    presentation_info = PresentationFactory.getInstance().getPresentationInfo(file_name)
    load_format = presentation_info.getLoadFormat()
    format_name = f"Other ({load_format})"

    if load_format == LoadFormat.Pptx:
        format_name = "PPTX"
    elif load_format == LoadFormat.Ppt:
        format_name = "PPT"
    elif load_format == LoadFormat.Odp:
        format_name = "ODP"

    print(f"{file_name}: {format_name}")

Zbuduj lekką inwentaryzację prezentacji

Podczas przetwarzania wielu plików prezentacji możesz potrzebować kompaktowej inwentaryzacji do walidacji, indeksowania lub systemu zarządzania dokumentami. W tym scenariuszu użyj PresentationFactory.getPresentationInfo, aby uzyskać obiekt PresentationInfo, a następnie wywołaj PresentationInfo.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 DocumentProperties zapewniają następujące wartości inwentaryzacji:

Metoda Wartość inwentaryzacji
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.

Następujący przykład odczytuje te wartości bez tworzenia obiektu Presentation i wypisuje zwartą inwentaryzację. Łączy także getHeadingPairs z getTitlesOfParts, aby wyświetlić grupy treści, takie jak czcionki, motywy i tytuły slajdów.

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from pathlib import Path
from asposeslides.api import LoadFormat, PresentationFactory

file_path = "sample.pptx"
presentation_info = PresentationFactory.getInstance().getPresentationInfo(file_path)
document_properties = presentation_info.readDocumentProperties()

load_format = presentation_info.getLoadFormat()
format_name = f"Other ({load_format})"

if load_format == LoadFormat.Pptx:
    format_name = "PPTX"
elif load_format == LoadFormat.Ppt:
    format_name = "PPT"
elif load_format == LoadFormat.Odp:
    format_name = "ODP"

print(f"File: {Path(file_path).name}")
print(f"Format: {format_name}")
print(f"Title: {document_properties.getTitle()}")
print(f"Author: {document_properties.getAuthor()}")
print("Statistics:")
print(f"  Slides: {document_properties.getSlides()}")
print(f"  Hidden slides: {document_properties.getHiddenSlides()}")
print(f"  Slides with notes: {document_properties.getNotes()}")
print(f"  Paragraphs: {document_properties.getParagraphs()}")
print(f"  Words: {document_properties.getWords()}")
print(f"  Multimedia clips: {document_properties.getMultimediaClips()}")

heading_pairs = document_properties.getHeadingPairs()
titles_of_parts = document_properties.getTitlesOfParts()
heading_pairs = heading_pairs if heading_pairs is not None else []
titles_of_parts = titles_of_parts if titles_of_parts is not None else []
part_index = 0

if len(heading_pairs) == 0 or len(titles_of_parts) == 0:
    print("Content groups: not available")
else:
    print("Content groups:")

    for heading_pair in heading_pairs:
        print(f"  {heading_pair.getName()} ({heading_pair.getCount()})")

        for part_offset in range(heading_pair.getCount()):
            if part_index >= len(titles_of_parts):
                break
            print(f"    - {titles_of_parts[part_index]}")
            part_index += 1

    if part_index < len(titles_of_parts):
        print("  Other parts:")

        while part_index < len(titles_of_parts):
            print(f"    - {titles_of_parts[part_index]}")
            part_index += 1

Każdy HeadingPair dostarcza nazwę grupy i liczbę elementów w tej grupie. DocumentProperties.getTitlesOfParts zwraca płaską, uporządkowaną tablicę, więc należy pobrać liczbę kolejnych tytułów określoną przez każdy heading pair.

Przechowywane metadane i ograniczenia formatów

Właściwości inwentaryzacji zwracane przez PresentationInfo.readDocumentProperties odzwierciedlają metadane dostępne w dokumencie źródłowym. Aspose.Slides nie ładuje i nie przegląda modelu obiektu prezentacji, aby ponownie obliczyć te wartości w 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łasnoś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 heading pairs 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 wartości te nie odpowiadają każdej specyficznej dla PowerPointa rozszerzonej właściwości. Metadane dotyczące ukrytych slajdów, notatek, multimediów, heading-pair i part-title 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 treść jest nieobecna.

Użyj podejścia opartego na lekkich metadanych do inwentaryzacji i wstępnych kontroli. Załaduj prezentację i sprawdź jej żywy model obiektu, gdy wynik musi odzwierciedlać zmiany w pamięci lub gdy potrzebujesz zweryfikować rzeczywistą zawartość prezentacji.

Aktualizuj właściwości prezentacji

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

Następujący obrazek pokazuje oryginalne właściwości dokumentu prezentacji PowerPoint:

Oryginalne właściwości dokumentu prezentacji PowerPoint

Następujący przykład zmienia tytuł i czas ostatniego zapisu oraz zapisuje wynik do nowego pliku:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import PresentationFactory
from java.io import FileOutputStream
from java.util import Date

source_file = "sample.pptx"
output_file = "sample_with_updated_properties.pptx"
presentation_info = PresentationFactory.getInstance().getPresentationInfo(source_file)
document_properties = presentation_info.readDocumentProperties()

document_properties.setTitle("Quarterly sales report")
last_saved_time = Date()
document_properties.setLastSavedTime(last_saved_time)

presentation_info.updateDocumentProperties(document_properties)
output_stream = FileOutputStream(output_file)
try:
    presentation_info.writeBindedPresentation(output_stream)
finally:
    output_stream.close()

Następujący obrazek pokazuje zaktualizowane właściwości dokumentu:

Zmienione właściwości dokumentu prezentacji PowerPoint

Przydatne linki

Dla 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 FontsManager.getEmbeddedFonts, aby uzyskać listę osadzonych czcionek oraz FontsManager.getFonts, aby uzyskać czcionki używane w prezentacji. Porównaj oba wyniki, aby znaleźć czcionki potrzebne do renderowania, ale nieosadzone.

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

Kiedy przechowywane metadane dokumentu są wystarczające, odczytaj DocumentProperties.getHiddenSlides za pomocą PresentationFactory.getPresentationInfo i PresentationInfo.readDocumentProperties. To rozwiązanie nadaje się do lekkiej inwentaryzacji. Jeśli prezentacja została zmodyfikowana w pamięci, przechowywane metadane mogą być brakujące lub nieaktualne, lub gdy konieczne jest zweryfikowanie bieżących wartości, iteruj przez Presentation.getSlides i sprawdź metodę Slide.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 SlideSize.getType, SlideSize.getSize oraz SlideSize.getOrientation, aby porównać bieżące ustawienia z oczekiwanym szablonem i wymiarami.

Czy istnieje szybki sposób, aby sprawdzić, czy wykresy odwołują się do zewnętrznych źródeł danych?

Tak. Znajdź każdy Chart i wywołaj ChartData.getDataSourceType. W przypadku zewnętrznego skoroszytu wywołaj ChartData.getExternalWorkbookPath. Typ źródła danych i ścieżka identyfikują zewnętrzne odwołanie, 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ę BaseSlide.getShapes każdego slajdu. Użyj liczby kształtów oraz obecności dużych obrazów, efektów, animacji lub multimediów jako wskaźników, i zmierz reprezentatywne renderowanie lub eksport, zanim uznasz slajd za potwierdzony wąski gardło wydajności.