Presentatie-informatie ophalen en bijwerken in PHP

Overzicht

Aspose.Slides kan het formaat van een presentatie identificeren en de documentmetadata lezen zonder een volledig presentatiemodel te maken. Dit is handig wanneer u bestanden moet classificeren, een inventaris moet opstellen of eigenschappen moet inspecteren voordat u beslist of de presentatie‑inhoud geladen en verwerkt moet worden.

Dit artikel toont lichtgewicht inspectie via PresentationFactory en PresentationInfo, evenals gerichte updates via DocumentProperties.

Controleer een presentatieformaat

Gebruik PresentationFactory::getPresentationInfo om een bestand te inspecteren zonder een Presentation‑instance te maken. De PresentationInfo::getLoadFormat‑methode meldt het gedetecteerde formaat, bijvoorbeeld PPTX, PPT of 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;
}

Maak een lichtgewicht presentatie‑inventaris

Wanneer u veel presentatie‑bestanden verwerkt, heeft u mogelijk een compacte inventaris nodig voor validatie, indexering of een document‑beheersysteem. In dit scenario gebruikt u PresentationFactory::getPresentationInfo om een PresentationInfo‑object te verkrijgen, en roept vervolgens PresentationInfo::readDocumentProperties aan om de documentmetadata te lezen. Deze benadering maakt geen Presentation‑instance aan en vereist niet dat u het volledige presentatiemodel doorloopt.

De uitgebreide eigenschappen die door DocumentProperties worden blootgesteld, bieden de volgende inventariswaarden:

Methode Inventariswaarde
getSlides Totaal aantal dia’s.
getHiddenSlides Aantal verborgen dia’s.
getNotes Aantal dia’s die notities bevatten.
getParagraphs Totaal aantal alinea’s, indien beschikbaar.
getWords Totaal aantal woorden.
getMultimediaClips Totaal aantal audio‑ en video‑clips.

Het volgende voorbeeld leest deze waarden zonder een Presentation‑object te maken en drukt een compacte inventaris af. Het combineert ook DocumentProperties::getHeadingPairs met DocumentProperties::getTitlesOfParts om inhoudsgroepen weer te geven, zoals lettertypen, thema’s en dia‑titels.

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

Elke HeadingPair levert een groepsnaam en het aantal items in die groep. DocumentProperties::getTitlesOfParts retourneert een platte, geordende array, dus verwerk het aantal opeenvolgende titels dat door elk heading‑pair wordt opgegeven.

Opgeslagen metadata en formaatbeperkingen

De inventaris­eigenschappen die door PresentationInfo::readDocumentProperties worden geretourneerd, weerspiegelen metadata die beschikbaar is in het bron­document. Aspose.Slides laadt en doorloopt het presentatiemodel niet om deze waarden opnieuw te berekenen voor deze oproep. Ontbrekende eigenschappen worden weergegeven met standaardwaarden, en opgeslagen waarden kunnen verouderd zijn als de toepassing die het bestand het laatst heeft opgeslagen de documenteigenschappen niet heeft bijgewerkt.

  • PPTX: Het formaat biedt uitgebreide documenteigenschappen voor aantallen dia’s, notities, verborgen dia’s, alinea’s, woorden en multimedia, evenals heading‑pairs en part‑titles. De beschikbaarheid hangt af van welke eigenschappen door de documentproducent zijn geschreven.
  • PPT: Het binair formaat kan overeenkomstige document‑samenvattings­eigenschappen opslaan. Als een eigenschap afwezig is of niet is ververst door de documentproducent, retourneert Aspose.Slides de opgeslagen of standaardwaarde in plaats van deze van de dia’s te berekenen.
  • ODP: OpenDocument‑metadata biedt algemene documentstatistieken, zoals pagina‑, alinea‑ en woordtelling, maar deze waarden komen niet overeen met elke PowerPoint‑specifieke uitgebreide eigenschap. Metadata voor verborgen dia’s, notitie‑dia’s, multimedia, heading‑pair en part‑title kunnen ontbreken, en de inventaris­eigenschappen kunnen standaardwaarden teruggeven. Beschouw een nul‑waarde of een lege array niet als definitief bewijs dat de corresponderende inhoud afwezig is.

Gebruik de lichtgewicht metadata‑benadering voor inventarissen en voorlopige controles. Laad de presentatie en inspecteer het levende objectmodel wanneer het resultaat in‑memory wijzigingen moet weerspiegelen of wanneer u de feitelijke presentatiedata moet verifiëren.

Werk presentatie‑eigenschappen bij

De eigenschappen die door PresentationInfo::readDocumentProperties worden geretourneerd, kunnen ook worden aangepast zonder een Presentation‑instance te maken. Pas de wijzigingen toe met PresentationInfo::updateDocumentProperties, en schrijf vervolgens de gekoppelde presentatie met PresentationInfo::writeBindedPresentation.

De volgende afbeelding toont de originele documenteigenschappen van de PowerPoint‑presentatie.

Originele documenteigenschappen van de PowerPoint‑presentatie

Het volgende voorbeeld wijzigt de titel en de laatst‑opgeslagen tijd en schrijft het resultaat naar een nieuw bestand:

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

De volgende afbeelding toont de gewijzigde documenteigenschappen van de PowerPoint‑presentatie.

Gewijzigde documenteigenschappen van de PowerPoint‑presentatie

Voor gerelateerde beveiligingscontroles en bescherminginstellingen, zie de volgende artikelen:

FAQ

Hoe kan ik controleren of lettertypen zijn ingebed en welke dat zijn?

Laad de presentatie en gebruik Presentation::getFontsManager. Roep FontsManager::getEmbeddedFonts aan om de ingebedde lettertypen te verkrijgen en FontsManager::getFonts om de lettertypen te verkrijgen die door de presentatie worden gebruikt. Vergelijk beide resultaten om lettertypen te vinden die wel nodig zijn voor weergave, maar niet zijn ingebed.

Hoe kan ik snel zien of het bestand verborgen dia’s bevat en hoeveel?

Wanneer opgeslagen documentmetadata toereikend is, lees dan DocumentProperties::getHiddenSlides via PresentationFactory::getPresentationInfo en PresentationInfo::readDocumentProperties. Dit is geschikt voor een lichtgewicht inventaris. Als de presentatie in het geheugen is gewijzigd, kan de opgeslagen metadata ontbreken of verouderd zijn, of u moet live‑waarden verifiëren door door Presentation::getSlides te itereren en elke dia’s Slide::getHidden‑methode te inspecteren.

Kan ik detecteren of een aangepaste dia‑grootte en -oriëntatie worden gebruikt, en of ze afwijken van de standaardinstellingen?

Ja. Laad de presentatie en roep Presentation::getSlideSize aan. Gebruik SlideSize::getType, SlideSize::getSize en SlideSize::getOrientation om de huidige instellingen te vergelijken met de verwachte vooraf ingestelde waarden en afmetingen.

Is er een snelle manier om te zien of grafieken verwijzen naar externe gegevensbronnen?

Ja. Lokaliseer elke Chart en roep ChartData::getDataSourceType aan. Voor een extern werkboek, roep ChartData::getExternalWorkbookPath aan. Het gegevenstype‑bron en het pad identificeren een externe verwijzing, maar verifiëren of het doel beschikbaar is, vereist een afzonderlijke resource‑check.

Hoe kan ik ‘zware’ dia’s beoordelen die het renderen of exporteren naar PDF kunnen vertragen?

Er bestaat geen enkele complexiteits‑eigenschap. Doorloop Presentation::getSlides en de BaseSlide::getShapes‑collectie van elke dia. Gebruik het aantal vormen en de aanwezigheid van grote afbeeldingen, effecten, animaties of multimedia als screeningssignalen, en meet een representatieve render of export voordat u een dia als een bevestigde prestatietekort beschouwt.