Mengambil dan Memperbarui Informasi Presentasi di PHP

Gambaran Umum

Aspose.Slides dapat mengidentifikasi format sebuah presentasi dan membaca metadata dokumen tanpa membuat model objek presentasi yang lengkap. Ini berguna ketika Anda perlu mengklasifikasikan file, membangun inventaris, atau memeriksa properti sebelum memutuskan apakah akan memuat dan memproses konten presentasi.

Artikel ini menunjukkan inspeksi ringan melalui PresentationFactory dan PresentationInfo, serta pembaruan yang ditargetkan melalui DocumentProperties.

Periksa Format Presentasi

Gunakan PresentationFactory::getPresentationInfo untuk memeriksa sebuah file tanpa membuat instance Presentation. Metode PresentationInfo::getLoadFormat melaporkan format yang terdeteksi, seperti PPTX, PPT, atau 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;
}

Bangun Inventaris Presentasi Ringan

Saat Anda memproses banyak file presentasi, Anda mungkin memerlukan inventaris yang kompak untuk validasi, pengindeksan, atau sistem manajemen dokumen. Dalam skenario ini, gunakan PresentationFactory::getPresentationInfo untuk memperoleh objek PresentationInfo, lalu panggil PresentationInfo::readDocumentProperties untuk membaca metadata dokumen. Pendekatan ini tidak membuat instance Presentation atau mengharuskan Anda menelusuri model objek presentasi secara lengkap.

Properti tambahan yang diekspos oleh DocumentProperties menyediakan nilai inventaris berikut:

Metode Nilai inventaris
getSlides Total jumlah slide.
getHiddenSlides Jumlah slide tersembunyi.
getNotes Jumlah slide yang berisi catatan.
getParagraphs Total jumlah paragraf, bila tersedia.
getWords Total jumlah kata.
getMultimediaClips Total jumlah klip audio dan video.

Contoh berikut membaca nilai‑nilai ini tanpa membuat objek Presentation dan mencetak inventaris yang kompak. Ia juga menggabungkan DocumentProperties::getHeadingPairs dengan DocumentProperties::getTitlesOfParts untuk menampilkan grup konten seperti font, tema, dan judul slide.

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

Setiap HeadingPair menyediakan nama grup dan jumlah item dalam grup tersebut. DocumentProperties::getTitlesOfParts mengembalikan array datar yang berurutan, jadi konsumsi jumlah judul berurutan yang ditentukan oleh setiap pasangan heading.

Metadata yang Disimpan dan Batasan Format

Properti inventaris yang dikembalikan oleh PresentationInfo::readDocumentProperties mencerminkan metadata yang tersedia dalam dokumen sumber. Aspose.Slides tidak memuat dan menelusuri model objek presentasi untuk menghitung ulang nilai‑nilai ini pada pemanggilan ini. Properti yang tidak ada direpresentasikan oleh nilai default, dan nilai yang disimpan dapat usang jika aplikasi yang terakhir menyimpan file tidak memperbarui properti dokumennya.

  • PPTX: Format ini menyediakan properti dokumen tambahan untuk hitungan slide, catatan, slide tersembunyi, paragraf, kata, dan multimedia, serta pasangan heading dan judul bagian. Ketersediaannya tergantung pada properti mana yang ditulis oleh pembuat dokumen.
  • PPT: Format biner dapat menyimpan properti ringkasan dokumen yang bersesuaian. Jika sebuah properti tidak ada atau tidak diperbarui oleh pembuat dokumen, Aspose.Slides mengembalikan nilai yang disimpan atau nilai default alih‑alih menghitungnya dari slide.
  • ODP: Metadata OpenDocument menyediakan statistik dokumen umum, seperti hitungan halaman, paragraf, dan kata, tetapi nilai‑nilai ini tidak dipetakan ke setiap properti tambahan khusus PowerPoint. Metadata slide tersembunyi, slide catatan, multimedia, heading‑pair, dan judul bagian mungkin tidak tersedia, dan properti inventaris dapat mengembalikan nilai default. Jangan menganggap nilai nol atau array kosong sebagai bukti otoritatif bahwa konten terkait tidak ada.

Gunakan pendekatan metadata ringan untuk inventaris dan pemeriksaan awal. Muat presentasi dan inspeksi model objeknya yang aktif ketika hasil harus mencerminkan perubahan di memori atau ketika Anda perlu memverifikasi konten presentasi yang sebenarnya.

Perbarui Properti Presentasi

Properti yang dikembalikan oleh PresentationInfo::readDocumentProperties juga dapat diubah tanpa membuat instance Presentation . Terapkan perubahan dengan PresentationInfo::updateDocumentProperties, kemudian tulis presentasi yang terikat dengan PresentationInfo::writeBindedPresentation.

Gambar berikut menunjukkan properti dokumen asli dari presentasi PowerPoint.

Properti dokumen asli dari presentasi PowerPoint

Contoh berikut mengubah judul dan waktu terakhir disimpan serta menulis hasilnya ke file baru:

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

Gambar berikut menunjukkan properti dokumen yang diubah dari presentasi PowerPoint.

Properti dokumen yang diubah dari presentasi PowerPoint

Tautan Berguna

Untuk pemeriksaan keamanan terkait dan pengaturan perlindungan, lihat artikel berikut:

Tanya Jawab

Bagaimana saya dapat memeriksa apakah font tertanam dan yang mana?

Muat presentasi dan gunakan Presentation::getFontsManager. Panggil FontsManager::getEmbeddedFonts untuk memperoleh font yang tertanam dan FontsManager::getFonts untuk memperoleh font yang digunakan oleh presentasi. Bandingkan kedua hasil untuk menemukan font yang diperlukan untuk rendering tetapi tidak tertanam.

Bagaimana saya dapat dengan cepat mengetahui apakah file memiliki slide tersembunyi dan berapa banyak?

Ketika metadata dokumen yang disimpan cukup, baca DocumentProperties::getHiddenSlides melalui PresentationFactory::getPresentationInfo dan PresentationInfo::readDocumentProperties. Ini cocok untuk inventaris ringan. Jika presentasi telah dimodifikasi di memori, metadata yang disimpan mungkin tidak ada atau usang, atau Anda perlu memverifikasi nilai hidup, iterasi melalui Presentation::getSlides dan inspeksi metode Slide::getHidden tiap slide sebagai gantinya.

Apakah saya dapat mendeteksi apakah ukuran slide khusus dan orientasi digunakan, serta apakah berbeda dari default?

Ya. Muat presentasi dan panggil Presentation::getSlideSize. Gunakan SlideSize::getType, SlideSize::getSize, dan SlideSize::getOrientation untuk membandingkan pengaturan saat ini dengan preset dan dimensi yang diharapkan.

Apakah ada cara cepat untuk melihat apakah bagan merujuk sumber data eksternal?

Ya. Temukan setiap Chart dan panggil ChartData::getDataSourceType. Untuk buku kerja eksternal, panggil ChartData::getExternalWorkbookPath. Tipe sumber data dan jalur mengidentifikasi referensi eksternal, namun memverifikasi apakah target tersedia memerlukan pemeriksaan sumber daya terpisah.

Bagaimana saya dapat menilai slide “berat” yang mungkin memperlambat rendering atau ekspor PDF?

Tidak ada properti kompleksitas tunggal. Telusuri Presentation::getSlides dan koleksi BaseSlide::getShapes tiap slide. Gunakan jumlah shape serta kehadiran gambar besar, efek, animasi, atau multimedia sebagai sinyal penyaringan, dan ukur rendering atau ekspor representatif sebelum menganggap sebuah slide sebagai bottleneck kinerja yang pasti.