PHP'de Orijinal Sunum Formatını Belirleme

Genel Bakış

Bir sunumu yükledikten sonra, orijinal formatını belirlemek için Presentation::getSourceFormat yöntemini çağırın. Mevcut örneğin yüklendiği formata bağlı sonraki işlemler gerektiğinde bunu kullanın.

Kaynak format, bir çıktı dosyası için seçilen SaveFormat formatından farklıdır. Başka bir formata kaydetmek, mevcut örneğin kaynak formatını değiştirmez.

Bir Dosyanın Kaynak Formatını Okuma

Bu örnek mevcut bir sample.pptx dosyası gerektirir. Dosyayı yükler ve dosya adını kullanmak yerine Presentation::getSourceFormat kullanarak bir uygulama işleme politikasını seçer. Başka formatları denemek için giriş yolunu değiştirin. Örnek seçilen politikayı yazdırır; mesajları uygulamanızın mantığıyla değiştirin.

use aspose\slides\Presentation;
use aspose\slides\SourceFormat;

$presentation = new Presentation("sample.pptx");
try {
    switch (java_values($presentation->getSourceFormat())) {
        case SourceFormat::Ppt:
        case SourceFormat::Pps:
        case SourceFormat::Pot:
            echo "Use the legacy PowerPoint processing policy." . PHP_EOL;
            break;
        case SourceFormat::Pptx:
            echo "Use the standard PPTX processing policy." . PHP_EOL;
            break;
        default:
            echo "Use the general policy for source format " . java_values($presentation->getSourceFormat()) . "." . PHP_EOL;
            break;
    }
} finally {
    $presentation->dispose();
}

Desteklenen Değerleri Tanıma

SourceFormat sınıfı aşağıdaki sunum formatlarını ayırt eden tamsayı sabitlerini tanımlar. Aşağıdaki uzantılar geleneksel uzantılardır, orijinal dosya adının yeniden oluşturulması değildir.

SourceFormat değeri Uzantı Biçim
Ppt .ppt PowerPoint 97–2003 sunumu
Pptx .pptx Office Open XML sunumu
Pptm .pptm Makrolu Office Open XML sunumu
Pps .pps PowerPoint 97–2003 slayt gösterisi
Ppsx .ppsx Office Open XML slayt gösterisi
Ppsm .ppsm Makrolu Office Open XML slayt gösterisi
Pot .pot PowerPoint 97–2003 şablonu
Potx .potx Office Open XML şablonu
Potm .potm Makrolu Office Open XML şablonu
Odp .odp OpenDocument sunumu
Otp .otp OpenDocument sunum şablonu
Fodp .fodp Düz XML ODF sunumu
Xml .xml PowerPoint XML sunumu

Bir Akışın Kaynak Formatını Okuma

Bu örnek mevcut bir sample.pps dosyası gerektirir. Baytlarını bir bellek akışına okuma, dosya adı olmadan alınan girişleri, örneğin bir veritabanı değeri veya yüklenmiş bayt dizisini modellenir. Presentation yapıcısı yalnızca akışı alır.

use aspose\slides\Presentation;

$inputFile = new Java("java.io.File", "sample.pps");
$bytes = java("java.nio.file.Files")->readAllBytes($inputFile->toPath());
$stream = new Java("java.io.ByteArrayInputStream", $bytes);
try {
    $presentation = new Presentation($stream);
    try {
        echo "Source format: " . java_values($presentation->getSourceFormat()) . PHP_EOL;
    } finally {
        $presentation->dispose();
    }
} finally {
    $stream->close();
}

PPT, PPS ve POT aynı temel ikili formatı kullanır. Dosya yolu ile yüklerken uzantı bir slayt gösterisi veya şablonu ayırt etmeye yardımcı olabilir. Dosya adı olmadan eski PPS ve POT içeriği SourceFormat::Ppt olarak raporlanabilir; yukarıdaki PPS örneği SourceFormat::Ppt tamsayı değerini yazdırır.

Uygulamanızın bu ayrımı koruması gerekiyorsa, orijinal dosya adını veya alt tip meta verisini ayrı tutun. Uzantı bu eski alt tipler için faydalı bir ipucu olsa da, rastgele bir sunum içeriğini tanımlamanın tek temeli olmamalıdır.

Yüklemeden Önce ve Sonra Algılamayı Karşılaştırma

Bir dosyayı tam sunum nesne modeline yüklemeden önce incelemeniz gerektiğinde PresentationFactory::getPresentationInfo ve PresentationInfo::getLoadFormat kullanın. Örnek zaten mevcutsa Presentation::getSourceFormat kullanın.

Bu örnek sample.pptx gerektirir ve sırasıyla LoadFormat::Pptx ve SourceFormat::Pptx tamsayı değerlerini yazdırır. Üretimde, işlem aşamanıza uygun API’yi seçin; zaten yüklenmiş bir sunum, sadece kaynak formatını elde etmek için ikinci bir inceleme gerektirmez.

use aspose\slides\Presentation;
use aspose\slides\PresentationFactory;

$path = "sample.pptx";
$information = PresentationFactory::getInstance()->getPresentationInfo($path);
echo "Before loading: " . java_values($information->getLoadFormat()) . PHP_EOL;

$presentation = new Presentation($path);
try {
    echo "After loading: " . java_values($presentation->getSourceFormat()) . PHP_EOL;
} finally {
    $presentation->dispose();
}

Sonuçlar farklı sınıflardan gelen sabitleri kullanır: LoadFormat ve SourceFormat. Sayısal değerlerini karşılaştırmayın veya her formatın aynı algılamaya sahip olduğunu varsaymayın. PowerPoint XML, yüklemeden önce LoadFormat::Unknown ve yüklendikten sonra SourceFormat::Xml olarak raporlanabilir.

Kaynak ve Çıktı Formatlarını Ayrı Tutma

Bu örnek sample.pptx gerektirir ve converted.odp yazar. Orijinal örneği kaydetmeden önce ve sonra SourceFormat::Pptx tamsayı değerini yazdırır. ODP çıktısından yüklenen yeni örnek yalnızca Odp raporlar.

use aspose\slides\Presentation;
use aspose\slides\SaveFormat;

$presentation = new Presentation("sample.pptx");
try {
    echo "Before saving: " . java_values($presentation->getSourceFormat()) . PHP_EOL;

    $presentation->save("converted.odp", SaveFormat::Odp);
    echo "After saving: " . java_values($presentation->getSourceFormat()) . PHP_EOL;

    $reopened = new Presentation("converted.odp");
    try {
        echo "Reopened output: " . java_values($reopened->getSourceFormat()) . PHP_EOL;
    } finally {
        $reopened->dispose();
    }
} finally {
    $presentation->dispose();
}

new Presentation() ile sıfırdan oluşturulan bir sunum SourceFormat::Pptx rapor eder. Giriş dosyası yoktur: bu yeni oluşturulan bir örnek için varsayılan değerdir, bir PPTX dosyasının yüklendiğinin kanıtı değildir. Bu ayrım önemliyse, uygulamanızın örneği oluşturup oluşturmadığını ayrı olarak izleyin.

Bir Kaynak Formatını Uzantıya Eşleme

Aşağıdaki örnek sample.pptx gerektirir. Mevcut desteklenen her SourceFormat değerini giriş dosya adını ayrıştırmadan geleneksel bir uzantıya eşler. Yedekleme, tanınmayan bir değere sessizce uzantı atanmasını önler.

use aspose\slides\Presentation;
use aspose\slides\SourceFormat;

$presentation = new Presentation("sample.pptx");
try {
    $extension = null;
    switch (java_values($presentation->getSourceFormat())) {
        case SourceFormat::Ppt:
            $extension = ".ppt";
            break;
        case SourceFormat::Pptx:
            $extension = ".pptx";
            break;
        case SourceFormat::Pptm:
            $extension = ".pptm";
            break;
        case SourceFormat::Pps:
            $extension = ".pps";
            break;
        case SourceFormat::Ppsx:
            $extension = ".ppsx";
            break;
        case SourceFormat::Ppsm:
            $extension = ".ppsm";
            break;
        case SourceFormat::Pot:
            $extension = ".pot";
            break;
        case SourceFormat::Potx:
            $extension = ".potx";
            break;
        case SourceFormat::Potm:
            $extension = ".potm";
            break;
        case SourceFormat::Odp:
            $extension = ".odp";
            break;
        case SourceFormat::Otp:
            $extension = ".otp";
            break;
        case SourceFormat::Fodp:
            $extension = ".fodp";
            break;
        case SourceFormat::Xml:
            $extension = ".xml";
            break;
        default:
            $extension = null;
            break;
    }

    echo ($extension !== null ? $extension : "No extension mapping is available.") . PHP_EOL;
} finally {
    $presentation->dispose();
}

Bu eşleme bir dosyayı dönüştürmez veya akış yüklemesi sırasında kaybolan eski bir PPS/POT alt tipini geri getirmez. Gerçek kaydetme için bir SaveFormat seçin veya Sunumları Orijinal Formatlarında Kaydet bölümünde gösterilen dönüşümü kullanın.

Kaydedip Tekrar Açarak Formatları Doğrulama

Bu bağımsız örnek bir sunum oluşturur ve çalışma dizininde üç dosya yazar; aynı adlardaki dosyaları üzerine yazar. Her çıktıyı hem yol ile hem de bellek akışı aracılığıyla yeniden açar. PPTX ve ODP için her iki yol da kaydedilen formatı rapor eder. PPS için yol ile yükleme Pps rapor ederken, aynı baytlar dosya adı olmadan yüklendiğinde Ppt rapor eder.

use aspose\slides\Presentation;
use aspose\slides\SaveFormat;

$presentation = new Presentation();
try {
    $formats = [SaveFormat::Pptx, SaveFormat::Odp, SaveFormat::Pps];
    $extensions = ["pptx", "odp", "pps"];

    foreach ($formats as $index => $format) {
        $path = "roundtrip." . $extensions[$index];
        $presentation->save($path, $format);

        $fromFile = new Presentation($path);
        try {
            $inputFile = new Java("java.io.File", $path);
            $bytes = java("java.nio.file.Files")->readAllBytes($inputFile->toPath());
            $stream = new Java("java.io.ByteArrayInputStream", $bytes);
            try {
                $fromStream = new Presentation($stream);
                try {
                    echo $extensions[$index] . ": file=" . java_values($fromFile->getSourceFormat()) . ", stream=" . java_values($fromStream->getSourceFormat()) . PHP_EOL;
                } finally {
                    $fromStream->dispose();
                }
            } finally {
                $stream->close();
            }
        } finally {
            $fromFile->dispose();
        }
    }
} finally {
    $presentation->dispose();
}

Aşağıdaki tablo, aynı uzantılara sahip sunumlar için kaynak formatı tanımlamasını özetler. İsimler sabitleri gösterir; PHP örnekleri tamsayı değerlerini yazdırır:

Kaydedilen format Dosya yolundan SourceFormat İsimsiz akıştan SourceFormat
PPT Ppt Ppt
PPTX, PPTM Pptx, Pptm sırasıyla Dosya yolu ile aynı
PPS Pps Ppt
PPSX, PPSM Ppsx, Ppsm sırasıyla Dosya yolu ile aynı
POT Pot Ppt
POTX, POTM Potx, Potm sırasıyla Dosya yolu ile aynı
ODP, OTP Odp, Otp sırasıyla Dosya yolu ile aynı
FODP Fodp Fodp
PowerPoint XML Xml Xml

PPS/POT içeriği, isimsiz akışlar için Ppt olarak tanımlanır. Tablo, format tanımlamasını açıklar, dönüşüm sırasında her sunum özelliğinin korunmasını değil.

SSS

PPTX’ten yüklenen bir sunumun ODP’ye kaydedilmesi kaynak formatı değiştirir mi?
Hayır. Mevcut örnek hâlâ Pptx rapor eder. Kaydedilen ODP dosyasından yüklenen bir örnek Odp rapor eder.

Bir akış her zaman eski bir sunumu, slayt gösterisini ve şablonu ayırt edebilir mi?
Hayır. PPT, PPS ve POT aynı ikili formatı paylaşır. Bu ayrım gerektiğinde dosya adını veya alt tip meta verisini ayrı tutun.

Sunum zaten yüklendiyse hangi API’yi kullanmalıyım?
Presentation::getSourceFormat metodunu okuyun. Yüklemeden önce inceleme için PresentationFactory::getPresentationInfo kullanın.