Pobieranie i aktualizacja informacji o prezentacji w PHP
Przegląd
Aspose.Slides może rozpoznać format prezentacji i odczytać metadane dokumentu bez tworzenia pełnego modelu obiektowego 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.
Ten artykuł demonstruje lekką inspekcję przy użyciu PresentationFactory i PresentationInfo, a także ukierunkowane aktualizacje przy użyciu DocumentProperties.
Sprawdź format prezentacji
Użyj PresentationFactory::getPresentationInfo aby sprawdzić plik bez tworzenia instancji Presentation. Metoda PresentationInfo::getLoadFormat zgłasza wykryty format, taki jak PPTX, PPT lub 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;
}
Zbuduj lekką inwentaryzację prezentacji
Gdy przetwarzasz wiele plików prezentacji, możesz potrzebować zwartej inwentaryzacji do walidacji, indeksowania lub systemu zarządzania dokumentami. W takim 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 obiektowego prezentacji.
Rozszerzone właściwości udostępniane przez DocumentProperties dostarczają 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. |
Poniższy przykład odczytuje te wartości bez tworzenia obiektu Presentation i wypisuje zwartą inwentaryzację. Łączy także DocumentProperties::getHeadingPairs z DocumentProperties::getTitlesOfParts, aby wyświetlić grupy zawartości, takie jak czcionki, motywy i tytuły slajdów.
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++;
}
}
}
}
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 nagłówek.
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 wczytuje i nie przegląda modelu obiektowego prezentacji, aby przeliczyć te wartości przy tym wywołaniu. Brakujące właściwości są reprezentowane domyślnymi wartościami, a przechowywane wartości mogą być nieaktualne, jeśli aplikacja, która ostatnio zapisała plik, nie zaktualizowała właściwości dokumentu.
- PPTX: Format udostępnia rozszerzone właściwości dokumentu dla 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 zwróci jej przechowywaną 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 te wartości nie mapują na wszystkie specyficzne dla PowerPointa rozszerzone właściwości. 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 inwentaryzacji mogą zwracać wartości domyślne. Nie traktuj wartości zero ani pustej tablicy jako ostatecznego dowodu, że odpowiadająca im treść jest nieobecna.
Używaj lekkiego podejścia opartego na metadanych do inwentaryzacji i wstępnych sprawdzeń. Załaduj prezentację i sprawdź jej żywy model obiektowy, gdy wynik musi odzwierciedlać zmiany w pamięci lub gdy trzeba zweryfikować rzeczywistą zawartość prezentacji.
Aktualizuj właściwości prezentacji
Właściwości zwracane przez PresentationInfo::readDocumentProperties mogą być również zmieniane bez tworzenia instancji Presentation. Zastosuj zmiany za pomocą PresentationInfo::updateDocumentProperties, a następnie zapisz powiązaną prezentację przy pomocy PresentationInfo::writeBindedPresentation.
Poniższy obrazek pokazuje oryginalne właściwości dokumentu prezentacji PowerPoint.

Poniższy przykład zmienia tytuł i czas ostatniego zapisu oraz zapisuje wynik do nowego pliku:
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();
}

Przydatne linki
Do powiązanych kontroli bezpieczeństwa i ustawień ochrony zobacz następujące artykuły:
FAQ
Jak sprawdzić, czy czcionki są osadzone i które to są?
Załaduj prezentację i użyj Presentation::getFontsManager. Wywołaj FontsManager::getEmbeddedFonts, aby uzyskać osadzone czcionki, oraz FontsManager::getFonts, aby uzyskać czcionki używane w prezentacji. Porównaj oba wyniki, aby znaleźć czcionki wymagane do renderowania, które nie są osadzone.
Jak szybko sprawdzić, czy plik ma ukryte slajdy i ile ich jest?
Gdy przechowywane metadane dokumentu są wystarczające, odczytaj DocumentProperties::getHiddenSlides przez PresentationFactory::getPresentationInfo i PresentationInfo::readDocumentProperties. To rozwiązanie jest odpowiednie dla lekkiej inwentaryzacji. Jeśli prezentacja została zmodyfikowana w pamięci, przechowywane metadane mogą być brakujące lub nieaktualne, lub jeśli potrzebujesz zweryfikować bieżące wartości, przeiteruj 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 i SlideSize::getOrientation, aby porównać bieżące ustawienia z oczekiwanymi presetami i wymiarami.
Czy istnieje szybki sposób, aby zobaczyć, czy wykresy odwołują się do zewnętrznych źródeł danych?
Tak. Zlokalizuj każdy Chart i wywołaj ChartData::getDataSourceType. Dla 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 osobnego sprawdzenia.
Jak ocenić „ciężkie” slajdy, które mogą spowalniać renderowanie lub eksport PDF?
Nie istnieje pojedyncza właściwość złożoności. Przejrzyj Presentation::getSlides i kolekcję BaseSlide::getShapes każdego slajdu. Używaj liczby kształtów oraz obecności dużych obrazów, efektów, animacji lub multimediów jako wskaźników, a następnie zmierz reprezentatywny render lub eksport przed uznaniem slajdu za potwierdzony wąski gardło wydajności.