ปรับขนาดรูปร่างบนสไลด์การนำเสนอ
ภาพรวม
หนึ่งในคำถามที่พบบ่อยที่สุดจากลูกค้า Aspose.Slides สำหรับ C++ คือวิธีปรับขนาดรูปร่างให้เมื่อขนาดสไลด์เปลี่ยนแปลง ข้อมูลไม่ถูกตัดออก บทความเทคนิคสั้นนี้แสดงวิธีทำเช่นนั้น
ปรับขนาดรูปร่าง
เพื่อป้องกันไม่ให้รูปร่างเบี่ยงเบนเมื่ขนาดสไลด์เปลี่ยนแปลง ให้ปรับตำแหน่งและมิติของแต่ละรูปร่างให้สอดคล้องกับรูปแบบสไลด์ใหม่
// โหลดไฟล์การนำเสนอ.
auto presentation = MakeObject<Presentation>(u"sample.ppt");
// รับขนาดสไลด์เดิม.
float currentHeight = presentation->get_SlideSize()->get_Size().get_Height();
float currentWidth = presentation->get_SlideSize()->get_Size().get_Width();
// เปลี่ยนขนาดสไลด์โดยไม่สเกลรูปร่างที่มีอยู่.
presentation->get_SlideSize()->SetSize(SlideSizeType::A4Paper, SlideSizeScaleType::DoNotScale);
// รับขนาดสไลด์ใหม่.
float newHeight = presentation->get_SlideSize()->get_Size().get_Height();
float newWidth = presentation->get_SlideSize()->get_Size().get_Width();
float heightRatio = newHeight / currentHeight;
float widthRatio = newWidth / currentWidth;
// Resize and reposition shapes on every slide.
for (auto&& slide : presentation->get_Slides())
{
for (auto&& shape : slide->get_Shapes())
{
// สเกลขนาดรูปร่าง.
shape->set_Height(shape->get_Height() * heightRatio);
shape->set_Width(shape->get_Width() * widthRatio);
// สเกลตำแหน่งของรูปร่าง.
shape->set_Y(shape->get_Y() * heightRatio);
shape->set_X(shape->get_X() * widthRatio);
}
}
presentation->Save(u"output.pptx", SaveFormat::Pptx);
presentation->Dispose();
ใช้โค้ดต่อไปนี้เพื่อปรับขนาดสไลด์ที่มีตาราง สำหรับตาราง การตั้งค่าความกว้างหรือความสูงเป็นกรณีพิเศษ: คุณต้องปรับความสูงของแถวและความกว้างของคอลัมน์แต่ละอันเพื่อเปลี่ยนขนาดโดยรวมของตาราง
auto presentation = MakeObject<Presentation>(u"sample.pptx");
// รับขนาดสไลด์เดิม.
float currentHeight = presentation->get_SlideSize()->get_Size().get_Height();
float currentWidth = presentation->get_SlideSize()->get_Size().get_Width();
// เปลี่ยนขนาดสไลด์โดยไม่สเกลรูปร่างที่มีอยู่.
presentation->get_SlideSize()->SetSize(SlideSizeType::A4Paper, SlideSizeScaleType::DoNotScale);
//presentation.SlideSize.Orientation = SlideOrienation.Portrait;
// รับขนาดสไลด์ใหม่.
float newHeight = presentation->get_SlideSize()->get_Size().get_Height();
float newWidth = presentation->get_SlideSize()->get_Size().get_Width();
float heightRatio = newHeight / currentHeight;
float widthRatio = newWidth / currentWidth;
for (auto&& master : presentation->get_Masters())
{
for (auto&& shape : master->get_Shapes())
{
// สเกลขนาดรูปร่าง.
shape->set_Height(shape->get_Height() * heightRatio);
shape->set_Width(shape->get_Width() * widthRatio);
// สเกลตำแหน่งของรูปร่าง.
shape->set_Y(shape->get_Y() * heightRatio);
shape->set_X(shape->get_X() * widthRatio);
}
for (auto&& layoutSlide : master->get_LayoutSlides())
{
for (auto&& shape : layoutSlide->get_Shapes())
{
// สเกลขนาดรูปร่าง.
shape->set_Height(shape->get_Height() * heightRatio);
shape->set_Width(shape->get_Width() * widthRatio);
// สเกลตำแหน่งของรูปร่าง.
shape->set_Y(shape->get_Y() * heightRatio);
shape->set_X(shape->get_X() * widthRatio);
}
}
}
for (auto&& slide : presentation->get_Slides())
{
for (auto&& shape : slide->get_Shapes())
{
// สเกลขนาดรูปร่าง.
shape->set_Height(shape->get_Height() * heightRatio);
shape->set_Width(shape->get_Width() * widthRatio);
// สเกลตำแหน่งของรูปร่าง.
shape->set_Y(shape->get_Y() * heightRatio);
shape->set_X(shape->get_X() * widthRatio);
if (ObjectExt::Is<ITable>(shape))
{
SharedPtr<ITable> table = ExplicitCast<ITable>(shape);
for (auto&& row : table->get_Rows())
{
row->set_MinimalHeight(row->get_MinimalHeight() * heightRatio);
}
for (auto&& column : table->get_Columns())
{
column->set_Width(column->get_Width() * widthRatio);
}
}
}
}
presentation->Save(u"output.pptx", SaveFormat::Pptx);
presentation->Dispose();
คำถามที่พบบ่อย
ทำไมรูปร่างถึงบิดเบี้ยวหรือถูกตัดออกหลังจากปรับขนาดสไลด์?
เมื่อปรับขนาดสไลด์ รูปร่างจะคงตำแหน่งและขนาดเดิมไว้ เว้นแต่จะมีการเปลี่ยนสเกลอย่างชัดเจน สิ่งนี้อาจทำให้เนื้อหาโดนตัดหรือรูปร่างเบี่ยงเบน
โค้ดที่ให้มาทำงานกับทุกประเภทของรูปร่างหรือไม่?
ตัวอย่างพื้นฐานทำงานกับรูปแบบรูปร่างส่วนใหญ่ (กล่องข้อความ, รูปภาพ, แผนภูมิ ฯลฯ) อย่างไรก็ตาม สำหรับตารางคุณต้องจัดการแถวและคอลัมน์แยกกัน เนื่องจากความสูงและความกว้างของตารางกำหนดโดยมิติของเซลล์แต่ละเซลล์
ฉันจะปรับขนาดตารางอย่างไรเมื่อปรับขนาดสไลด์?
คุณต้องวนลูปผ่านทุกแถวและคอลัมน์ของตารางและปรับความสูงและความกว้างของพวกมันตามสัดส่วนตามที่แสดงในตัวอย่างโค้ดที่สอง
การปรับขนาดนี้จะทำงานกับสไลด์มาสเตอร์และสไลด์เลเอาต์หรือไม่?
ใช่ แต่คุณควรวนลูปผ่าน Masters และ Layout slides แล้วใช้ตรรกะการสเกลเดียวกันกับรูปร่างของพวกมันเพื่อให้การนำเสนอมีความสอดคล้องกันทั่วทั้งไฟล์
ฉันสามารถเปลี่ยนทิศทางของสไลด์ (แนวตั้ง/แนวนอน) พร้อมกับการปรับขนาดได้หรือไม่?
ได้ คุณสามารถใช้ presentation->get_SlideSize()->set_Orientation เพื่อเปลี่ยนทิศทาง ตรวจสอบให้แน่ใจว่าคุณตั้งค่าตรรกะการสเกลให้เหมาะสมเพื่อคงรูปแบบเดิม
มีขีดจำกัดขนาดสไลด์ที่ฉันสามารถตั้งค่าได้หรือไม่?
Aspose.Slides รองรับขนาดที่กำหนดเอง แต่ขนาดที่ใหญ่มากอาจส่งผลต่อประสิทธิภาพหรือความเข้ากันได้กับบางเวอร์ชันของ PowerPoint
ฉันจะป้องกันไม่ให้รูปร่างที่มีอัตราส่วนคงที่บิดเบี้ยวได้อย่างไร?
คุณสามารถตรวจสอบเมธอด get_AspectRatioLocked ของรูปร่างก่อนทำการสเกล หากถูกล็อก ให้ปรับความกว้างหรือความสูงโดยสัดส่วนแทนการสเกลแยกกัน