Ανάκτηση και Ενημέρωση Πληροφοριών Παρουσίασης σε PHP

Επισκόπηση

Το Aspose.Slides μπορεί να εντοπίσει τη μορφή μιας παρουσίασης και να διαβάσει τα μεταδεδομένα του εγγράφου χωρίς να δημιουργήσει ένα πλήρες μοντέλο αντικειμένων παρουσίασης. Αυτό είναι χρήσιμο όταν χρειάζεται να ταξινομήσετε αρχεία, να δημιουργήσετε ένα απόθεμα ή να εξετάσετε ιδιότητες πριν αποφασίσετε αν θα φορτώσετε και θα επεξεργαστείτε το περιεχόμενο της παρουσίασης.

Αυτό το άρθρο δείχνει ελαφριά επιθεώρηση μέσω του PresentationFactory και του PresentationInfo, καθώς και στοχευμένες ενημερώσεις μέσω του DocumentProperties.

Έλεγχος μορφής παρουσίασης

Αν έχετε ήδη μια φορτωμένη παρουσίαση, δείτε το Determine the Original Presentation Format για ανίχνευση μετά τη φόρτωση και τους περιορισμούς των παλαιών ροών PPT, PPS και POT.

Χρησιμοποιήστε το PresentationFactory::getPresentationInfo για να εξετάσετε ένα αρχείο χωρίς να δημιουργήσετε μια παρουσία του Presentation. Η μέθοδος PresentationInfo::getLoadFormat αναφέρει τη ανιχνευμένη μορφή, όπως PPTX, PPT ή 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;
}

Δημιουργία ελαφρού αποθέματος παρουσίασης

Όταν επεξεργάζεστε πολλά αρχεία παρουσίασης, μπορεί να χρειαστείτε ένα συμπαγές απόθεμα για επαλήθευση, ευρετηρίαση ή σύστημα διαχείρισης εγγράφων. Σε αυτήν την περίπτωση, χρησιμοποιήστε το PresentationFactory::getPresentationInfo για να αποκτήσετε ένα αντικείμενο PresentationInfo, και έπειτα καλέστε το PresentationInfo::readDocumentProperties για να διαβάσετε τα μεταδεδομένα του εγγράφου. Αυτή η προσέγγιση δεν δημιουργεί μια παρουσία του Presentation ούτε απαιτεί να διασχίσετε το πλήρες μοντέλο αντικειμένων παρουσίασης.

Οι επεκταμένες ιδιότητες που εκτίθενται από το DocumentProperties παρέχουν τις ακόλουθες τιμές αποθέματος:

Μέθοδος Τιμή αποθέματος
getSlides Συνολικός αριθμός διαφανειών.
getHiddenSlides Αριθμός κρυφών διαφανειών.
getNotes Αριθμός διαφανειών που περιέχουν σημειώσεις.
getParagraphs Συνολικός αριθμός παραγράφων, όταν είναι διαθέσιμος.
getWords Συνολικός αριθμός λέξεων.
getMultimediaClips Συνολικός αριθμός ηχητικών και βίντεο κλιπ.

Το παρακάτω παράδειγμα διαβάζει αυτές τις τιμές χωρίς να δημιουργήσει ένα αντικείμενο Presentation και εκτυπώνει ένα συμπαγές απόθεμα. Συνδυάζει επίσης το DocumentProperties::getHeadingPairs με το DocumentProperties::getTitlesOfParts ώστε να εμφανίσει ομάδες περιεχομένου όπως γραμματοσειρές, θέματα και τίτλους διαφανειών.

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

Κάθε HeadingPair παρέχει ένα όνομα ομάδας και τον αριθμό των στοιχείων σε αυτήν την ομάδα. Η μέθοδος DocumentProperties::getTitlesOfParts επιστρέφει έναν επίπεδο, ταξινομημένο πίνακα, ώστε να χρησιμοποιήσετε τον αριθμό των διαδοχικών τίτλων που καθορίζονται από κάθε heading pair.

Αποθηκευμένα μεταδεδομένα και περιορισμοί μορφής

Οι ιδιότητες αποθέματος που επιστρέφει η PresentationInfo::readDocumentProperties αντανακλούν τα μεταδεδομένα που είναι διαθέσιμα στο αρχικό έγγραφο. Το Aspose.Slides δεν φορτώνει και δεν διασχίζει το μοντέλο αντικειμένων παρουσίασης για να επαναυπολογίσει αυτές τις τιμές για αυτήν την κλήση. Οι ελλιπείς ιδιότητες αντιπροσωπεύονται από προεπιλεγμένες τιμές, και οι αποθηκευμένες τιμές μπορεί να είναι ξεπερασμένες αν η εφαρμογή που αποθήκευσε τελευταία το αρχείο δεν ενημέρωσε τις ιδιότητες του εγγράφου.

PPTX: Η μορφή παρέχει επεκταμένες ιδιότητες εγγράφου για μετρήσεις διαφάνειας, σημείωσης, κρυφής διαφάνειας, παραγράφου, λέξης και πολυμέσων, καθώς και για heading pairs και τίτλους τμημάτων. Η διαθεσιμότητα εξαρτάται από τις ιδιότητες που έγραψε ο δημιουργός του εγγράφου.

PPT: Η δυαδική μορφή μπορεί να αποθηκεύσει τις αντίστοιχες ιδιότητες περίληψης εγγράφου. Αν μια ιδιότητα λείπει ή δεν ενημερώθηκε από τον δημιουργό του εγγράφου, το Aspose.Slides επιστρέφει την αποθηκευμένη ή προεπιλεγμένη τιμή αντί να την υπολογίζει από τις διαφάνειες.

ODP: Τα μεταδεδομένα OpenDocument παρέχουν γενικά στατιστικά εγγράφου, όπως αριθμός σελίδων, παραγράφων και λέξεων, αλλά αυτές οι τιμές δεν αντιστοιχούν σε κάθε ειδική για PowerPoint επεκταμένη ιδιότητα. Τα μεταδεδομένα κρυφών διαφανειών, σημειώσεων, πολυμέσων, heading-pair και τίτλων τμημάτων μπορεί να μην είναι διαθέσιμα, και οι ιδιότητες αποθέματος μπορεί να επιστρέφουν προεπιλεγμένες τιμές. Μην θεωρείτε μια τιμή μηδέν ή έναν κενό πίνακα ως αποδεικτικό ότι το αντίστοιχο περιεχόμενο λείπει.

Χρησιμοποιήστε την ελαφριά προσέγγιση μεταδεδομένων για αποθέματα και προφορικούς ελέγχους. Φορτώστε την παρουσίαση και εξετάστε το ζωντανό μοντέλο αντικειμένων όταν το αποτέλεσμα πρέπει να αντανακλά αλλαγές στη μνήμη ή όταν χρειάζεται να επαληθεύσετε το πραγματικό περιεχόμενο της παρουσίασης.

Ενημέρωση ιδιοτήτων παρουσίασης

Οι ιδιότητες που επιστρέφει η PresentationInfo::readDocumentProperties μπορούν επίσης να τροποποιηθούν χωρίς τη δημιουργία μιας παρουσίας Presentation. Εφαρμόστε τις αλλαγές με τη PresentationInfo::updateDocumentProperties, και στη συνέχεια γράψτε την δεσμευμένη παρουσίαση με τη PresentationInfo::writeBindedPresentation.

Η ακόλουθη εικόνα δείχνει τις αρχικές ιδιότητες του εγγράφου.

Αρχικές ιδιότητες εγγράφου της παρουσίασης PowerPoint

Το παρακάτω παράδειγμα αλλάζει τον τίτλο και την ημερομηνία τελευταίας αποθήκευσης και γράφει το αποτέλεσμα σε νέο αρχείο:

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

Η ακόλουθη εικόνα δείχνει τις τροποποιημένες ιδιότητες του εγγράφου της παρουσίασης PowerPoint.

Τροποποιημένες ιδιότητες εγγράφου της παρουσίασης PowerPoint

Σχετικοί σύνδεσμοι

Για σχετικούς ελέγχους ασφαλείας και ρυθμίσεις προστασίας, δείτε τα παρακάτω άρθρα:

Συχνές ερωτήσεις

Πώς μπορώ να ελέγξω αν οι γραμματοσειρές είναι ενσωματωμένες και ποιες είναι;

Φορτώστε την παρουσίαση και χρησιμοποιήστε το Presentation::getFontsManager. Καλέστε το FontsManager::getEmbeddedFonts για να λάβετε τις ενσωματωμένες γραμματοσειρές και το FontsManager::getFonts για να λάβετε τις γραμματοσειρές που χρησιμοποιεί η παρουσίαση. Συγκρίνετε τα δύο αποτελέσματα για να βρείτε γραμματοσειρές που απαιτούνται για την απόδοση αλλά δεν είναι ενσωματωμένες.

Πώς μπορώ γρήγορα να διαπιστώ αν το αρχείο έχει κρυφές διαφάνειες και πόσες;

Όταν τα αποθηκευμένα μεταδεδομένα εγγράφου είναι επαρκή, διαβάστε το DocumentProperties::getHiddenSlides μέσω του PresentationFactory::getPresentationInfo και του PresentationInfo::readDocumentProperties. Αυτό είναι κατάλληλο για ελαφρύ απόθεμα. Εάν η παρουσίαση έχει τροποποιηθεί στη μνήμη, τα αποθηκευμένα μεταδεδομένα μπορεί να λείπουν ή να είναι ξεπερασμένα, ή χρειάζεται να επαληθεύσετε τις ζωντανές τιμές, επαναλάβετε μέσω του Presentation::getSlides και ελέγξτε τη μέθοδο Slide::getHidden κάθε διαφάνειας.

Μπορώ να εντοπίσω αν χρησιμοποιείται προσαρμοσμένο μέγεθος και προσανατολισμό διαφάνειας, και αν διαφέρουν από τις προεπιλογές;

Ναι. Φορτώστε την παρουσίαση και καλέστε το Presentation::getSlideSize. Χρησιμοποιήστε τα SlideSize::getType, SlideSize::getSize και SlideSize::getOrientation για να συγκρίνετε τις τρέχουσες ρυθμίσεις με την αναμενόμενη προεπιλογή και διαστάσεις.

Υπάρχει γρήγορος τρόπος να διαπιστώ αν τα γραφήματα αναφέρονται σε εξωτερικές πηγές δεδομένων;

Ναι. Εντοπίστε κάθε Chart και καλέστε το ChartData::getDataSourceType. Για εξωτερικό βιβλίο εργασίας, καλέστε το ChartData::getExternalWorkbookPath. Ο τύπος πηγής δεδομένων και η διαδρομή αναγνωρίζουν μια εξωτερική αναφορά, αλλά η επαλήθευση της διαθεσιμότητας του στόχου απαιτεί έλεγχο πόρων.

Πώς μπορώ να αξιολογήσω τις ‘βαριές’ διαφάνειες που μπορεί να επιβραδύνουν την απόδοση ή την εξαγωγή PDF;

Δεν υπάρχει μια μοναδική ιδιότητα πολυπλοκότητας. Διασχίστε το Presentation::getSlides και τη συλλογή BaseSlide::getShapes κάθε διαφάνειας. Χρησιμοποιήστε τον αριθμό των σχημάτων και την παρουσία μεγάλων εικόνων, εφέ, κινούμενων γραφικών ή πολυμέσων ως σήματα φιλτραρίσματος, και μετρήστε μια αντιπροσωπευτική απόδοση ή εξαγωγή πριν θεωρήσετε μια διαφάνεια ως επιβεβαιωμένο στερέωμα απόδοσης.