Načtení a aktualizace informací o prezentaci v PHP

Přehled

Aspose.Slides dokáže rozpoznat formát prezentace a přečíst její metadata dokumentu, aniž by vytvořil kompletní 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 inspekci pomocí PresentationFactory a PresentationInfo, a také cílené aktualizace pomocí DocumentProperties.

Kontrola formátu prezentace

Použijte PresentationFactory::getPresentationInfo k inspekci souboru, aniž byste vytvořili instanci Presentation. Metoda PresentationInfo::getLoadFormat vrací zjištěný 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;
}

Vytvoření lehkého inventáře prezentací

Když zpracováváte mnoho souborů prezentací, můžete potřebovat kompaktní inventář pro validaci, indexování nebo pro 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 k načtení metadat dokumentu. Tento přístup nevytváří instanci Presentation ani nevyžaduje průchod kompletním objektovým modelem prezentace.

Rozšířené vlastnosti poskytované 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í příklad načte tyto hodnoty, aniž by vytvořil objekt Presentation a vytiskne kompaktní inventář. Také kombinuje DocumentProperties::getHeadingPairs s DocumentProperties::getTitlesOfParts pro zobrazení skupin obsahu, jako jsou fonty, 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, takže je třeba spotřebovat počet po sobě jdoucích názvů určených každým heading pair.

Uložená metadata a omezení formátu

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

  • PPTX: Formát poskytuje rozšířené dokumentové vlastnosti pro počty snímků, poznámek, skrytých snímků, odstavců, slov a multimédií, stejně jako heading pairs a částí názvů. Dostupnost závisí na tom, které vlastnosti byly zapsány výrobcem dokumentu.
  • PPT: Binární formát může uložit odpovídající dokumentové souhrnné vlastnosti. Pokud je vlastnost chybějící nebo nebyla výrobcem dokumentu aktualizována, Aspose.Slides vrací její uloženou nebo výchozí hodnotu místo výpočtu z snímků.
  • ODP: Metadata OpenDocument poskytují obecné statistiky dokumentu, jako jsou počty stránek, odstavců a slov, ale tyto hodnoty se nepřekrývají se všemi rozšířenými vlastnostmi PowerPointu. Metadata pro skryté snímky, poznámky, multimédia, heading‑pair a názvy částí mohou být nedostupná a vlastnosti inventáře mohou vracet výchozí hodnoty. Neberte nulovou hodnotu nebo prázdné pole jako autoritativní důkaz, že odpovídající obsah chybí.

Použijte 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.

Aktualizace vlastností prezentace

Vlastnosti vrácené metodou PresentationInfo::readDocumentProperties lze také měnit bez vytvoření instance Presentation. Proveďte změny pomocí PresentationInfo::updateDocumentProperties a poté zapište svázanou prezentaci pomocí PresentationInfo::writeBindedPresentation.

Následující obrázek zobrazuje původní vlastnosti dokumentu.

Původní vlastnosti dokumentu PowerPoint prezentace

Následující příklad mění název a čas posledního uložení a výsledek zapíše 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ásledující obrázek zobrazuje změněné vlastnosti dokumentu.

Změněné vlastnosti dokumentu PowerPoint prezentace

Užitečné odkazy

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

Často kladené otázky

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žívaných v prezentaci. Porovnejte oba výsledky a najděte 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 dostačující, přečtěte DocumentProperties::getHiddenSlides přes PresentationFactory::getPresentationInfo a PresentationInfo::readDocumentProperties. To je vhodné pro lehký inventář. Pokud byla prezentace upravena v paměti, uložená metadata mohou chybět nebo být zastaralá, nebo pokud 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 a orientace snímku a zda se liší od výchozích?

Ano. Načtěte prezentaci a zavolejte Presentation::getSlideSize. Použijte SlideSize::getType, SlideSize::getSize a SlideSize::getOrientation k 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í datové zdroje?

Ano. Najděte každý Chart a zavolejte ChartData::getDataSourceType. Pro externí sešit zavolejte ChartData::getExternalWorkbookPath. Typ zdroje dat a cesta identifikují externí odkaz, ale ověření, zda je cíl dostupný, vyžaduje samostatnou kontrolu zdrojů.

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

Neexistuje jediná vlastnost složitosti. 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 ke screenu a změřte reprezentativní vykreslení nebo export, než označíte snímek za potvrzený výkonový úzký zátěž.