Recupera e Aggiorna le Informazioni sulla Presentazione in PHP
Panoramica
Aspose.Slides può identificare il formato di una presentazione e leggere i metadati del documento senza creare un modello completo di oggetto presentazione. Questo è utile quando è necessario classificare file, creare un inventario o ispezionare le proprietà prima di decidere se caricare ed elaborare il contenuto della presentazione.
Questo articolo dimostra l’ispezione leggera tramite PresentationFactory e PresentationInfo, nonché aggiornamenti mirati tramite DocumentProperties.
Verificare il formato di una presentazione
Se hai già una presentazione caricata, consulta Determine the Original Presentation Format per la rilevazione dopo il caricamento e le limitazioni dei flussi legacy PPT, PPS e POT.
Usa PresentationFactory::getPresentationInfo per ispezionare un file senza creare un’istanza di Presentation. Il metodo PresentationInfo::getLoadFormat restituisce il formato rilevato, ad esempio PPTX, PPT o ODP.
use aspose\slides\LoadFormat;
use aspose\slides\PresentationFactory;
$fileNames = ["pres.pptx", "pres.ppt", "pres.odp"];
foreach ($fileNames as $fileName) {
$presentationInfo = PresentationFactory::getInstance()->getPresentationInfo($fileName);
$loadFormat = java_values($presentationInfo->getLoadFormat());
$formatName = "Other (" . $loadFormat . ")";
if ($loadFormat === LoadFormat::Pptx) {
$formatName = "PPTX";
} elseif ($loadFormat === LoadFormat::Ppt) {
$formatName = "PPT";
} elseif ($loadFormat === LoadFormat::Odp) {
$formatName = "ODP";
}
echo $fileName . ": " . $formatName . PHP_EOL;
}
Creare un inventario leggero di presentazioni
Quando elabori molti file di presentazione, potresti aver bisogno di un inventario compatto per la convalida, l’indicizzazione o un sistema di gestione dei documenti. In questo scenario, utilizza PresentationFactory::getPresentationInfo per ottenere un oggetto PresentationInfo e quindi 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 di inventario:
| Metodo | Valore di inventario |
|---|---|
| getSlides | Numero totale di diapositive. |
| getHiddenSlides | Numero di diapositive nascoste. |
| getNotes | Numero di diapositive che contengono note. |
| getParagraphs | Numero totale di paragrafi, se 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 DocumentProperties::getHeadingPairs con DocumentProperties::getTitlesOfParts per visualizzare gruppi di contenuto come caratteri, temi e titoli delle diapositive.
use aspose\slides\LoadFormat;
use aspose\slides\PresentationFactory;
$filePath = "sample.pptx";
$presentationInfo = PresentationFactory::getInstance()->getPresentationInfo($filePath);
$documentProperties = $presentationInfo->readDocumentProperties();
$loadFormat = java_values($presentationInfo->getLoadFormat());
$formatName = "Other (" . $loadFormat . ")";
if ($loadFormat === LoadFormat::Pptx) {
$formatName = "PPTX";
} elseif ($loadFormat === LoadFormat::Ppt) {
$formatName = "PPT";
} elseif ($loadFormat === LoadFormat::Odp) {
$formatName = "ODP";
}
echo "File: " . basename($filePath) . PHP_EOL;
echo "Format: " . $formatName . PHP_EOL;
echo "Title: " . java_values($documentProperties->getTitle()) . PHP_EOL;
echo "Author: " . java_values($documentProperties->getAuthor()) . PHP_EOL;
echo "Statistics:" . PHP_EOL;
echo " Slides: " . java_values($documentProperties->getSlides()) . PHP_EOL;
echo " Hidden slides: " . java_values($documentProperties->getHiddenSlides()) . PHP_EOL;
echo " Slides with notes: " . java_values($documentProperties->getNotes()) . PHP_EOL;
echo " Paragraphs: " . java_values($documentProperties->getParagraphs()) . PHP_EOL;
echo " Words: " . java_values($documentProperties->getWords()) . PHP_EOL;
echo " Multimedia clips: " . java_values($documentProperties->getMultimediaClips()) . PHP_EOL;
$headingPairs = $documentProperties->getHeadingPairs();
$titlesOfParts = $documentProperties->getTitlesOfParts();
if (java_is_null($headingPairs) || java_is_null($titlesOfParts)) {
echo "Content groups: not available" . PHP_EOL;
} else {
$headingPairs = java_values($headingPairs);
$titlesOfParts = java_values($titlesOfParts);
$partIndex = 0;
if (count($headingPairs) === 0 || count($titlesOfParts) === 0) {
echo "Content groups: not available" . PHP_EOL;
} else {
echo "Content groups:" . PHP_EOL;
foreach ($headingPairs as $headingPair) {
$partCount = java_values($headingPair->getCount());
echo " " . java_values($headingPair->getName()) . " (" . $partCount . ")" . PHP_EOL;
for ($partOffset = 0; $partOffset < $partCount && $partIndex < count($titlesOfParts); $partOffset++) {
echo " - " . $titlesOfParts[$partIndex] . PHP_EOL;
$partIndex++;
}
}
if ($partIndex < count($titlesOfParts)) {
echo " Other parts:" . PHP_EOL;
while ($partIndex < count($titlesOfParts)) {
echo " - " . $titlesOfParts[$partIndex] . PHP_EOL;
$partIndex++;
}
}
}
}
Ogni HeadingPair fornisce un nome di gruppo e il numero di elementi in quel gruppo. DocumentProperties::getTitlesOfParts restituisce un array piatto e ordinato, quindi consuma il numero di titoli consecutivi specificati da ciascuna coppia di intestazione.
Metadati memorizzati e limitazioni del formato
Le proprietà di inventario restituite da PresentationInfo::readDocumentProperties riflettono i metadati disponibili nel documento di origine. 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 memorizzati possono essere obsoleti se l’applicazione che ha salvato l’ultimo file non ha aggiornato le sue proprietà di documento.
- PPTX: Il formato fornisce proprietà di documento estese per il conteggio di diapositive, note, diapositive nascoste, paragrafi, parole e multimedia, nonché per le coppie di intestazioni e i titoli delle parti. La disponibilità dipende da quali proprietà sono state 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 del documento, Aspose.Slides restituisce il suo valore memorizzato 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. I metadati di diapositive nascoste, note, multimedia, coppie di intestazioni e titoli delle parti potrebbero non essere disponibili e le proprietà di inventario possono restituire valori predefiniti. Non considerare un valore zero o un array vuoto come prova autorevole che il contenuto corrispondente sia assente.
Utilizza l’approccio di metadati leggeri per gli inventari e i controlli preliminari. Carica la presentazione e ispeziona il suo modello di oggetti live quando il risultato deve riflettere le modifiche in memoria o quando è necessario verificare il contenuto reale della presentazione.
Aggiornare le 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.

L’esempio seguente modifica il titolo e l’ora dell’ultimo salvataggio e scrive il risultato in un nuovo file:
use aspose\slides\PresentationFactory;
$sourceFile = "sample.pptx";
$outputFile = "sample_with_updated_properties.pptx";
$presentationInfo = PresentationFactory::getInstance()->getPresentationInfo($sourceFile);
$documentProperties = $presentationInfo->readDocumentProperties();
$documentProperties->setTitle("Quarterly sales report");
$documentProperties->setLastSavedTime(new Java("java.util.Date"));
$presentationInfo->updateDocumentProperties($documentProperties);
$outputStream = new Java("java.io.FileOutputStream", $outputFile);
try {
$presentationInfo->writeBindedPresentation($outputStream);
} finally {
$outputStream->close();
}
L’immagine seguente mostra le proprietà del documento aggiornate.

Link utili
Per controlli di sicurezza correlati e impostazioni di protezione, consulta 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 per il rendering ma non incorporati.
Come posso capire rapidamente se il file contiene diapositive nascoste e quante sono?
Quando i metadati del documento salvati sono sufficienti, leggi DocumentProperties::getHiddenSlides tramite PresentationFactory::getPresentationInfo e PresentationInfo::readDocumentProperties. Questo è adatto per un inventario leggero. Se la presentazione è stata modificata in memoria, i metadati salvati potrebbero mancare o essere obsoleti, oppure devi verificare i valori live iterando su Presentation::getSlides e ispezionando il metodo Slide::getHidden di ciascuna diapositiva.
Posso rilevare se vengono utilizzate dimensioni e orientamento personalizzati 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 attese.
Esiste un modo rapido per vedere se i grafici fanno riferimento a origini dati esterne?
Sì. Individua ogni Chart e chiama ChartData::getDataSourceType. Per una cartella di lavoro esterna, chiama ChartData::getExternalWorkbookPath. Il tipo di origine dati e il percorso identificano un riferimento esterno, ma verificare la disponibilità della destinazione richiede un controllo di risorse separato.
Come posso valutare le diapositive “pesanti” che potrebbero rallentare il rendering o l’esportazione PDF?
Non esiste una singola proprietà di complessità. Attraversa Presentation::getSlides e la collezione BaseSlide::getShapes di ciascuna diapositiva. Usa il conteggio delle forme e la presenza di immagini grandi, effetti, animazioni o multimedia come segnali di screening, e misura un rendering o un’esportazione rappresentativa prima di considerare una diapositiva un colletto di bottiglia confermato.