จัดการรูปร่างการนำเสนอใน C++
ภาพรวม
บทความนี้อธิบายวิธีการทำงานกับรูปร่างในงานนำเสนอโดยใช้ Aspose.Slides แสดงวิธีการค้นหารูปร่างบนสไลด์, ทำสำเนารูปร่าง, ลบรูปร่าง, ซ่อนรูปร่าง, เปลี่ยนลำดับการแสดง, รับค่า Interop Shape ID, และตั้งค่า Alternative Text เพื่อระบุตัวและการประมวลผลต่อไป
นอกจากนี้ยังครอบคลุมการเข้าถึง Layout Formats ของรูปร่าง, การเรนเดอร์รูปร่างเป็น SVG, การจัดตำแหน่งรูปร่างบนสไลด์, และการใช้คุณสมบัติ flip สำหรับการสะท้อนแนวนอนและแนวตั้ง อีกทั้งยังมี FAQ สั้น ๆ เกี่ยวกับการรวมรูปร่าง, ลำดับการซ้อนกัน, และการล็อกรูปร่าง
ค้นหารูปร่างบนสไลด์
หัวข้อนี้จะอธิบายเทคนิคง่าย ๆ เพื่อช่วยนักพัฒนาค้นหารูปร่างเฉพาะบนสไลด์โดยไม่ต้องใช้ Id ภายในของมัน การรู้ว่าไฟล์ PowerPoint ไม่มีวิธีระบุตัวรูปร่างบนสไลด์ยกเว้น Id ภายในที่เป็นเอกลักษณ์ทำให้การค้นหาด้วย Id ภายในค่อนข้างยาก รูปร่างทั้งหมดที่เพิ่มลงบนสไลด์จะมี Alt Text เราแนะนำให้นักพัฒนาใช้ Alternative Text เพื่อค้นหารูปร่างเฉพาะ คุณสามารถใช้ MS PowerPoint กำหนด Alternative Text ให้กับวัตถุที่คุณอาจเปลี่ยนแปลงในอนาคตได้
หลังจากตั้งค่า Alternative Text ให้กับรูปร่างที่ต้องการแล้ว คุณสามารถเปิดงานนำเสนอนั้นด้วย Aspose.Slides for C++ และวนลูปผ่านรูปร่างทั้งหมดที่อยู่บนสไลด์ ในแต่ละรอบคุณสามารถตรวจสอบ Alternative Text ของรูปร่างและรูปร่างที่มีข้อความตรงกันจะเป็นรูปร่างที่คุณต้องการ เพื่อแสดงเทคนิคนี้อย่างชัดเจน เราได้สร้างเมธอด FindShape ที่ทำหน้าที่ค้นหารูปร่างเฉพาะในสไลด์และคืนค่ารูปร่างนั้น
ทำสำเนารูปร่าง
เพื่อทำสำเนารูปร่างไปยังสไลด์โดยใช้ Aspose.Slides for C++:
- สร้างอินสแตนซ์ของคลาส Presentation
- เรียกอ้างอิงสไลด์โดยใช้ดัชนีของมัน
- เข้าถึงคอลเล็กชันรูปร่างของสไลด์ต้นฉบับ
- เพิ่มสไลด์ใหม่ในงานนำเสนอ
- ทำสำเนารูปร่างจากคอลเล็กชันของสไลด์ต้นฉบับไปยังสไลด์ใหม่
- บันทึกงานนำเสนอที่แก้ไขแล้วเป็นไฟล์ PPTX
ตัวอย่างด้านล่างเพิ่ม Group Shape ไปยังสไลด์
ลบรูปร่าง
Aspose.Slides for C++ อนุญาตให้นักพัฒนาลบรูปร่างใด ๆ ได้ เพื่อลบรูปร่างจากสไลด์ใดสไลด์หนึ่ง โปรดทำตามขั้นตอนต่อไปนี้:
- สร้างอินสแตนซ์ของคลาส Presentation
- เข้าถึงสไลด์แรก
- ค้นหารูปร่างด้วย AlternativeText ที่กำหนดไว้
- ลบรูปร่าง
- บันทึกไฟล์ลงดิสก์
ซ่อนรูปร่าง
Aspose.Slides for C++ อนุญาตให้นักพัฒนาซ่อนรูปร่างใด ๆ ได้ เพื่อลบรูปร่างจากสไลด์ใดสไลด์หนึ่ง โปรดทำตามขั้นตอนต่อไปนี้:
- สร้างอินสแตนซ์ของคลาส Presentation
- เข้าถึงสไลด์แรก
- ค้นหารูปร่างด้วย AlternativeText ที่กำหนดไว้
- ซ่อนรูปร่าง
- บันทึกไฟล์ลงดิสก์
เปลี่ยนลำดับของรูปร่าง
Aspose.Slides for C++ อนุญาตให้นักพัฒนาเปลี่ยนลำดับการแสดงของรูปร่าง การเปลี่ยนลำดับระบุว่ารูปร่างใดอยู่ด้านหน้าหรือด้านหลัง เพื่อลำดับรูปร่างจากสไลด์ใดสไลด์หนึ่ง โปรดทำตามขั้นตอนต่อไปนี้:
- สร้างอินสแตนซ์ของคลาส Presentation
- เข้าถึงสไลด์แรก
- เพิ่มรูปร่างหนึ่งรูป
- ใส่ข้อความใน Text Frame ของรูปร่างนั้น
- เพิ่มรูปร่างอีกรูปหนึ่งที่มีพิกัดเดียวกัน
- เปลี่ยนลำดับของรูปร่างเหล่านั้น
- บันทึกไฟล์ลงดิสก์
รับค่า Interop Shape ID
Aspose.Slides for C++ อนุญาตให้นักพัฒนา รับค่า Identifier ที่เป็นเอกลักษณ์ของรูปร่างในระดับสไลด์ ซึ่งต่างจากคุณสมบัติ UniqueId ที่ให้ค่า Identifier ในระดับงานนำเสนอ คุณสมบัติ OfficeInteropShapeId ถูกเพิ่มให้กับอินเทอร์เฟซ IShape และคลาส Shape ตามลำดับ ค่าที่ได้จาก OfficeInteropShapeId จะสอดคล้องกับค่า Id ของวัตถุ Microsoft.Office.Interop.PowerPoint.Shape ตัวอย่างโค้ดมีดังนี้
ตั้งค่าคุณสมบัติ AlternativeText
Aspose.Slides for C++ อนุญาตให้นักพัฒนาตั้งค่า AlternateText ของรูปร่างใด ๆ ได้ เพื่อตั้งค่า AlternateText ของรูปร่าง โปรดทำตามขั้นตอนต่อไปนี้:
- สร้างอินสแตนซ์ของคลาส Presentation
- เข้าถึงสไลด์แรก
- เพิ่มรูปร่างใด ๆ ลงในสไลด์
- ทำงานบางอย่างกับรูปร่างที่เพิ่มใหม่
- วนลูปผ่านรูปร่างเพื่อหารูปร่างที่ต้องการ
- ตั้งค่า AlternativeText
- บันทึกไฟล์ลงดิสก์
เข้าถึง Layout Formats ของรูปร่าง
Aspose.Slides for C++ อนุญาตให้นักพัฒนาเข้าถึง Layout Formats ของรูปร่าง บทความนี้สาธิตวิธีเข้าถึงคุณสมบัติ FillFormat และ LineFormat ของรูปร่าง
ตัวอย่างโค้ดมีดังนี้
เรนเดอร์รูปร่างเป็น SVG
ตอนนี้ Aspose.Slides for C++ รองรับการเรนเดอร์รูปร่างเป็น SVG วิธี WriteAsSvg และการโอเวอร์โหลดของมันได้ถูกเพิ่มเข้าไปในคลาส Shape และอินเทอร์เฟซ IShape วิธีนี้ช่วยบันทึกเนื้อหาของรูปร่างเป็นไฟล์ SVG โค้ดตัวอย่างด้านล่างแสดงวิธีส่งออกรูปร่างของสไลด์เป็นไฟล์ SVG
String outSvgFileName = u"SingleShape.svg";
auto pres = System::MakeObject<Presentation>(u"TestExportShapeToSvg.pptx");
auto stream = System::MakeObject<FileStream>(outSvgFileName, FileMode::Create, FileAccess::Write);
pres->get_Slides()->idx_get(0)->get_Shapes()->idx_get(0)->WriteAsSvg(stream);
การจัดตำแหน่งรูปร่าง
Aspose.Slides อนุญาตให้จัดตำแหน่งรูปร่างได้ทั้งสัมพันธ์กับขอบสไลด์หรือสัมพันธ์กับรูปร่างอื่น ๆ เพื่อจุดนี้ได้มีการเพิ่มเมธอดโอเวอร์โหลด SlidesUtil.AlignShapes() และการกำหนดค่าใน enumeration ShapesAlignmentType เพื่อระบุตัวเลือกการจัดตำแหน่งที่เป็นไปได้
ตัวอย่างที่ 1
โค้ดต้นฉบับด้านล่างจัดตำแหน่งรูปร่างที่มีดัชนี 1, 2 และ 4 ให้สอดคล้องกับขอบบนของสไลด์
SharedPtr<Presentation> pres = System::MakeObject<Presentation>(u"example.pptx");
SharedPtr<ISlide> slide = pres->get_Slides()->idx_get(0);
SharedPtr<IShape> shape1 = slide->get_Shapes()->idx_get(1);
SharedPtr<IShape> shape2 = slide->get_Shapes()->idx_get(2);
SharedPtr<IShape> shape3 = slide->get_Shapes()->idx_get(4);
SlideUtil::AlignShapes(ShapesAlignmentType::AlignTop, true, pres->get_Slides()->idx_get(0),
System::MakeArray<int32_t>(
{
slide->get_Shapes()->IndexOf(shape1),
slide->get_Shapes()->IndexOf(shape2),
slide->get_Shapes()->IndexOf(shape3)
}));
ตัวอย่างที่ 2
ตัวอย่างด้านล่างแสดงวิธีจัดตำแหน่งคอลเล็กชันทั้งหมดของรูปร่างโดยอิงจากรูปร่างที่อยู่ด้านล่างสุดในคอลเล็กชัน
SharedPtr<Presentation> pres = MakeObject<Presentation>(u"example.pptx");
SlideUtil::AlignShapes(ShapesAlignmentType::AlignBottom, false, pres->get_Slides()->idx_get(0)->get_Shapes());
คุณสมบัติ Flip
ใน Aspose.Slides, คลาส ShapeFrame ให้การควบคุมการสะท้อนแนวนอนและแนวตั้งของรูปร่างผ่านคุณสมบัติ flipH และ flipV ทั้งสองเป็นประเภท NullableBool ซึ่งรับค่า True เพื่อบ่งบอกการพลิก, False สำหรับไม่มีการพลิก, หรือ NotDefined เพื่อใช้ค่าเริ่มต้น ค่าดังกล่าวสามารถเข้าถึงได้จาก Frame ของรูปร่าง
เพื่อปรับเปลี่ยนการตั้งค่า flip จะสร้างอินสแตนซ์ใหม่ของ ShapeFrame ด้วยตำแหน่งและขนาดปัจจุบันของรูปร่าง, ค่าที่ต้องการสำหรับ flipH และ flipV, และมุมการหมุน จากนั้นกำหนดอินสแตนซ์นี้ให้กับ Frame ของรูปร่างและบันทึกงานนำเสนอ การทำเช่นนี้จะทำให้การสะท้อนเกิดขึ้นและบันทึกลงไฟล์ผลลัพธ์
สมมติว่าเรามีไฟล์ sample.pptx ที่สไลด์แรกมีรูปร่างเดียวที่มีการตั้งค่า flip เริ่มต้นตามด้านล่าง

โค้ดตัวอย่างต่อไปนี้ดึงค่าคุณสมบัติ flip ปัจจุบันของรูปร่างและทำการพลิกทั้งแนวนอนและแนวตั้ง
auto presentation = MakeObject<Presentation>(u"sample.pptx");
auto shape = presentation->get_Slide(0)->get_Shape(0);
// ดึงคุณสมบัติการพลิกแนวนอนของรูปร่าง.
auto horizontalFlip = shape->get_Frame()->get_FlipH();
Console::WriteLine(u"Horizontal flip: " + ObjectExt::ToString(horizontalFlip));
// ดึงคุณสมบัติการพลิกแนวตั้งของรูปร่าง.
auto verticalFlip = shape->get_Frame()->get_FlipV();
Console::WriteLine(u"Vertical flip: " + ObjectExt::ToString(verticalFlip));
auto x = shape->get_Frame()->get_X();
auto y = shape->get_Frame()->get_Y();
auto width = shape->get_Frame()->get_Width();
auto height = shape->get_Frame()->get_Height();
auto flipH = NullableBool::True; // พลิกแนวนอน.
auto flipV = NullableBool::True; // พลิกแนวนอน.
auto rotation = shape->get_Frame()->get_Rotation();
shape->set_Frame(MakeObject<ShapeFrame>(x, y, width, height, flipH, flipV, rotation));
presentation->Save(u"output.pptx", SaveFormat::Pptx);
presentation->Dispose();
ผลลัพธ์:

FAQ
ฉันสามารถรวมรูปร่าง (union/intersect/subtract) บนสไลด์เหมือนในโปรแกรมแก้ไขเดสก์ท็อปได้หรือไม่?
ไม่มี API การทำงานแบบ Boolean ในตัว คุณอาจจำลองได้โดยสร้างโครงร่างที่ต้องการด้วยตนเอง—เช่น คำนวณเรขาคณิตผลลัพธ์ (ผ่าน GeometryPath) แล้วสร้างรูปร่างใหม่ด้วยคอนทัวร์นั้น พร้อมกับลบรูปร่างเดิมหากต้องการ
ฉันจะควบคุมลำดับการซ้อน (z-order) เพื่อให้รูปร่างคงอยู่บนสุดได้อย่างไร?
เปลี่ยนลำดับการแทรก/ย้ายภายในคอลเล็กชัน shapes ของสไลด์ เพื่อให้ได้ผลลัพธ์ที่คาดเดาได้ ควรสรุปลำดับ z-order หลังจากทำการเปลี่ยนแปลงสไลด์ทั้งหมดเสร็จแล้ว
ฉันสามารถ “ล็อก” รูปร่างเพื่อป้องกันผู้ใช้แก้ไขใน PowerPoint ได้หรือไม่?
ทำได้ โดยตั้งค่า shape-level protection flags เช่น การล็อกการเลือก, การย้าย, การปรับขนาด, การแก้ไขข้อความ หากจำเป็นสามารถกำหนดข้อจำกัดบนมาสเตอร์หรือเลย์เอาต์ได้ โปรดทราบว่านี่เป็นการป้องกันระดับ UI ไม่ใช่คุณลักษณะความปลอดภัย; หากต้องการความคุ้มครองที่เข้มงวดกว่า ควรใช้การจำกัดระดับไฟล์ เช่น คำแนะนำให้อ่านอย่างเดียวหรือรหัสผ่าน [/slides/th/cpp/password-protected-presentation/]