Získat a aktualizovat informace o prezentaci v PHP

Overview

Aspose.Slides může identifikovat formát prezentace a přečíst metadata dokumentu, aniž by vytvořil úplný objektový model prezentace. To je užitečné, když potřebujete klasifikovat soubory, vytvořit inventář nebo zkontrolovat vlastnosti před tím, než se rozhodnete načíst a zpracovat obsah prezentace.

Tento článek ukazuje lehkou kontrolu pomocí PresentationFactory a PresentationInfo, a také cílené aktualizace prostřednictvím DocumentProperties.

Check a Presentation Format

Pokud již máte načtenou prezentaci, podívejte se na Determine the Original Presentation Format pro detekci po načtení a omezení starších PPT, PPS a POT streamů.

Použijte PresentationFactory::getPresentationInfo ke kontrole souboru, aniž byste vytvářeli instanci Presentation. Metoda PresentationInfo::getLoadFormat udává detekovaný formát, například PPTX, PPT nebo 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;
}

Build a Lightweight Presentation Inventory

Když zpracováváte velké množství souborů prezentací, možná budete potřebovat kompaktní inventář pro validaci, indexování nebo systém správy dokumentů. V takovém scénáři použijte PresentationFactory::getPresentationInfo k získání objektu PresentationInfo a poté zavolejte PresentationInfo::readDocumentProperties ke čtení metadat dokumentu. Tento přístup nevytváří instanci Presentation a nevyžaduje procházení kompletním objektovým modelem prezentace.

Rozšířené vlastnosti poskytované třídou DocumentProperties poskytují následující hodnoty inventáře:

Metoda Hodnota inventáře
getSlides Celkový počet snímků.
getHiddenSlides Počet skrytých snímků.
getNotes Počet snímků obsahujících poznámky.
getParagraphs Celkový počet odstavců, pokud jsou k dispozici.
getWords Celkový počet slov.
getMultimediaClips Celkový počet audio a video klipů.

Následující ukázka čte tyto hodnoty bez vytvoření objektu Presentation a vypisuje kompaktní inventář. Kombinuje také DocumentProperties::getHeadingPairs s DocumentProperties::getTitlesOfParts pro zobrazení skupin obsahu, jako jsou písma, motivy a názvy snímků.

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ždý HeadingPair poskytuje název skupiny a počet položek v této skupině. DocumentProperties::getTitlesOfParts vrací ploché, uspořádané pole, proto zpracujte počet po sobě jdoucích názvů určených každou dvojicí nadpisů.

Stored Metadata and Format Limitations

Vlastnosti inventáře vrácené metodou PresentationInfo::readDocumentProperties odrážejí metadata dostupná ve zdrojovém dokumentu. Aspose.Slides nenačítá a neprochází objektovým modelem prezentace za účelem přepočítání těchto hodnot při tomto volání. Chybějící vlastnosti jsou reprezentovány výchozími hodnotami a uložené hodnoty mohou být zastaralé, pokud aplikace, která soubor naposledy uložila, neaktualizovala své dokumentové vlastnosti.

  • PPTX: Formát poskytuje rozšířené dokumentové vlastnosti pro počet snímků, poznámek, skrytých snímků, odstavců, slov a multimediálních klipů, stejně jako páry nadpisů a názvy částí. Dostupnost závisí na tom, které vlastnosti byly zapsány tvůrcem dokumentu.
  • PPT: Binární formát může uložit odpovídající vlastnosti souhrnu dokumentu. Pokud je vlastnost absentní nebo nebyla obnovená tvůrcem dokumentu, Aspose.Slides vrátí její uloženou nebo výchozí hodnotu místo výpočtu ze snímků.
  • ODP: Metadata OpenDocument poskytují obecné statistiky dokumentu, jako jsou počet stránek, odstavců a slov, ale tyto hodnoty se nepřekládají na každou rozšířenou vlastnost specifickou pro PowerPoint. Metadata pro skryté snímky, poznámky, multimédia, páry nadpisů a názvy částí mohou být nedostupná a vlastnosti inventáře mohou vracet výchozí hodnoty. Neinterpretujte nulovou hodnotu nebo prázdné pole jako definitivní důkaz, že odpovídající obsah chybí.

Používejte lehký přístup k metadatům pro inventáře a předběžné kontroly. Načtěte prezentaci a prozkoumejte její živý objektový model, pokud výsledek musí odrážet změny v paměti nebo pokud potřebujete ověřit skutečný obsah prezentace.

Update Presentation Properties

Vlastnosti vrácené metodou PresentationInfo::readDocumentProperties lze také změnit, aniž byste vytvářeli instanci Presentation. Proveďte změny pomocí PresentationInfo::updateDocumentProperties a poté zapište svázanou prezentaci pomocí PresentationInfo::writeBindedPresentation.

Níže uvedený obrázek zobrazuje původní vlastnosti dokumentu.

Original document properties of the PowerPoint presentation

Následující ukázka mění název a čas posledního uložení a zapíše výsledek do nového souboru:

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

Níže uvedený obrázek zobrazuje upravené vlastnosti dokumentu.

Changed document properties of the PowerPoint presentation

Pro související bezpečnostní kontroly a nastavení ochrany viz následující články:

FAQ

Jak mohu zkontrolovat, zda jsou písma vložena a která to jsou?

Načtěte prezentaci a použijte Presentation::getFontsManager. Zavolejte FontsManager::getEmbeddedFonts pro získání vložených písem a FontsManager::getFonts pro získání písem použitých v prezentaci. Porovnejte oba výsledky a najdete písma, která jsou potřebná pro vykreslení, ale nejsou vložena.

Jak rychle zjistit, zda soubor obsahuje skryté snímky a kolik jich je?

Když jsou uložená metadata dokumentu dostatečná, přečtěte DocumentProperties::getHiddenSlides přes PresentationFactory::getPresentationInfo a PresentationInfo::readDocumentProperties. To je vhodné pro lehký inventář. Pokud byla prezentace změněna v paměti, mohou být uložená metadata chybějící nebo zastaralá, nebo potřebujete ověřit živé hodnoty – projděte Presentation::getSlides a zkontrolujte metodu Slide::getHidden každého snímku.

Mohu zjistit, zda je použita vlastní velikost snímku a orientace, a zda se liší od výchozích hodnot?

Ano. Načtěte prezentaci a zavolejte Presentation::getSlideSize. Použijte SlideSize::getType, SlideSize::getSize a SlideSize::getOrientation pro porovnání aktuálního nastavení s očekávaným přednastavením a rozměry.

Existuje rychlý způsob, jak zjistit, zda grafy odkazují na externí zdroje dat?

Ano. Najděte každý Chart a zavolejte ChartData::getDataSourceType. Pro externí sešit použijte ChartData::getExternalWorkbookPath. Typ zdroje dat a cesta identifikují externí odkaz, ale ověření dostupnosti cíle vyžaduje samostatnou kontrolu zdroje.

Jak mohu posoudit „těžké“ snímky, které mohou zpomalovat vykreslování nebo export do PDF?

Neexistuje jediná vlastnost komplexnosti. Projděte Presentation::getSlides a kolekci BaseSlide::getShapes každého snímku. Použijte počet tvarů a přítomnost velkých obrázků, efektů, animací nebo multimédií jako signály pro filtraci a změřte reprezentativní vykreslení nebo export, než označíte snímek za potvrzený výkonový úzký bod.