บันทึกการนำเสนอใน PHP

ภาพรวม

หลังจากคุณสร้างการนำเสนอหรือ เปิดการนำเสนอที่มีอยู่, ใช้เมธอด Presentation::save เพื่อเขียนผลลัพธ์ Aspose.Slides for PHP via Java สามารถบันทึกการนำเสนอเป็นไฟล์หรือสตรีมในรูปแบบ PowerPoint, OpenDocument, PDF และรูปแบบอื่น ๆ ส่วนต่อไปนี้จะครอบคลุมการดำเนินการบันทึกมาตรฐานและตัวเลือกที่มีสำหรับการส่งออก PPTX

บันทึกการนำเสนอเป็นไฟล์

เพื่อบันทึกการนำเสนอเป็นไฟล์, ส่งพาธเอาต์พุตและค่าของ SaveFormat ไปยังเมธอด Presentation::save ค่าฟอร์แมตจะกำหนดประเภทของไฟล์ที่ Aspose.Slides สร้าง

ตัวอย่างต่อไปนี้สร้างการนำเสนอและบันทึกเป็นไฟล์ PPTX:

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

$presentation = new Presentation();
try {
    // เพิ่มหรือแก้ไขเนื้อหาการนำเสนอที่นี่.

    $presentation->save("Output.pptx", SaveFormat::Pptx);
} finally {
    $presentation->dispose();
}

บันทึกการนำเสนอในรูปแบบเดิม

สำหรับตัวอย่างการตรวจจับไฟล์และสตรีม, พฤติกรรมของการนำเสนอที่สร้างใหม่, และความแตกต่างระหว่างรูปแบบต้นฉบับและเอาต์พุต, ดูที่ Determine the Original Presentation Format

ในแอปพลิเคชันที่ประมวลผลเป็นชุด, รูปแบบอินพุตอาจไม่ทราบล่วงหน้า หลังจากโหลดไฟล์, อ่านรูปแบบต้นฉบับจากเมธอด Presentation::getSourceFormat ส่งค่าของ SourceFormat ที่ได้ไปยังเมธอด SlideUtil::toSaveFormat เพื่อรับค่าของ SaveFormat ที่สอดคล้อง, แล้วใช้ Presentation::save เพื่อเขียนการนำเสนอที่แก้ไขแล้ว

ตัวอย่างเต็มต่อไปนี้ทำการประมวลผลทุกไฟล์ในไดเรกทอรีอินพุต, อัปเดตหัวเรื่อง, และบันทึกไปยังไดเรกทอรีเอาต์พุตในรูปแบบที่โหลดมา:

use aspose\slides\Presentation;
use aspose\slides\SlideUtil;

$inputDirectory = __DIR__ . DIRECTORY_SEPARATOR . "Input";
$outputDirectory = __DIR__ . DIRECTORY_SEPARATOR . "Output";

if (!is_dir($outputDirectory) && !mkdir($outputDirectory, 0777, true)) {
    echo("Cannot create the output directory." . PHP_EOL);
}

$inputFiles = is_dir($inputDirectory) ? scandir($inputDirectory) : false;
if ($inputFiles !== false && is_dir($outputDirectory)) {
    foreach ($inputFiles as $fileName) {
        $inputPath = $inputDirectory . DIRECTORY_SEPARATOR . $fileName;
        if (!is_file($inputPath)) {
            continue;
        }

        $presentation = null;
        $presentationLoaded = false;
        try {
            $presentation = new Presentation($inputPath);
            $presentationLoaded = true;
            $saveFormat = SlideUtil::toSaveFormat($presentation->getSourceFormat());
            $presentation->getDocumentProperties()->setTitle("Processed by the batch application");

            $outputPath = $outputDirectory . DIRECTORY_SEPARATOR . $fileName;
            $presentation->save($outputPath, $saveFormat);
        } catch (\Throwable $exception) {
            echo("Cannot process '" . $inputPath . "': " . $exception->getMessage() . PHP_EOL);
        } finally {
            if ($presentationLoaded) {
                $presentation->dispose();
            }
        }
    }
}

SlideUtil::toSaveFormat จะแมป PPT, PPTX, ODP, PPTM, PPSX, PPSM, POTX, POTM, PPS, POT, OTP, FODP, และ PowerPoint XML ไปยังรูปแบบการบันทึกการนำเสนอที่สอดคล้อง มันแมปเฉพาะรูปแบบแหล่งของการนำเสนอเท่านั้น; ไม่ได้ออกแบบให้เลือกรูปแบบการส่งออกเช่น PDF, HTML, TIFF หรือรูปภาพ การส่งค่าของ SourceFormat ที่ไม่รองรับหรือไม่ถูกต้องจะทำให้เกิด IllegalArgumentException

ไฟล์ PPT, PPS, และ POT รุ่นเก่ามีคอนเทนเนอร์ไบนารีเดียวกัน เมื่อการนำเสนอแบบนี้ถูกโหลดจากสตรีมโดยไม่มีส่วนขยายไฟล์, ไฟล์ PPS หรือ POT อาจถูกระบุเป็น PPT หากจำเป็นต้องรักษาชนิดย่อยของรุ่นเก่าไว้, ให้เก็บชื่อไฟล์หรือเมตาดาต้ารูปแบบเดิมแยกต่างหากและใช้เมื่อตั้งชื่อไฟล์และรูปแบบเอาต์พุต

บันทึกการนำเสนอเป็นสตรีม

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

ตัวอย่างต่อไปนี้บันทึกการนำเสนอใหม่ไปยังสตรีมไฟล์:

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

$presentation = new Presentation();
try {
    $outputStream = new Java("java.io.FileOutputStream", "Output.pptx");
    try {
        $presentation->save($outputStream, SaveFormat::Pptx);
    } finally {
        $outputStream->close();
    }
} finally {
    $presentation->dispose();
}

บันทึกการนำเสนอด้วยมุมมองที่กำหนดไว้ล่วงหน้า

คุณสามารถกำหนดมุมมองที่ PowerPoint จะเปิดการนำเสนอที่บันทึกไว้ได้ ใช้เมธอด ViewProperties::setLastView พร้อมค่าของ ViewType ก่อนบันทึก

ตัวอย่างต่อไปนี้ตั้งค่าให้มุมมอง Slide Master เป็นมุมมองเริ่มต้น:

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

$presentation = new Presentation();
try {
    $presentation->getViewProperties()->setLastView(ViewType::SlideMasterView);
    $presentation->save("SlideMasterView.pptx", SaveFormat::Pptx);
} finally {
    $presentation->dispose();
}

บันทึกการนำเสนอในรูปแบบ Strict Office Open XML

เพื่อสร้างไฟล์ PPTX ที่สอดคล้องกับโปรไฟล์ Strict ของ Office Open XML, สร้างอินสแตนซ์ของ PptxOptions แล้วใช้เมธอด PptxOptions::setConformance พร้อมค่า Conformance::Iso29500_2008_Strict จากนั้นส่งตัวเลือกไปยังเมธอด Presentation::save

use aspose\slides\Conformance;
use aspose\slides\PptxOptions;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;

$options = new PptxOptions();
$options->setConformance(Conformance::Iso29500_2008_Strict);

$presentation = new Presentation();
try {
    $presentation->save("StrictOfficeOpenXml.pptx", SaveFormat::Pptx, $options);
} finally {
    $presentation->dispose();
}

บันทึกการนำเสนอในรูปแบบ Office Open XML ในโหมด Zip64

ไฟล์ ZIP มาตรฐานจำกัดขนาดบีบอัดและขนาดไม่บีบอัดของแต่ละรายการ, ขนาดทั้งหมดของอาร์ไคฟ์, และจำนวนรายการ เนื่องจากไฟล์ PPTX เป็นอาร์ไคฟ์ ZIP, การนำเสนอที่มีขนาดใหญ่มากอาจเกินข้อจำกัดเหล่านี้ ส่วนขยาย ZIP64 จะยกข้อจำกัดขนาดและจำนวนรายการที่ใช้ได้

ใช้เมธอด PptxOptions::setZip64Mode เพื่อควบคุมว่าการเขียน ZIP64 จะเปิดหรือไม่:

  • IfNecessary ใช้ ZIP64 เฉพาะเมื่อการนำเสนอเกินขีดจำกัด ZIP มาตรฐาน นี่คือโหมดเริ่มต้น
  • Never ปิดการใช้ส่วนขยาย ZIP64
  • Always เขียนส่วนขยาย ZIP64 เสมอ

ตัวอย่างต่อไปนี้เปิดใช้งานส่วนขยาย ZIP64 อย่างต่อเนื่องสำหรับการนำเสนอเอาต์พุต:

use aspose\slides\PptxOptions;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\Zip64Mode;

$presentation = new Presentation("Sample.pptx");
try {
    $options = new PptxOptions();
    $options->setZip64Mode(Zip64Mode::Always);

    $presentation->save("OutputZip64.pptx", SaveFormat::Pptx, $options);
} finally {
    $presentation->dispose();
}

บันทึกการนำเสนอในรูปแบบ Office Open XML พร้อมระดับการบีบอัด

สำหรับเอาต์พุต PPTX, คุณสามารถปรับสมดุลระหว่างความเร็วในการบันทึกและขนาดไฟล์โดยใช้เมธอด PptxOptions::setCompressionLevel คลาส CompressionLevel มีค่าดังนี้:

  • None เก็บข้อมูลโดยไม่มีการบีบอัด
  • Level1 ให้การบีบอัดที่เร็วที่สุดและผลลัพธ์ที่บีบอัดมากที่สุด
  • Level2 ถึง Level5 ให้ความสำคัญกับขนาดไฟล์ที่เล็กลงมากกว่าความเร็วในการบันทึก
  • Level6 สมดุลระหว่างความเร็วและขนาดไฟล์ นี้คือระดับเริ่มต้น
  • Level7 และ Level8 ให้ความสำคัญกับขนาดไฟล์ที่เล็กลงต่อไป
  • Level9 ให้การบีบอัดที่แรงที่สุดแต่ต้องใช้เวลาประมวลผลมากที่สุด

ตัวอย่างต่อไปนี้บันทึกการนำเสนอโดยไม่มีการบีบอัด:

use aspose\slides\CompressionLevel;
use aspose\slides\PptxOptions;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;

$presentation = new Presentation("Sample.pptx");
try {
    $options = new PptxOptions();
    $options->setCompressionLevel(CompressionLevel::None);

    $presentation->save("OutputNoCompression.pptx", SaveFormat::Pptx, $options);
} finally {
    $presentation->dispose();
}

ตัวอย่างต่อไปนี้ใช้ระดับการบีบอัดสูงสุด:

use aspose\slides\CompressionLevel;
use aspose\slides\PptxOptions;
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;

$presentation = new Presentation("Sample.pptx");
try {
    $options = new PptxOptions();
    $options->setCompressionLevel(CompressionLevel::Level9);

    $presentation->save("OutputMaximumCompression.pptx", SaveFormat::Pptx, $options);
} finally {
    $presentation->dispose();
}

บันทึกการนำเสนอโดยไม่รีเฟรชภาพย่อ

เมื่อบันทึกการนำเสนอเป็น PPTX, เมธอด PptxOptions::setRefreshThumbnail จะควบคุมภาพย่อของเอกสาร:

  • true สร้างภาพย่อใหม่ระหว่างการบันทึก นี่คือค่าเริ่มต้น
  • false รักษาภาพย่อที่มีอยู่ หากการนำไม่มีภาพย่อ Aspose.Slides จะไม่สร้างภาพย่อ

ตัวอย่างต่อไปนี้บันทึกการนำเสนอโดยไม่รีเฟรชภาพย่อ:

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

$presentation = new Presentation("Sample.pptx");
try {
    $options = new PptxOptions();
    $options->setRefreshThumbnail(false);

    $presentation->save("Output.pptx", SaveFormat::Pptx, $options);
} finally {
    $presentation->dispose();
}

อัปเดตความคืบหน้าในการบันทึกเป็นเปอร์เซ็นต์

เพื่อเฝ้าติดตามกระบวนการบันทึก, จัดหาโปรกซี Java ที่ implements อินเทอร์เฟซ IProgressCallback แล้วส่งโปรกซีไปยังเมธอด SaveOptions::setProgressCallback Aspose.Slides จะเรียกเมธอด IProgressCallback::reporting พร้อมค่าความคืบหน้าในระหว่างการส่งออก

ตัวอย่างต่อไปนี้แสดงความคืบหน้าของการส่งออก PDF ไปยังคอนโซล:

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

class ExportProgressHandler {
    function reporting($progressValue) {
        $progress = java("java.lang.Double")->valueOf($progressValue)->intValue();
        echo($progress . "% of the file has been converted." . PHP_EOL);
    }
}

$progressHandler = java_closure(new ExportProgressHandler(), null, java("com.aspose.slides.IProgressCallback"));

$options = new PdfOptions();
$options->setProgressCallback($progressHandler);

$presentation = new Presentation("Sample.pptx");
try {
    $presentation->save("Output.pdf", SaveFormat::Pdf, $options);
} finally {
    $presentation->dispose();
}

FAQ

Aspose.Slides รองรับการบันทึกแบบ incremental หรือ “fast save” หรือไม่?

ไม่รองรับ การบันทึกแต่ละครั้งจะเขียนไฟล์เอาต์พุตเต็มแทนการอัปเดตเฉพาะส่วนที่เปลี่ยนแปลง

หลายเธรดสามารถบันทึกอินสแตนซ์ Presentation เดียวกันได้หรือไม่?

ไม่ได้ อินสแตนซ์ของ Presentation ไม่ปลอดภัยต่อเธรด (/slides/th/php-java/multithreading/) ควรเข้าถึงและบันทึกแต่ละอินสแตนซ์จากเธรดเดียวเท่านั้น

จะเกิดอะไรขึ้นกับไฮเปอร์ลิงก์และไฟล์ที่ลิงก์ภายนอกเมื่อบันทึกการนำเสนอ?

Hyperlinks จะคงอยู่ในการนำเสนอ Aspose.Slides ไม่ทำการคัดลอกไฟล์ที่ลิงก์ภายนอก ดังนั้นการนำเสนอที่บันทึกแล้วยังต้องสามารถเข้าถึงตำแหน่งไฟล์เหล่านั้นได้

ฉันสามารถบันทึกเมตาดาต้าเอกสาร เช่น ผู้เขียน, ชื่อเรื่อง, บริษัท, และวันที่สร้างได้หรือไม่?

ได้ ตั้งค่า document properties ที่เหมาะสมก่อนบันทึก แล้ว Aspose.Slides จะเขียนข้อมูลเหล่านั้นลงในไฟล์เอาต์พุต