Pobierz i zaktualizuj informacje o prezentacji w PHP

Przegląd

Aspose.Slides może określić format prezentacji i odczytać jej metadane dokumentu bez tworzenia pełnego modelu obiektowego prezentacji. Jest to przydatne, gdy trzeba sklasyfikować pliki, zbudować 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 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 aby wykryć format po załadowaniu oraz ograniczenia starszych strumieni PPT, PPS i POT.

Użyj PresentationFactory::getPresentationInfo aby sprawdzić plik bez tworzenia instancji Presentation. Metoda PresentationInfo::getLoadFormat zwraca 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

Kiedy przetwarzasz wiele plików prezentacji, możesz potrzebować zwartej 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 obiektowego prezentacji.

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

Metoda Wartość inwentaryzacji
getSlides Całkowita liczba slajdów.
getHiddenSlides Liczba ukrytych slajdów.
getNotes Liczba slajdów zawierających notatki.
getParagraphs Całkowita liczba akapitów, gdy dostępna.
getWords Całkowita liczba słów.
getMultimediaClips Całkowita 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ż DocumentProperties::getHeadingPairs z DocumentProperties::getTitlesOfParts, aby wyświetlić grupy treś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 oraz liczbę elementów w tej grupie. DocumentProperties::getTitlesOfParts zwraca płaską, uporządkowaną tablicę, więc należy zużyć liczbę kolejnych tytułów określoną przez każdy heading pair.

Przechowywane metadane i ograniczenia formatu

Właściwości inwentaryzacji zwracane przez PresentationInfo::readDocumentProperties odzwierciedlają metadane dostępne w źródłowym dokumencie. Aspose.Slides nie ładuje i nie przegląda modelu obiektowego prezentacji, aby przeliczyć te wartości w ramach 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 właściwości dokumentu.

  • PPTX: Format zapewnia rozszerzone właściwości dokumentu dla liczby slajdów, notatek, ukrytych slajdów, akapitów, słów i klipów multimedialnych, 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ólne statystyki dokumentu, takie jak liczba stron, akapitów i słów, ale te wartości nie odpowiadają wszystkim rozszerzonym właściwościom specyficznym dla PowerPointa. Metadane dotyczące ukrytych slajdów, slajdów z notatkami, 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 treść jest nieobecna.

Używaj lekkiego podejścia opartego na metadanych do inwentaryzacji i wstępnych sprawdzeń. Załaduj prezentację i przeanalizuj jej żywy model obiektowy, 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 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.

Poniższy obraz pokazuje oryginalne właściwości dokumentu prezentacji PowerPoint.

Oryginalne właściwości dokumentu prezentacji PowerPoint

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

Poniższy obraz pokazuje zmienione właściwości dokumentu prezentacji PowerPoint.

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ć czcionki osadzone, oraz FontsManager::getFonts, aby uzyskać czcionki użyte w prezentacji. Porównaj oba wyniki, aby znaleźć czcionki wymagane do renderowania, które nie są osadzone.

Jak szybko stwierdzić, czy plik zawiera 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ć nieaktualne lub brakujące; w takim przypadku przeglądaj Presentation::getSlides i sprawdzaj metodę Slide::getHidden każdego slajdu.

Czy mogę wykryć, czy użyto niestandardowego rozmiaru slajdu i orientacji oraz czy różnią się od wartości 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 domyślnymi 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 ChartData::getDataSourceType. Dla zewnętrznego skoroszytu użyj ChartData::getExternalWorkbookPath. Typ źródła danych i ścieżka wskazują na odwołanie zewnętrzne, ale weryfikacja dostępności docelowego pliku wymaga osobnego sprawdzenia zasobów.

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ść. Przeglądaj Presentation::getSlides i kolekcję BaseSlide::getShapes każdego slajdu. Liczba kształtów oraz obecność dużych obrazów, efektów, animacji lub multimediów mogą służyć jako sygnały ostrzegawcze; dodatkowo zmierz reprezentatywny render lub eksport, zanim uznasz slajd za potwierdzony wąskie gardło wydajności.