ดึงและอัปเดตข้อมูลการนำเสนอใน C++
ภาพรวม
Aspose.Slides สามารถระบุรูปแบบของการนำเสนอและอ่านเมตาดาต้าเอกสารโดยไม่ต้องสร้างโมเดลอ็อบเจกต์การนำเสนอทั้งหมด ซึ่งเป็นประโยชน์เมื่อคุณต้องการจัดประเภทไฟล์ สร้างรายการสินค้าคงคลัง หรือตรวจสอบคุณสมบัติก่อนตัดสินใจว่าจะโหลดและประมวลผลเนื้อหาการนำเสนอหรือไม่
บทความนี้แสดงการตรวจสอบแบบน้ำหนักเบาผ่าน PresentationFactory และ IPresentationInfo, รวมถึงการอัปเดตแบบเจาะจงผ่าน IDocumentProperties
ตรวจสอบรูปแบบการนำเสนอ
หากคุณมีการนำเสนอที่โหลดแล้ว ให้ดูที่ Determine the Original Presentation Format เพื่อการตรวจจับหลังจากโหลดและข้อจำกัดของสตรีม PPT, PPS, และ POT รุ่นเก่า
ใช้ IPresentationFactory::GetPresentationInfo เพื่อตรวจสอบไฟล์โดยไม่ต้องสร้างอินสแตนซ์ของ Presentation วิธีการ IPresentationInfo::get_LoadFormat รายงานรูปแบบที่ตรวจพบ เช่น PPTX, PPT หรือ ODP
#include <DOM/IPresentationInfo.h>
#include <DOM/PresentationFactory.h>
#include <LoadFormat.h>
#include <system/array.h>
#include <system/console.h>
#include <system/object_ext.h>
#include <system/string.h>
using namespace Aspose::Slides;
using namespace System;
auto fileNames = MakeArray<String>({u"pres.pptx", u"pres.ppt", u"pres.odp"});
for (const auto& fileName : fileNames)
{
auto presentationInfo = PresentationFactory::get_Instance()->GetPresentationInfo(fileName);
Console::WriteLine(String::Format(u"{0}: {1}", fileName, ObjectExt::ToString(presentationInfo->get_LoadFormat())));
}
สร้างรายการสินค้าคงคลังการนำเสนอแบบเบา
เมื่อคุณประมวลผลไฟล์การนำเสนอหลายไฟล์ คุณอาจต้องการรายการสินค้าคงคลังแบบกะทัดรัดสำหรับการตรวจสอบ การทำดัชนี หรือระบบการจัดการเอกสาร ในสถานการณ์นี้ ให้ใช้ IPresentationFactory::GetPresentationInfo เพื่อรับอ็อบเจกต์ IPresentationInfo จากนั้นเรียก IPresentationInfo::ReadDocumentProperties เพื่ออ่านเมตาดาต้าเอกสาร วิธีนี้ไม่สร้างอินสแตนซ์ของ Presentation หรือจำเป็นต้องสำรวจโมเดลอ็อบเจกต์การนำเสนอทั้งหมด
คุณสมบัติเพิ่มเติมที่เปิดเผยโดย IDocumentProperties ให้ค่ารายการสินค้าคงคลังต่อไปนี้:
| วิธี | ค่ารายการ |
|---|---|
| get_Slides | จำนวนสไลด์ทั้งหมด. |
| get_HiddenSlides | จำนวนสไลด์ที่ซ่อนอยู่. |
| get_Notes | จำนวนสไลด์ที่มีบันทึก. |
| get_Paragraphs | จำนวนย่อหน้าทั้งหมด (ถ้ามี). |
| get_Words | จำนวนคำทั้งหมด. |
| get_MultimediaClips | จำนวนคลิปเสียงและวิดีโอทั้งหมด. |
ตัวอย่างต่อไปนี้อ่านค่าต่างๆ เหล่านี้โดยไม่สร้างอ็อบเจกต์ของ Presentation และพิมพ์รายการสินค้าคงคลังแบบกะทัดรัด นอกจากนี้ยังรวม IDocumentProperties::get_HeadingPairs กับ IDocumentProperties::get_TitlesOfParts เพื่อแสดงกลุ่มเนื้อหา เช่น แบบอักษร ธีม และชื่อสไลด์
#include <DOM/IDocumentProperties.h>
#include <DOM/IHeadingPair.h>
#include <DOM/IPresentationInfo.h>
#include <DOM/PresentationFactory.h>
#include <LoadFormat.h>
#include <system/console.h>
#include <system/io/path.h>
#include <system/object_ext.h>
#include <system/string.h>
using namespace Aspose::Slides;
using namespace System;
using namespace System::IO;
auto filePath = String(u"sample.pptx");
auto presentationInfo = PresentationFactory::get_Instance()->GetPresentationInfo(filePath);
auto documentProperties = presentationInfo->ReadDocumentProperties();
Console::WriteLine(String::Format(u"File: {0}", Path::GetFileName(filePath)));
Console::WriteLine(String::Format(u"Format: {0}", ObjectExt::ToString(presentationInfo->get_LoadFormat())));
Console::WriteLine(String::Format(u"Title: {0}", documentProperties->get_Title()));
Console::WriteLine(String::Format(u"Author: {0}", documentProperties->get_Author()));
Console::WriteLine(u"Statistics:");
Console::WriteLine(String::Format(u" Slides: {0}", documentProperties->get_Slides()));
Console::WriteLine(String::Format(u" Hidden slides: {0}", documentProperties->get_HiddenSlides()));
Console::WriteLine(String::Format(u" Slides with notes: {0}", documentProperties->get_Notes()));
Console::WriteLine(String::Format(u" Paragraphs: {0}", documentProperties->get_Paragraphs()));
Console::WriteLine(String::Format(u" Words: {0}", documentProperties->get_Words()));
Console::WriteLine(String::Format(u" Multimedia clips: {0}", documentProperties->get_MultimediaClips()));
auto headingPairs = documentProperties->get_HeadingPairs();
auto titlesOfParts = documentProperties->get_TitlesOfParts();
auto partIndex = 0;
if (headingPairs == nullptr || titlesOfParts == nullptr || headingPairs->get_Length() == 0 || titlesOfParts->get_Length() == 0)
{
Console::WriteLine(u"Content groups: not available");
}
else
{
Console::WriteLine(u"Content groups:");
for (const auto& headingPair : headingPairs)
{
auto partCount = headingPair->get_Count();
Console::WriteLine(String::Format(u" {0} ({1})", headingPair->get_Name(), partCount));
for (auto partOffset = 0; partOffset < partCount && partIndex < titlesOfParts->get_Length(); partOffset++)
{
Console::WriteLine(String::Format(u" - {0}", titlesOfParts[partIndex]));
partIndex++;
}
}
if (partIndex < titlesOfParts->get_Length())
{
Console::WriteLine(u" Other parts:");
while (partIndex < titlesOfParts->get_Length())
{
Console::WriteLine(String::Format(u" - {0}", titlesOfParts[partIndex]));
partIndex++;
}
}
}
แต่ละ IHeadingPair ให้ชื่อกลุ่มผ่าน IHeadingPair::get_Name และจำนวนรายการในกลุ่มนั้นผ่าน IHeadingPair::get_Count. IDocumentProperties::get_TitlesOfParts คืนค่าระดับแบนเรียงลำดับ ดังนั้นให้ใช้จำนวนชื่อที่ต่อเนื่องตามที่แต่ละ heading pair ระบุ
เมตาดาต้าที่จัดเก็บและข้อจำกัดของรูปแบบ
คุณสมบัติรายการสินค้าคงคลังที่คืนค่าจาก IPresentationInfo::ReadDocumentProperties สะท้อนเมตาดาต้าที่มีในเอกสารต้นฉบับ Aspose.Slides ไม่ได้โหลดและสำรวจโมเดลอ็อบเจกต์การนำเสนอเพื่อคำนวณค่าเหล่านี้ใหม่ในการเรียกนี้ คุณสมบัติที่หายไปจะแสดงด้วยค่าเริ่มต้นและค่าที่จัดเก็บอาจล้าสมัยหากแอปพลิเคชันที่บันทึกไฟล์ครั้งล่าสุดไม่ได้อัปเดตคุณสมบัติเอกสาร
- PPTX: รูปแบบนี้ให้คุณสมบัติเพิ่มเติมของเอกสารสำหรับจำนวนสไลด์, บันทึก, สไลด์ที่ซ่อน, ย่อหน้า, คำ, และคลิปมัลติมีเดีย รวมถึง heading pairs และ part titles การพร้อมใช้งานขึ้นอยู่กับคุณสมบัติที่ผู้ผลิตเอกสารเขียนไว้.
- PPT: รูปแบบไบนารีสามารถเก็บคุณสมบัติสรุปเอกสารที่สอดคล้องกัน หากคุณสมบัติบางอย่างไม่มีหรือไม่ได้รับการรีเฟรชโดยผู้ผลิตเอกสาร Aspose.Slides จะคืนค่าที่จัดเก็บหรือค่าเริ่มต้นแทนการคำนวณจากสไลด์.
- ODP: เมตาดาต้า OpenDocument ให้สถิติเอกสารทั่วไป เช่น จำนวนหน้า ย่อหน้า และคำ แต่ค่าดังกล่าวไม่ได้แมพกับคุณสมบัติเพิ่มเติมของ PowerPoint ทุกอย่าง เมตาดาต้าเกี่ยวกับสไลด์ที่ซ่อน, สไลด์บันทึก, มัลติมีเดีย, heading‑pair, และ part‑title อาจไม่มีและคุณสมบัติรายการสินค้าคงคลังอาจคืนค่าดีฟอลต์ อย่าพิจารณาค่าเป็นศูนย์หรืออาร์เรย์ว่างเป็นหลักฐานแน่นอนว่าข้อมูลนั้นไม่มี.
ใช้วิธีเมตาดาต้าน้ำหนักเบาสำหรับรายการสินค้าคงคลังและการตรวจสอบเบื้องต้น โหลดการนำเสนอและตรวจสอบโมเดลอ็อบเจกต์แบบสดเมื่อผลลัพธ์ต้องสะท้อนการเปลี่ยนแปลงในหน่วยความจำหรือเมื่อคุณต้องการตรวจสอบเนื้อหาการนำเสนอจริง.
อัปเดตคุณสมบัติการนำเสนอ
คุณสมบัติที่คืนค่าจาก IPresentationInfo::ReadDocumentProperties สามารถเปลี่ยนแปลงได้โดยไม่ต้องสร้างอินสแตนซ์ของ Presentation ใช้การเปลี่ยนแปลงด้วย IPresentationInfo::UpdateDocumentProperties, จากนั้นเขียนการนำเสนอที่ผูกไว้ด้วย IPresentationInfo::WriteBindedPresentation.
รูปภาพต่อไปนี้แสดงคุณสมบัติเอกสารต้นฉบับ.

ตัวอย่างต่อไปนี้เปลี่ยนชื่อเรื่องและเวลาที่บันทึกล่าสุดและเขียนผลลัพธ์ไปยังไฟล์ใหม่:
#include <DOM/IDocumentProperties.h>
#include <DOM/IPresentationInfo.h>
#include <DOM/PresentationFactory.h>
#include <system/date_time.h>
#include <system/string.h>
using namespace Aspose::Slides;
using namespace System;
auto sourceFile = String(u"sample.pptx");
auto outputFile = String(u"sample_with_updated_properties.pptx");
auto presentationInfo = PresentationFactory::get_Instance()->GetPresentationInfo(sourceFile);
auto documentProperties = presentationInfo->ReadDocumentProperties();
documentProperties->set_Title(u"Quarterly sales report");
documentProperties->set_LastSavedTime(DateTime::get_UtcNow());
presentationInfo->UpdateDocumentProperties(documentProperties);
presentationInfo->WriteBindedPresentation(outputFile);
รูปภาพต่อไปนี้แสดงคุณสมบัติเอกสารที่อัปเดต.

ลิงก์ที่เป็นประโยชน์
สำหรับการตรวจสอบความปลอดภัยและการตั้งค่าการป้องกันที่เกี่ยวข้อง ดูบทความต่อไปนี้:
คำถามที่พบบ่อย
ฉันจะตรวจสอบได้อย่างไรว่าฟอนต์ถูกฝังและเป็นฟอนต์ใดบ้าง?
โหลดการนำเสนอและใช้ Presentation::get_FontsManager. เรียก FontsManager::GetEmbeddedFonts เพื่อรับฟอนต์ที่ฝังอยู่และ FontsManager::GetFonts เพื่อรับฟอนต์ที่การนำใช้เปรียบเทียบผลลัพธ์ทั้งสองเพื่อหาฟอนต์ที่จำเป็นสำหรับการแสดงผลแต่ไม่ได้ฝัง.
ฉันจะบอกได้อย่างรวดเร็วว่าไฟล์มีสไลด์ที่ซ่อนอยู่หรือไม่และมีจำนวนเท่าไหร่?
เมื่อเมตาดาต้าเอกสารที่จัดเก็บเพียงพอ ให้อ่าน IDocumentProperties::get_HiddenSlides ผ่าน IPresentationFactory::GetPresentationInfo และ IPresentationInfo::ReadDocumentProperties. วิธีนี้เหมาะกับรายการสินค้าคงคลังแบบเบา หากการนำเสนอได้รับการแก้ไขในหน่วยความจำ เมตาดาต้าที่จัดเก็บอาจหายหรือล้าสมัย หรือคุณต้องตรวจสอบค่าที่เป็นสด ให้วนลูปผ่าน Presentation::get_Slides และตรวจสอบวิธีการ Slide::get_Hidden ของแต่ละสไลด์แทน.
ฉันสามารถตรวจจับได้หรือไม่ว่ามีการใช้ขนาดและแนวตั้งของสไลด์ที่กำหนดเองและว่ามันแตกต่างจากค่าปริยายหรือไม่?
ได้. โหลดการนำเสนอและอ่าน Presentation::get_SlideSize. ตรวจสอบ ISlideSize::get_Type, ISlideSize::get_Size, และ ISlideSize::get_Orientation เพื่อเปรียบเทียบการตั้งค่าปัจจุบันกับค่าที่กำหนดและขนาดที่คาดไว้.
มีวิธีเร็ว ๆ ที่จะตรวจสอบว่าชาร์ตอ้างอิงแหล่งข้อมูลภายนอกหรือไม่?
ได้. ค้นหาแต่ละ Chart และตรวจสอบ ChartData::get_DataSourceType. สำหรับเวิร์กบุ๊กภายนอก ให้อ่าน ChartData::get_ExternalWorkbookPath. ประเภทและเส้นทางของแหล่งข้อมูลบ่งชี้ถึงการอ้างอิงภายนอก แต่การตรวจสอบว่าปลายทางพร้อมใช้งานหรือไม่ต้องทำการตรวจสอบแหล่งทรัพยากรแยกต่างหาก.
ฉันจะประเมินสไลด์ ‘หนัก’ ที่อาจทำให้การเรนเดอร์หรือการส่งออกเป็น PDF ช้าได้อย่างไร?
ไม่มีคุณสมบัติเชิงความซับซ้อนเดียว ให้สำรวจ Presentation::get_Slides และคอลเลกชัน IBaseSlide::get_Shapes ของแต่ละสไลด์ ใช้จำนวนรูปทรงและการมีอยู่ของรูปภาพขนาดใหญ่, เอฟเฟกต์, แอนิเมชัน หรือมัลติมีเดียเป็นสัญญาณคัดกรอง และวัดการเรนเดอร์หรือการส่งออกตัวอย่างก่อนพิจารณาสไลด์เป็นคอขวดประสิทธิภาพที่ยืนยันแล้ว.