Hämta och uppdatera presentationsinformation i PHP

Översikt

Aspose.Slides kan identifiera ett presentationsformat och läsa dokumentmetadata utan att skapa ett komplett presentationsobjektmodell. Detta är användbart när du behöver klassificera filer, bygga ett inventarium eller inspektera egenskaper innan du beslutar om du ska ladda och bearbeta presentationsinnehållet.

Denna artikel demonstrerar lättviktig inspektion via PresentationFactory och PresentationInfo, samt riktade uppdateringar via DocumentProperties.

Kontrollera presentationsformat

Använd PresentationFactory::getPresentationInfo för att inspektera en fil utan att skapa en Presentation instans. Metoden PresentationInfo::getLoadFormat rapporterar det upptäckta formatet, såsom PPTX, PPT eller 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;
}

Bygg ett lättviktigt presentationsinventarium

När du bearbetar många presentationsfiler kan du behöva ett kompakt inventarium för validering, indexering eller ett dokumenthanteringssystem. I detta scenario, använd PresentationFactory::getPresentationInfo för att erhålla ett PresentationInfo objekt, och anropa sedan PresentationInfo::readDocumentProperties för att läsa dokumentmetadata. Detta tillvägagångssätt skapar inte en Presentation instans eller kräver att du traverserar den kompletta presentationsobjektmodellen.

De utökade egenskaper som exponeras av DocumentProperties tillhandahåller följande inventarievärden:

Metod Inventarievärde
getSlides Totalt antal bilder.
getHiddenSlides Antal dolda bilder.
getNotes Antal bilder som innehåller anteckningar.
getParagraphs Totalt antal stycken, om tillgängligt.
getWords Totalt antal ord.
getMultimediaClips Totalt antal ljud- och videoklipp.

Följande exempel läser dessa värden utan att skapa ett Presentation objekt och skriver ut ett kompakt inventarium. Det kombinerar även DocumentProperties::getHeadingPairs med DocumentProperties::getTitlesOfParts för att visa innehållsgrupper såsom typsnitt, teman och bildspelstitlar.

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++;
            }
        }
    }
}

Varje HeadingPair tillhandahåller ett gruppnamn och antalet objekt i den gruppen. DocumentProperties::getTitlesOfParts returnerar en platt, ordnad array, så konsumera antalet på varandra följande titlar som anges av varje rubrikpar.

Lagrad metadata och formatbegränsningar

Inventarieegenskaperna som returneras av PresentationInfo::readDocumentProperties återspeglar metadata som finns i källdokumentet. Aspose.Slides laddar inte och traverserar presentationsobjektmodellen för att omräkna dessa värden för detta anrop. Saknade egenskaper representeras av standardvärden, och lagrade värden kan vara föråldrade om programmet som senast sparade filen inte uppdaterade dess dokumentegenskaper.

  • PPTX: Formatet tillhandahåller utökade dokumentegenskaper för bild, anteckning, dold bild, stycke, ord och multimediaantal, samt rubrikpar och deltitlar. Tillgänglighet beror på vilka egenskaper som skrevs av dokumentproducenten.
  • PPT: Det binära formatet kan lagra motsvarande dokument‑sammanfattningsegenskaper. Om en egenskap saknas eller inte uppdaterades av dokumentproducenten, returnerar Aspose.Slides dess lagrade eller standardvärde i stället för att beräkna det från bilderna.
  • ODP: OpenDocument-metadata tillhandahåller allmänna dokumentstatistik, såsom sid‑, stycke‑ och ordantal, men dessa värden motsvarar inte varje PowerPoint‑specifik utökad egenskap. Metadata för dolda bilder, anteckningsbilder, multimedia, rubrikpar och deltitlar kan vara otillgänglig, och inventarieegenskaperna kan returnera standardvärden. Behandla inte ett nollvärde eller en tom array som ett auktoritativt bevis på att motsvarande innehåll saknas.

Använd det lättviktiga metadata‑tillvägagångssättet för inventarier och preliminära kontroller. Ladda presentationen och inspektera dess levande objektmodell när resultatet måste återspegla förändringar i minnet eller när du behöver verifiera det faktiska presentationsinnehållet.

Uppdatera presentationsegenskaper

Egenskaperna som returneras av PresentationInfo::readDocumentProperties kan också ändras utan att skapa en Presentation instans. Tillämpa ändringarna med PresentationInfo::updateDocumentProperties och skriv sedan den bundna presentationen med PresentationInfo::writeBindedPresentation.

Följande bild visar de ursprungliga dokumentegenskaperna.

Ursprungliga dokumentegenskaper för PowerPoint-presentationen

Följande exempel ändrar titeln och senast sparade tid och skriver resultatet till en ny fil:

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

Följande bild visar de ändrade dokumentegenskaperna.

Ändrade dokumentegenskaper för PowerPoint-presentationen

Användbara länkar

För relaterade säkerhetskontroller och skyddsinställningar, se följande artiklar:

Vanliga frågor

Hur kan jag kontrollera om typsnitt är inbäddade och vilka de är?

Ladda presentationen och använd Presentation::getFontsManager. Anropa FontsManager::getEmbeddedFonts för att hämta de inbäddade typsnitten och FontsManager::getFonts för att hämta de typsnitt som används av presentationen. Jämför de två resultaten för att hitta typsnitt som krävs för renderingen men som inte är inbäddade.

Hur kan jag snabbt avgöra om filen har dolda bilder och hur många?

När lagrad dokumentmetadata är tillräcklig, läs DocumentProperties::getHiddenSlides via PresentationFactory::getPresentationInfo och PresentationInfo::readDocumentProperties. Detta är lämpligt för ett lättviktigt inventarium. Om presentationen har modifierats i minnet kan den lagrade metadata saknas eller vara föråldrad, eller så behöver du verifiera levande värden, iterera genom Presentation::getSlides och inspektera varje bilds Slide::getHidden metod istället.

Kan jag upptäcka om anpassad bildstorlek och orientering används, och om de skiljer sig från standardinställningarna?

Ja. Ladda presentationen och anropa Presentation::getSlideSize. Använd SlideSize::getType, SlideSize::getSize och SlideSize::getOrientation för att jämföra de aktuella inställningarna med den förväntade förinställningen och dimensionerna.

Finns det ett snabbt sätt att se om diagram refererar till externa datakällor?

Ja. Hitta varje Chart och anropa ChartData::getDataSourceType. För en extern arbetsbok, anropa ChartData::getExternalWorkbookPath. Datakälltyp och sökväg identifierar en extern referens, men att verifiera om målet är tillgängligt kräver en separat resurstillgångskontroll.

Hur kan jag bedöma ‘tunga’ bilder som kan sakta ner renderingen eller PDF‑export?

Det finns ingen enskild komplexitetsegenskap. Traversera Presentation::getSlides och varje bilds BaseSlide::getShapes samling. Använd antalet former och förekomsten av stora bilder, effekter, animationer eller multimedia som screening‑signaler, och mät en representativ rendering eller export innan du behandlar en bild som en bekräftad prestandaflaska.