กำหนดรูปแบบพรีเซนเทชันต้นฉบับใน PHP

ภาพรวม

หลังจากโหลดไฟล์พรีเซนเทชันแล้ว ให้เรียกเมธอด Presentation::getSourceFormat เพื่อกำหนดรูปแบบดั้งเดิมของไฟล์ ใช้เมธอดนี้เมื่อการประมวลผลต่อไปต้องอิงรูปแบบที่อินสแตนซ์ปัจจุบันถูกโหลดมาจาก

รูปแบบแหล่งที่มาจะแตกต่างจาก SaveFormat ที่เลือกสำหรับไฟล์ผลลัพธ์ การบันทึกเป็นรูปแบบอื่นจะไม่เปลี่ยนรูปแบบแหล่งที่มาของอินสแตนซ์ที่มีอยู่

อ่านรูปแบบแหล่งที่มาของไฟล์

ตัวอย่างนี้ต้องการไฟล์ sample.pptx ที่มีอยู่ มันโหลดไฟล์และเลือกนโยบายการประมวลผลของแอปพลิเคชันโดยใช้ Presentation::getSourceFormat แทนชื่อไฟล์ เปลี่ยนเส้นทางเข้าเพื่อทดสอบรูปแบบอื่น ตัวอย่างจะแสดงนโยบายที่เลือก; ให้แทนที่ข้อความด้วยตรรกะของแอปของคุณ

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

รับรู้ค่าที่รองรับ

The SourceFormat คลาสกำหนดค่าคงที่จำนวนเต็มที่แยกรูปแบบพรีเซนเทชันต่อไปนี้ ส่วนต่อขยายด้านล่างเป็นส่วนต่อขยายแบบทั่วไป ไม่ได้เป็นการสร้างใหม่ของชื่อไฟล์ดั้งเดิม

ค่า SourceFormat ส่วนต่อขยาย รูปแบบ
Ppt .ppt การนำเสนอ PowerPoint 97–2003
Pptx .pptx การนำเสนอ Office Open XML
Pptm .pptm การนำเสนอ Office Open XML ที่เปิดใช้งานแมโคร
Pps .pps การแสดงสไลด์ PowerPoint 97–2003
Ppsx .ppsx การแสดงสไลด์ Office Open XML
Ppsm .ppsm การแสดงสไลด์ Office Open XML ที่เปิดใช้งานแมโคร
Pot .pot แม่แบบ PowerPoint 97–2003
Potx .potx แม่แบบ Office Open XML
Potm .potm แม่แบบ Office Open XML ที่เปิดใช้งานแมโคร
Odp .odp การนำเสนอ OpenDocument
Otp .otp แม่แบบการนำเสนอ OpenDocument
Fodp .fodp การนำเสนอ Flat XML ODF
Xml .xml การนำเสนอ PowerPoint XML

อ่านรูปแบบแหล่งที่มาจากสตรีม

ตัวอย่างนี้ต้องการไฟล์ sample.pps ที่มีอยู่ การอ่านไบต์ของไฟล์เข้าสู่ Memory Stream ทำให้จำลองการรับข้อมูลโดยไม่มีชื่อไฟล์ เช่น ค่าจากฐานข้อมูลหรืออาร์เรย์ไบต์ที่อัปโหลด คอนสตรัคเตอร์ของ Presentation จะรับสตรีมเท่านั้น

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, และ POT ใช้รูปแบบไบนารีเดียวกัน เมื่อโหลดโดยใช้เส้นทางไฟล์ ส่วนต่อขยายอาจช่วยแยกการแสดงสไลด์หรือแม่แบบได้ หากไม่มีชื่อไฟล์ เนื้อหา PPS และ POT เก่าอาจรายงานเป็น SourceFormat::Ppt; ตัวอย่าง PPS ด้านบนพิมพ์ค่าตัวเลขของ SourceFormat::Ppt

หากแอปของคุณต้องการรักษาความแตกต่างนี้ ควรเก็บชื่อไฟล์ดั้งเดิมหรือเมทาดาทา subtype แยกต่างหาก ส่วนต่อขยายเป็นบ่งชี้ที่เป็นประโยชน์สำหรับ subtype เก่าเหล่านี้ แต่ไม่ควรใช้เป็นเกณฑ์หลักเดียวในการระบุเนื้อหาพรีเซนเทชันใด ๆ

เปรียบเทียบการตรวจจับก่อนและหลังการโหลด

ใช้ PresentationFactory::getPresentationInfo และ PresentationInfo::getLoadFormat เมื่อจำเป็นต้องตรวจสอบไฟล์ก่อนโหลดโมเดลอ็อบเจกต์พรีเซนเทชันเต็มรูปแบบ ใช้ Presentation::getSourceFormat เมื่อตัวอินสแตนซ์มีอยู่แล้ว

ตัวอย่างนี้ต้องการ sample.pptx และพิมพ์ค่าตัวเลขของ LoadFormat::Pptx และ SourceFormat::Pptx ตามลำดับ ในการผลิต ให้เลือก API ที่เหมาะกับขั้นตอนการประมวลผลของคุณ; พรีเซนเทชันที่โหลดแล้วไม่จำเป็นต้องตรวจสอบสองครั้งเพื่อรับค่าแหล่งที่มา

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

ผลลัพธ์ใช้ค่าคงที่จากคลาสที่ต่างกัน: LoadFormat และ SourceFormat อย่าเทียบค่าตัวเลขของพวกมันหรือสมมติว่าทุกรูปแบบมีผลการตรวจจับที่เหมือนกัน PowerPoint XML อาจรายงานเป็น LoadFormat::Unknown ก่อนโหลดและ SourceFormat::Xml หลังโหลด

แยกรูปแบบแหล่งที่มาและรูปแบบผลลัพธ์ออกจากกัน

ตัวอย่างนี้ต้องการ sample.pptx และเขียนไฟล์ converted.odp มันพิมพ์ค่าตัวเลขของ SourceFormat::Pptx ทั้งก่อนและหลังบันทึกอินสแตนซ์ต้นฉบับ อินสแตนซ์ใหม่ที่โหลดจากผลลัพธ์ ODP จะรายงาน Odp

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() จะรายงาน SourceFormat::Pptx เนื่องจากไม่มีไฟล์เข้า: นี้เป็นค่าตั้งต้นสำหรับอินสแตนซ์ที่สร้างใหม่ ไม่ได้หมายความว่าไฟล์ PPTX ถูกโหลด ติดตามว่าแอปของคุณสร้างหรือโหลดอินสแตนซ์แยกต่างหากหากความแตกต่างนี้สำคัญ

แมปรูปแบบแหล่งที่มาเป็นส่วนต่อขยาย

ตัวอย่างต่อไปนี้ต้องการ sample.pptx มันแมปค่าของ SourceFormat ที่สนับสนุนในปัจจุบันทุกค่าเป็นส่วนต่อขยายแบบทั่วไป โดยไม่ต้องพาร์สชื่อไฟล์อินพุต การสำรองจะป้องกันการกำหนดส่วนต่อขยายให้กับค่าที่ไม่รู้จักโดยเงียบ ๆ

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

การแมปนี้ไม่ได้แปลงไฟล์หรือกู้คืน subtype PPS/POT เก่าที่หายไประหว่างการโหลดสตรีม สำหรับการบันทึกจริง ให้เลือก SaveFormat อย่างชัดเจน หรือใช้การแปลงที่แสดงใน Save Presentations in Their Original Format

ตรวจสอบรูปแบบโดยการบันทึกและเปิดใหม่

ตัวอย่างอิสระนี้สร้างพรีเซนเทชันและเขียนไฟล์สามไฟล์ในไดเรกทอรีทำงาน โดยเขียนทับไฟล์ที่มีชื่อเดียวกัน มันเปิดแต่ละไฟล์ผลลัพธ์ใหม่ทั้งโดยเส้นทางและผ่าน Memory Stream สำหรับ PPTX และ ODP ทั้งสองวิธีรายงานรูปแบบที่บันทึกไว้ สำหรับ PPS การโหลดโดยเส้นทางรายงาน Pps ส่วนการโหลดไบต์เดียวกันโดยไม่มีชื่อไฟล์รายงาน Ppt

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

ตารางต่อไปสรุปการระบุรูปแบบแหล่งที่มาสำหรับพรีเซนเทชันที่มีส่วนต่อขยายตรงกัน ชื่อแสดงค่าคงที่; ตัวอย่าง PHP พิมพ์ค่าตัวเลขของมัน:

รูปแบบที่บันทึก SourceFormat จากเส้นทางไฟล์ SourceFormat จากสตรีมไม่มีชื่อ
PPT Ppt Ppt
PPTX, PPTM Pptx, Pptm respectively เช่นเดียวกับไฟล์เส้นทาง
PPS Pps Ppt
PPSX, PPSM Ppsx, Ppsm respectively เช่นเดียวกับไฟล์เส้นทาง
POT Pot Ppt
POTX, POTM Potx, Potm respectively เช่นเดียวกับไฟล์เส้นทาง
ODP, OTP Odp, Otp respectively เช่นเดียวกับไฟล์เส้นทาง
FODP Fodp Fodp
PowerPoint XML Xml Xml

เนื้อหา PPS/POT จะระบุเป็น Ppt สำหรับสตรีมที่ไม่มีชื่อ ตารางอธิบายการระบุรูปแบบ ไม่ได้หมายถึงการคงลักษณะทุกอย่างของพรีเซนเทชันในการแปลง

คำถามที่พบบ่อย

การบันทึกเป็น ODP ทำให้รูปแบบแหล่งที่มาของพรีเซนเทชันที่โหลดจาก PPTX เปลี่ยนหรือไม่?

ไม่. อินสแตนซ์ที่มีอยู่ยังคงรายงาน Pptx. อินสแตนซ์ที่โหลดจากไฟล์ ODP ที่บันทึกไว้รายงาน Odp.

สตรีมสามารถแยกความแตกต่างระหว่างพรีเซนเทชันเก่า, การแสดงสไลด์และแม่แบบได้เสมอหรือไม่?

ไม่. PPT, PPS, และ POT ใช้รูปแบบไบนารีเดียวกัน เก็บชื่อไฟล์หรือเมทาดาทา subtype แยกต่างหากเมื่อจำเป็น

ควรใช้ API ใดเมื่อพรีเซนเทชันโหลดแล้ว?

อ่าน Presentation::getSourceFormat ใช้ PresentationFactory::getPresentationInfo สำหรับการตรวจสอบก่อนโหลด