บันทึกการนำเสนอใน C++
ภาพรวม
หลังจากที่คุณสร้างการนำเสนอหรือ เปิดการนำเสนอที่มีอยู่, ใช้เมธอด Presentation::Save เพื่อบันทึกผลลัพธ์ Aspose.Slides for C++ สามารถบันทึกการนำเสนอเป็นไฟล์หรือสตรีมในรูปแบบ PowerPoint, OpenDocument, PDF และรูปแบบอื่น ๆ ส่วนต่อไปนี้จะครอบคลุมการบันทึกมาตรฐานและตัวเลือกที่ใช้ได้สำหรับการส่งออก PPTX
บันทึกการนำเสนอเป็นไฟล์
เพื่อบันทึกการนำเสนอเป็นไฟล์ ให้ส่งพาธไฟล์เอาต์พุตและค่า SaveFormat ไปยังเมธอด Presentation::Save ค่ารูปแบบจะกำหนดประเภทของไฟล์ที่ Aspose.Slides จะสร้าง
ตัวอย่างต่อไปนี้สร้างการนำเสนอและบันทึกเป็นไฟล์ PPTX:
#include <DOM/Presentation.h>
#include <Export/SaveFormat.h>
#include <system/smart_ptr.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System;
auto presentation = MakeObject<Presentation>();
// เพิ่มหรือแก้ไขเนื้อหาการนำเสนอที่นี่.
presentation->Save(u"Output.pptx", SaveFormat::Pptx);
presentation->Dispose();
บันทึกการนำเสนอในรูปแบบดั้งเดิม
สำหรับตัวอย่างการตรวจจับไฟล์และสตรีม, พฤติกรรมของการนำเสนอที่สร้างใหม่, และความแตกต่างระหว่างรูปแบบต้นทางและรูปแบบเอาต์พุต, ดูที่ Determine the Original Presentation Format
ในแอปพลิเคชันการประมวลผลแบบกลุ่ม, รูปแบบอินพุตอาจไม่ทราบล่วงหน้า หลังจากโหลดไฟล์, อ่านรูปแบบดั้งเดิมด้วย IPresentation::get_SourceFormat ส่งค่า SourceFormat ที่ได้ไปยัง SlideUtil::ToSaveFormat เพื่อรับค่า SaveFormat ที่สอดคล้องกัน แล้วใช้ Presentation::Save เพื่อบันทึกการนำเสนอที่แก้ไขแล้ว
ตัวอย่างต่อไปนี้ประมวลผลทุกไฟล์ในไดเรกทอรีอินพุต, ปรับปรุงชื่อเรื่อง, และบันทึกไปยังไดเรกทอรีเอาต์พุตในรูปแบบที่โหลดมา:
#include <DOM/IDocumentProperties.h>
#include <DOM/Presentation.h>
#include <Export/SaveFormat.h>
#include <Util/SlideUtil.h>
#include <system/console.h>
#include <system/exception.h>
#include <system/io/directory.h>
#include <system/io/path.h>
#include <system/smart_ptr.h>
#include <system/string.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace Aspose::Slides::Util;
using namespace System;
using namespace System::IO;
String inputDirectory = u"Input";
String outputDirectory = u"Output";
Directory::CreateDirectory_(outputDirectory);
auto inputPaths = Directory::GetFiles(inputDirectory);
for (const auto& inputPath : inputPaths)
{
try
{
auto presentation = MakeObject<Presentation>(inputPath);
auto sourceFormat = presentation->get_SourceFormat();
auto saveFormat = SlideUtil::ToSaveFormat(sourceFormat);
presentation->get_DocumentProperties()->set_Title(u"Processed by the batch application");
auto outputPath = Path::Combine(outputDirectory, Path::GetFileName(inputPath));
presentation->Save(outputPath, saveFormat);
presentation->Dispose();
}
catch (ArgumentException& exception)
{
Console::get_Error()->WriteLine(String::Format(u"Cannot map the source format of '{0}': {1}", inputPath, exception->get_Message()));
}
catch (Exception& exception)
{
Console::get_Error()->WriteLine(String::Format(u"Cannot process '{0}': {1}", inputPath, exception->get_Message()));
}
}
SlideUtil::ToSaveFormat ทำแผนที่ PPT, PPTX, ODP, PPTM, PPSX, PPSM, POTX, POTM, PPS, POT, OTP, FODP และ PowerPoint XML ไปยังรูปแบบการบันทึกการนำเสนอที่สอดคล้องกัน มันทำแผนที่เฉพาะรูปแบบต้นทางของการนำเสนอเท่านั้น; ไม่ได้ออกแบบให้เลือกรูปแบบการส่งออกเช่น PDF, HTML, TIFF หรือภาพ การส่งค่าที่ไม่สนับสนุนหรือไม่ถูกต้องของ SourceFormat จะทำให้เกิด ArgumentException
ไฟล์ PPT, PPS, และ POT รุ่นเก่าใช้คอนเทนเนอร์ไบนารีเดียวกัน เมื่อการนำเสนอประเภทนี้ถูกโหลดจากสตรีมโดยไม่มีนามสกุลไฟล์, ไฟล์ PPS หรือ POT อาจถูกระบุเป็น PPT หากต้องการคงรุ่นย่อยเหล่านี้ไว้ ควรเก็บชื่อไฟล์หรือเมทาดาต้ารูปแบบเดิมไว้แยกต่างหากและใช้เมื่อนำไปกำหนดชื่อไฟล์และรูปแบบเอาต์พุต
บันทึกการนำเสนอเป็นสตรีม
เพื่อเขียนการนำเสนอโดยไม่ต้องอ้างอิงพาธไฟล์สุดท้าย ให้ส่ง Stream ที่เขียนได้และค่า SaveFormat ไปยังเมธอด Presentation::Save วิธีนี้มีประโยชน์เมื่อเอาต์พุตต้องส่งกลับจากเว็บเซอร์วิส, เก็บในฐานข้อมูล, หรือประมวลผลในหน่วยความจำ
ตัวอย่างต่อไปนี้บันทึกการนำเสนอใหม่ไปยังไฟล์สตรีม:
#include <DOM/Presentation.h>
#include <Export/SaveFormat.h>
#include <system/io/file_mode.h>
#include <system/io/file_stream.h>
#include <system/smart_ptr.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System;
using namespace System::IO;
auto presentation = MakeObject<Presentation>();
auto outputStream = MakeObject<FileStream>(u"Output.pptx", FileMode::Create);
presentation->Save(outputStream, SaveFormat::Pptx);
outputStream->Close();
presentation->Dispose();
บันทึกการนำเสนอพร้อมกำหนดประเภทมุมมองล่วงหน้า
คุณสามารถกำหนดมุมมองที่ PowerPoint เปิดการนำเสนอที่บันทึกไว้ครั้งแรกได้ เรียก ViewProperties::set_LastView พร้อมค่า ViewType ก่อนบันทึก
ตัวอย่างต่อไปนี้กำหนดมุมมอง Slide Master เป็นมุมมองเริ่มต้น:
#include <DOM/IViewProperties.h>
#include <DOM/Presentation.h>
#include <Export/SaveFormat.h>
#include <ViewType.h>
#include <system/smart_ptr.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System;
auto presentation = MakeObject<Presentation>();
presentation->get_ViewProperties()->set_LastView(ViewType::SlideMasterView);
presentation->Save(u"SlideMasterView.pptx", SaveFormat::Pptx);
presentation->Dispose();
บันทึกการนำเสนอในรูปแบบ Strict Office Open XML
เพื่อสร้างไฟล์ PPTX ที่สอดคล้องกับโปรไฟล์ Strict ของ Office Open XML ให้สร้างอินสแตนซ์ PptxOptions แล้วเรียก PptxOptions::set_Conformance ด้วย Conformance::Iso29500_2008_Strict จากนั้นส่งตัวเลือกเหล่านั้นไปยังเมธอด Presentation::Save
#include <DOM/Presentation.h>
#include <Export/Conformance.h>
#include <Export/PptxOptions.h>
#include <Export/SaveFormat.h>
#include <system/smart_ptr.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System;
auto options = MakeObject<PptxOptions>();
options->set_Conformance(Conformance::Iso29500_2008_Strict);
auto presentation = MakeObject<Presentation>();
presentation->Save(u"StrictOfficeOpenXml.pptx", SaveFormat::Pptx, options);
presentation->Dispose();
บันทึกการนำเสนอในรูปแบบ Office Open XML โหมด Zip64
อาร์ไคฟ์ ZIP มาตรฐานจำกัดขนาดบีบอัดและอัดไม่บีบอัดของแต่ละรายการ, ขนาดอาร์ไคฟ์ทั้งหมด, และจำนวนรายการ เนื่องจากไฟล์ PPTX เป็นอาร์ไคฟ์ ZIP, การนำเสนอขนาดใหญ่มากอาจเกินขีดจำกัดเหล่านี้ ส่วนขยาย ZIP64 เพิ่มขีดจำกัดขนาดและจำนวนรายการที่ใช้ได้
ใช้ PptxOptions::set_Zip64Mode เพื่อควบคุมว่าต้องเขียนส่วนขยาย ZIP64 หรือไม่:
IfNecessaryใช้ ZIP64 เฉพาะเมื่อการนำเสนอเกินขีดจำกัด ZIP มาตรฐาน (เป็นค่าเริ่มต้น)Neverปิดส่วนขยาย ZIP64Alwaysเขียนส่วนขยาย ZIP64 เสมอ
ตัวอย่างต่อไปนี้เปิดใช้งานส่วนขยาย ZIP64 เสมอสำหรับการนำเสนอเอาต์พุต:
#include <DOM/Presentation.h>
#include <Export/PptxOptions.h>
#include <Export/SaveFormat.h>
#include <Export/Zip64Mode.h>
#include <system/smart_ptr.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System;
auto presentation = MakeObject<Presentation>(u"Sample.pptx");
auto options = MakeObject<PptxOptions>();
options->set_Zip64Mode(Zip64Mode::Always);
presentation->Save(u"OutputZip64.pptx", SaveFormat::Pptx, options);
presentation->Dispose();
คำเตือน
หากตั้งค่าZip64Mode เป็น Never และการนำเสนอไม่สามารถใส่ในขีดจำกัด ZIP มาตรฐาน การบันทึกจะโยน PptxException
บันทึกการนำเสนอในรูปแบบ Office Open XML พร้อมระดับการบีบอัด
สำหรับเอาต์พุต PPTX คุณสามารถปรับสมดุลระหว่างความเร็วในการบันทึกกับขนาดไฟล์โดยเรียก PptxOptions::set_CompressionLevel ค่าตัวนับ CompressionLevel มีดังนี้:
Noneเก็บข้อมูลโดยไม่มีการบีบอัดLevel1ให้การบีบอัดที่เร็วที่สุดและผลลัพธ์ที่บีบอัดมากที่สุดLevel2ถึงLevel5ให้ความสำคัญกับผลลัพธ์ที่เล็กลงเรื่อย ๆ มากกว่าความเร็วในการบันทึกLevel6สมดุลความเร็วและขนาดไฟล์ (ค่าเริ่มต้น)Level7และLevel8ให้ความสำคัญกับผลลัพธ์ที่เล็กลงมากกว่าความเร็วLevel9ให้การบีบอัดสูงสุดแต่ต้องใช้เวลาประมวลผลมากที่สุด
ตัวอย่างต่อไปนี้บันทึกการนำเสนอโดยไม่มีการบีบอัด:
#include <DOM/Presentation.h>
#include <Export/CompressionLevel.h>
#include <Export/PptxOptions.h>
#include <Export/SaveFormat.h>
#include <system/smart_ptr.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System;
auto presentation = MakeObject<Presentation>(u"Sample.pptx");
auto options = MakeObject<PptxOptions>();
options->set_CompressionLevel(CompressionLevel::None);
presentation->Save(u"OutputNoCompression.pptx", SaveFormat::Pptx, options);
presentation->Dispose();
ตัวอย่างต่อไปนี้ใช้ระดับการบีบอัดสูงสุด:
#include <DOM/Presentation.h>
#include <Export/CompressionLevel.h>
#include <Export/PptxOptions.h>
#include <Export/SaveFormat.h>
#include <system/smart_ptr.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System;
auto presentation = MakeObject<Presentation>(u"Sample.pptx");
auto options = MakeObject<PptxOptions>();
options->set_CompressionLevel(CompressionLevel::Level9);
presentation->Save(u"OutputMaximumCompression.pptx", SaveFormat::Pptx, options);
presentation->Dispose();
บันทึกการนำเสนอโดยไม่รีเฟรชภาพย่อ
เมื่อการนำเสนอถูกบันทึกเป็น PPTX, PptxOptions::set_RefreshThumbnail ควบคุมภาพย่อของเอกสาร:
trueสร้างภาพย่อใหม่ระหว่างการบันทึก (ค่าเริ่มต้น)falseคงภาพย่อยเดิมไว้ หากการนำเสนอไม่มีภาพย่อ Aspose.Slides จะไม่สร้างภาพใหม่
ตัวอย่างต่อไปนี้บันทึกการนำเสนอโดยไม่รีเฟรชภาพย่อ:
#include <DOM/Presentation.h>
#include <Export/PptxOptions.h>
#include <Export/SaveFormat.h>
#include <system/smart_ptr.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System;
auto presentation = MakeObject<Presentation>(u"Sample.pptx");
auto options = MakeObject<PptxOptions>();
options->set_RefreshThumbnail(false);
presentation->Save(u"Output.pptx", SaveFormat::Pptx, options);
presentation->Dispose();
หมายเหตุ
การปิดการรีเฟรชภาพย่อสามารถลดเวลาที่ใช้ในการบันทึกไฟล์ PPTX ได้บันทึกความคืบหน้าเป็นเปอร์เซ็นต์
เพื่อเฝ้าติดตามการบันทึก, ให้ทำการ Implement อินเทอร์เฟซ IProgressCallback และส่งอิมพลีเมนเทชันไปยัง ISaveOptions::set_ProgressCallback Aspose.Slides จะเรียก IProgressCallback::Reporting พร้อมค่าความคืบหน้าในระหว่างการส่งออก
ตัวอย่างต่อไปนี้แสดงความคืบหน้าการส่งออก PDF ไปยังคอนโซล:
#include <DOM/Presentation.h>
#include <Export/PdfOptions.h>
#include <Export/SaveFormat.h>
#include <IProgressCallback.h>
#include <system/console.h>
#include <system/smart_ptr.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System;
class ExportProgressHandler : public IProgressCallback
{
public:
void Reporting(double progressValue) override
{
int progress = static_cast<int>(progressValue);
Console::WriteLine(u"{0}% of the file has been converted.", progress);
}
};
auto options = MakeObject<PdfOptions>();
options->set_ProgressCallback(MakeObject<ExportProgressHandler>());
auto presentation = MakeObject<Presentation>(u"Sample.pptx");
presentation->Save(u"Output.pdf", SaveFormat::Pdf, options);
presentation->Dispose();
หมายเหตุ
Aspose มีเครื่องมือ PowerPoint Splitter ฟรี (link) สร้างด้วย Aspose.Slides API ซึ่งจะบันทึกสไลด์ที่เลือกจากการนำเสนอเป็นไฟล์ PPT หรือ PPTX แยกกันคำถามที่พบบ่อย
Aspose.Slides รองรับการบันทึกแบบ incremental หรือ “fast save” หรือไม่?
ไม่ รองรับ การบันทึกแต่ละครั้งจะสร้างไฟล์เอาต์พุตเต็มรูปแบบแทนการอัปเดตเฉพาะส่วนที่เปลี่ยนแปลง
หลายเธรดสามารถบันทึก Presentation instance เดียวกันได้หรือไม่?
ไม่ได้ Presentation ไม่เป็น thread‑safe (/slides/th/cpp/multithreading/) ให้เข้าถึงและบันทึกแต่ละอินสแตนซ์จากเธรดเดียวเท่านั้น
ลิงก์และไฟล์ที่เชื่อมโยงภายนอกจะเกิดอะไรขึ้นเมื่อบันทึกการนำเสนอ?
Hyperlinks จะคงอยู่ในการนำเสนอ Aspose.Slides ไม่ได้คัดลอกไฟล์ภายนอก ดังนั้นการนำเสนอที่บันทึกไว้ต้องยังคงสามารถเข้าถึงตำแหน่งของไฟล์เหล่านั้นได้
สามารถบันทึกเมตาดาต้าเอกสารเช่น ผู้เขียน, ชื่อเรื่อง, บริษัท, และวันสร้างได้หรือไม่?
ได้ ตั้งค่าคุณสมบัติเอกสารที่เหมาะสม (/slides/th/cpp/presentation-properties/) ก่อนบันทึก แล้ว Aspose.Slides จะเขียนค่าที่ตั้งเหล่านั้นลงในไฟล์เอาต์พุต