Recupera e aggiona le informazioni sulla presentazione in Python tramite Java

Panoramica

Aspose.Slides può identificare il formato di una presentazione e leggere i metadati del documento senza creare un modello completo di oggetti della presentazione. Questo è utile quando è necessario classificare i file, creare un inventario o ispezionare le proprietà prima di decidere se caricare ed elaborare il contenuto della presentazione.

Gli esempi richiedono Aspose.Slides per Python tramite Java e un runtime Java compatibile. Ogni esempio avvia la JVM se non è già in esecuzione. Fornire i file di presentazione esistenti nei percorsi usati negli esempi.

Questo articolo dimostra l’ispezione leggera tramite PresentationFactory e PresentationInfo, nonché aggiornamenti mirati tramite DocumentProperties.

Verifica del formato di una presentazione

Usa PresentationFactory.getPresentationInfo per ispezionare un file senza creare un’istanza di Presentation. Il metodo PresentationInfo.getLoadFormat riporta il formato rilevato, ad esempio PPTX, PPT o 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}")

Crea un inventario leggero di presentazioni

Quando si elaborano molte presentazioni, può essere necessario un inventario compatto per convalida, indicizzazione o un sistema di gestione documentale. In questo scenario, usa PresentationFactory.getPresentationInfo per ottenere un oggetto PresentationInfo e poi chiama PresentationInfo.readDocumentProperties per leggere i metadati del documento. Questo approccio non crea un’istanza di Presentation né richiede di attraversare l’intero modello di oggetti della presentazione.

Le proprietà estese esposte da DocumentProperties forniscono i seguenti valori d’inventario:

Metodo Valore d’inventario
getSlides Numero totale di diapositive.
getHiddenSlides Numero di diapositive nascoste.
getNotes Numero di diapositive che contengono note.
getParagraphs Numero totale di paragrafi, quando disponibili.
getWords Numero totale di parole.
getMultimediaClips Numero totale di clip audio e video.

L’esempio seguente legge questi valori senza creare un oggetto Presentation e stampa un inventario compatto. Combina inoltre getHeadingPairs con getTitlesOfParts per visualizzare gruppi di contenuto come caratteri, temi e titoli delle diapositive.

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

Ogni HeadingPair fornisce un nome di gruppo e il numero di elementi in quel gruppo. DocumentProperties.getTitlesOfParts restituisce un array piatto e ordinato, quindi occorre consumare il numero di titoli consecutivi specificato da ciascuna coppia di intestazione.

Metadati archiviati e limitazioni di formato

Le proprietà d’inventario restituite da PresentationInfo.readDocumentProperties riflettono i metadati disponibili nel documento sorgente. Aspose.Slides non carica e attraversa il modello di oggetti della presentazione per ricalcolare questi valori per questa chiamata. Le proprietà mancanti sono rappresentate da valori predefiniti e i valori archiviati possono essere obsoleti se l’applicazione che ha salvato per ultima il file non ha aggiornato le proprietà del documento.

  • PPTX: Il formato fornisce proprietà documento estese per conteggi di diapositive, note, diapositive nascoste, paragrafi, parole e contenuti multimediali, nonché coppie di intestazioni e titoli di parti. La disponibilità dipende dalle proprietà scritte dal produttore del documento.
  • PPT: Il formato binario può memorizzare le corrispondenti proprietà di riepilogo del documento. Se una proprietà è assente o non è stata aggiornata dal produttore, Aspose.Slides restituisce il valore archiviato o predefinito anziché calcolarlo dalle diapositive.
  • ODP: I metadati OpenDocument forniscono statistiche generali del documento, come conteggi di pagine, paragrafi e parole, ma questi valori non corrispondono a tutte le proprietà estese specifiche di PowerPoint. Metadati su diapositive nascoste, note, contenuti multimediali, coppie di intestazioni e titoli di parti potrebbero non essere disponibili e le proprietà d’inventario possono restituire valori predefiniti. Non trattare un valore zero o un array vuoto come prova autorevole dell’assenza del relativo contenuto.

Utilizza l’approccio di metadati leggeri per inventari e controlli preliminari. Carica la presentazione e ispeziona il modello di oggetti live quando il risultato deve riflettere le modifiche in memoria o quando è necessario verificare il contenuto effettivo della presentazione.

Aggiornamento delle proprietà della presentazione

Le proprietà restituite da PresentationInfo.readDocumentProperties possono anche essere modificate senza creare un’istanza di Presentation. Applica le modifiche con PresentationInfo.updateDocumentProperties e quindi scrivi la presentazione collegata con PresentationInfo.writeBindedPresentation.

L’immagine seguente mostra le proprietà originali del documento.

Proprietà originali del documento della presentazione PowerPoint

L’esempio seguente cambia il titolo e l’ora dell’ultimo salvataggio e scrive il risultato in un nuovo file:

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()

L’immagine seguente mostra le proprietà del documento aggiornate.

Proprietà del documento modificate della presentazione PowerPoint

Per controlli di sicurezza correlati e impostazioni di protezione, vedere i seguenti articoli:

FAQ

Come posso verificare se i caratteri sono incorporati e quali sono?

Carica la presentazione e usa Presentation.getFontsManager. Chiama FontsManager.getEmbeddedFonts per ottenere i caratteri incorporati e FontsManager.getFonts per ottenere i caratteri utilizzati dalla presentazione. Confronta i due risultati per trovare i caratteri necessari al rendering ma non incorporati.

Come posso capire rapidamente se il file contiene diapositive nascoste e quante?

Quando i metadati del documento archiviati sono sufficienti, leggi DocumentProperties.getHiddenSlides tramite PresentationFactory.getPresentationInfo e PresentationInfo.readDocumentProperties. È adatto per un inventario leggero. Se la presentazione è stata modificata in memoria, i metadati archiviati potrebbero mancare o essere obsoleti, oppure è necessario verificare i valori live; in tal caso itera attraverso Presentation.getSlides e ispeziona il metodo Slide.getHidden di ciascuna diapositiva.

Posso rilevare se è stata usata una dimensione e un’orientazione personalizzate della diapositiva e se differiscono dai valori predefiniti?

Sì. Carica la presentazione e chiama Presentation.getSlideSize. Usa SlideSize.getType, SlideSize.getSize e SlideSize.getOrientation per confrontare le impostazioni correnti con i preset e le dimensioni previste.

Esiste un modo rapido per vedere se i grafici fanno riferimento a fonti dati esterne?

Sì. Individua ogni Chart e chiama ChartData.getDataSourceType. Per una cartella di lavoro esterna, chiama ChartData.getExternalWorkbookPath. Il tipo di fonte dati e il percorso identificano un riferimento esterno, ma verificare la disponibilità della destinazione richiede un controllo di risorsa separato.

Come posso valutare le diapositive “pesanti” che potrebbero rallentare il rendering o l’esportazione PDF?

Non esiste una singola proprietà di complessità. Scorri Presentation.getSlides e la collezione BaseSlide.getShapes di ciascuna diapositiva. Usa i conteggi di forme e la presenza di immagini grandi, effetti, animazioni o contenuti multimediali come segnali di screening, e misura un rendering o un’esportazione rappresentativa prima di considerare una diapositiva come colla di bottiglia delle prestazioni.