จัดการการเปลี่ยนสไลด์ในการนำเสนอด้วย Java
ภาพรวม
การเปลี่ยหน้า (Slide transitions) ควบคุมวิธีการแสดงสไลด์ระหว่างการนำเสนอ ด้วย Aspose.Slides for Java คุณสามารถเลือกเอฟเฟกต์การเปลี่ยนสำหรับแต่ละสไลด์ ตั้งค่าการดำเนินการโดยคลิกเมาส์หรือโดยตัวจับเวลา และปรับตัวเลือกที่เฉพาะเจาะจงสำหรับเอฟเฟกต์ บทความนี้ใช้ตัวอย่าง Java เพื่อใช้การเปลี่ยน ตั้งค่าระยะเวลาเปลี่ยนที่แน่นอน จัดการเวลาแสดงสไลด์ และสร้างการเปลี่ยน Morph ระหว่างสองสไลด์ ตัวอย่างยังแสดงวิธีบันทึกการตั้งค่าเป็นไฟล์ PPTX
เพิ่มการเปลี่ยนสไลด์
เพื่อใช้งานการเปลี่ยน ให้โหลดพรีเซนเทชันด้วยคลาส Presentation และเข้าถึงการตั้งค่าการเปลี่ยนของสไลด์ผ่าน getSlideShowTransition. ใช้ setType พร้อมค่าจาก enumeration TransitionType จากนั้นบันทึกพรีเซนเทชัน
ตัวอย่างต่อไปใช้การเปลี่ยน Circle กับสไลด์แรกและการเปลี่ยน Comb กับสไลด์ที่สอง ใช้ไฟล์ input.pptx ที่มีอย่างน้อยสองสไลด์
import com.aspose.slides.*;
Presentation presentation = new Presentation("input.pptx");
try {
if (presentation.getSlides().size() >= 2) {
presentation.getSlides().get_Item(0).getSlideShowTransition().setType(TransitionType.Circle);
presentation.getSlides().get_Item(1).getSlideShowTransition().setType(TransitionType.Comb);
presentation.save("slide-transitions.pptx", SaveFormat.Pptx);
} else {
System.out.println("The input presentation must contain at least two slides.");
}
} finally {
presentation.dispose();
}
เพิ่มการเปลี่ยนสไลด์ขั้นสูง
คุณสามารถกำหนดระยะเวลาที่สไลด์อยู่บนหน้าจอและการคลิกเมาส์ที่จะดำเนินการต่อได้ วิธีต่อไปนี้ควบคุมพฤติกรรมนี้:
- setAdvanceOnClick ทำให้ผู้ชมสามารถดำเนินการต่อโดยคลิกเมาส์
- setAdvanceAfter เปิดการดำเนินการอัตโนมัติ
- setAdvanceAfterTime กำหนดเวลาหน่วงก่อนการดำเนินการอัตโนมัติ หน่วยเป็นมิลลิวินาที
เปิดการดำเนินการทั้งแบบคลิกและแบบจับเวลาเพื่อให้ผู้ชมสามารถกดคลิกหรือรอจนถึงเวลา เพื่อใช้เฉพาะตัวจับเวลา ให้ส่งค่า false ไปยัง setAdvanceOnClick. การหน่วงเวลาควบคุมเมื่อการนำเสนอเปลี่ยน ไม่ได้กำหนดระยะเวลาของเอฟเฟกต์การเปลี่ยนภาพ
ตัวอย่างนี้กำหนดเอฟเฟกต์ต่าง ๆ ให้กับสามสไลด์แรกและเปิดการดำเนินการอัตโนมัติหลังจาก 3, 5, และ 7 วินาที ตามลำดับ การคลิกเมาส์ก็สามารถดำเนินการต่อสไลด์เหล่านี้ได้ ใช้ไฟล์ input.pptx ที่มีอย่างน้อยสามสไลด์
import com.aspose.slides.*;
Presentation presentation = new Presentation("input.pptx");
try {
if (presentation.getSlides().size() >= 3) {
ISlideShowTransition firstTransition = presentation.getSlides().get_Item(0).getSlideShowTransition();
firstTransition.setType(TransitionType.Circle);
firstTransition.setAdvanceOnClick(true);
firstTransition.setAdvanceAfter(true);
firstTransition.setAdvanceAfterTime(3000);
ISlideShowTransition secondTransition = presentation.getSlides().get_Item(1).getSlideShowTransition();
secondTransition.setType(TransitionType.Comb);
secondTransition.setAdvanceOnClick(true);
secondTransition.setAdvanceAfter(true);
secondTransition.setAdvanceAfterTime(5000);
ISlideShowTransition thirdTransition = presentation.getSlides().get_Item(2).getSlideShowTransition();
thirdTransition.setType(TransitionType.Zoom);
thirdTransition.setAdvanceOnClick(true);
thirdTransition.setAdvanceAfter(true);
thirdTransition.setAdvanceAfterTime(7000);
presentation.save("advanced-transitions.pptx", SaveFormat.Pptx);
} else {
System.out.println("The input presentation must contain at least three slides.");
}
} finally {
presentation.dispose();
}
เพื่อตรวจสอบว่าการดำเนินการแบบจับเวลาถูกเปิดหรือไม่ ให้เรียก getAdvanceAfter. ค่าหน่วงเวลาที่เก็บไว้เพียงอย่างเดียวไม่บ่งชี้ว่าตัวจับเวลากำลังทำงาน
ตัวอย่างต่อไปเปิดไฟล์ที่บันทึกไว้ด้านบน รายงานตัวจับเวลาที่เปิดอยู่แต่ละรายการ และปิดการดำเนินการอัตโนมัติสำหรับสไลด์ที่มีการหน่วงเวลามากกว่าสองวินาที เปิดการคลิกเมาส์สำหรับสไลด์เหล่านั้นและบันทึกการตั้งค่าที่อัปเดต
import com.aspose.slides.*;
Presentation presentation = new Presentation("advanced-transitions.pptx");
try {
for (ISlide slide : presentation.getSlides()) {
ISlideShowTransition transition = slide.getSlideShowTransition();
if (transition.getAdvanceAfter()) {
System.out.println("Slide " + slide.getSlideNumber() + ": advance after " + transition.getAdvanceAfterTime() + " ms.");
if (transition.getAdvanceAfterTime() > 2000) {
transition.setAdvanceAfter(false);
transition.setAdvanceOnClick(true);
}
}
}
presentation.save("adjusted-transitions.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
ควบคุมเวลาเปลี่ยนอย่างแม่นยำ
ใช้ setDuration เพื่อระบุความยาวที่แน่นอนของเอฟเฟกต์การเปลี่ยนเป็นมิลลิวินาที วิธี getSlideShowTransition ของสไลด์เปิดเผยการตั้งค่าเหล่านี้ผ่าน ISlideShowTransition:
| Method | Purpose |
|---|---|
| setDuration | ตั้งค่าระยะเวลาของเอฟเฟกต์การเปลี่ยนเองเป็นมิลลิวินาที |
| setAdvanceAfterTime | ตั้งค่าหน่วงเวลาก่อนสไลด์ดำเนินการอัตโนมัติเป็นมิลลิวินาที ส่งค่า true ไปยัง setAdvanceAfter เพื่อเปิดตัวจับเวลา |
| setSpeed | เลือกหมวดความเร็วที่กำหนดไว้ล่วงหน้าจาก TransitionSpeed: Slow, Medium, หรือ Fast ใช้เมื่อไม่ได้ระบุระยะเวลาที่แน่นอน |
setDuration ควบคุมเฉพาะเอฟเฟกต์การเปลี่ยน ไม่ได้กำหนดระยะเวลาที่สไลด์คงอยู่บนหน้าจอ กำหนดหน่วงเวลาการดำเนินการอัตโนมัติแยกต่างหาก เมื่อไม่มีการตั้งค่าระยะเวลาชัดเจน Aspose.Slides จะกำหนดระยะเวลาเอฟเฟกต์จากประเภทการเปลี่ยนและค่าจาก getSpeed
ใช้ระยะเวลาเดียวกันกับทุกสไลด์
เพื่อให้จังหวะสอดคล้อง ให้ใช้เอฟเฟกต์และระยะเวลาเดียวกันกับทุกสไลด์ ตัวอย่างนี้โหลด input.pptx เลือก Fade จาก TransitionType และตั้งค่าระยะเวลาให้แต่ละการเปลี่ยนเป็น 750 มิลลิวินาที แยกเปิดการดำเนินการอัตโนมัติหลัง 5,000 มิลลิวินาทีและปิดการดำเนินการโดยคลิกเมาส์ จากนั้นบันทึกผลเป็น PPTX
import com.aspose.slides.*;
Presentation presentation = new Presentation("input.pptx");
try {
for (ISlide slide : presentation.getSlides()) {
ISlideShowTransition transition = slide.getSlideShowTransition();
transition.setType(TransitionType.Fade);
transition.setDuration(750);
// กำหนดการดำเนินการอัตโนมัติโดยอิสระจากระยะเวลาเอฟเฟกต์.
transition.setAdvanceAfter(true);
transition.setAdvanceAfterTime(5000);
transition.setAdvanceOnClick(false);
}
presentation.save("precise-transitions.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
ตั้งค่าระยะเวลาต่างกันสำหรับสไลด์แต่ละอัน
สไลด์ต่าง ๆ สามารถใช้ระยะเวลาของเอฟเฟกต์ที่ต่างกันได้ ตัวอย่างเช่น ใช้การเปลี่ยนสั้นสำหรับสไลด์หัวเรื่องและใช้การเปลี่ยนยาวสำหรับการแนะนำส่วน ตัวอย่างนี้ตั้งค่า 500 มิลลิวินาทีสำหรับสไลด์แรกและ 1,200 มิลลิวินาทีสำหรับสไลด์ที่สอง ใช้ไฟล์ input.pptx ที่มีอย่างน้อยสองสไลด์
import com.aspose.slides.*;
Presentation presentation = new Presentation("input.pptx");
try {
if (presentation.getSlides().size() >= 2) {
ISlideShowTransition firstTransition = presentation.getSlides().get_Item(0).getSlideShowTransition();
firstTransition.setType(TransitionType.Fade);
firstTransition.setDuration(500);
ISlideShowTransition secondTransition = presentation.getSlides().get_Item(1).getSlideShowTransition();
secondTransition.setType(TransitionType.Push);
secondTransition.setDuration(1200);
presentation.save("individual-transition-durations.pptx", SaveFormat.Pptx);
} else {
System.out.println("The input presentation must contain at least two slides.");
}
} finally {
presentation.dispose();
}
ประสานการเปลี่ยนกับผลลัพธ์ที่เป็นอนิเมชัน
เมื่อเตรียม animated GIF, HTML5 presentation, หรือ video, ตั้งค่าระยะเวลาเปลี่ยนที่แน่นอนก่อนส่งออกเพื่อให้สอดคล้องกับจังหวะที่ต้องการ ตัวอย่างเช่น ใช้การจาง 600 มิลลิวินาทีระหว่างฉาก และปรับหน่วงเวลาการดำเนินการของแต่ละสไลด์แยกกันเพื่อให้มีเวลาในการบรรยายหรือเนื้อหา
สำหรับ GIF และวิดีโอ ให้ประสานอัตราเฟรมของผลลัพธ์กับระยะเวลาเอฟเฟกต์: 600 มิลลิวินาทีเท่ากับ 18 เฟรมที่ 30 เฟรมต่อวินาที ใน HTML5 เปิดการเปลี่ยนแบบอนิเมชันในการตั้งค่าการส่งออก ตรวจสอบว่าไฟล์ส่งออกรองรับเอฟเฟกต์และตัวเลือกเวลาใดบ้างและพรีวิวผลลัพธ์เพื่อยืนยันการซิงโครไนซ์
อ่านระยะเวลาเปลี่ยนที่มีอยู่
เรียก getDuration ก่อนแก้ไขการเปลี่ยนเพื่อดูว่ามีค่าเฉพาะที่จัดเก็บหรือไม่ ค่า -1 หมายถึงไม่มีการตั้งค่าระยะเวลาแบบชัดเจน; ค่าที่เป็นจำนวนเต็มบวกหรือศูนย์ระบุระยะเวลาที่จัดเก็บเป็นมิลลิวินาที ค่าที่ไม่ได้ตั้งค่าไม่ใช่ระยะเวลาการเล่นที่คำนวน: Aspose.Slides ใช้ประเภทการเปลี่ยนและค่าจาก getSpeed เพื่อคำนวนระยะเวลา การตั้งค่าประเภทการเปลี่ยนอาจเริ่มต้นระยะเวลา ดังนั้นควรตรวจสอบการตั้งค่าเดิมก่อน
import com.aspose.slides.*;
Presentation presentation = new Presentation("input.pptx");
try {
for (ISlide slide : presentation.getSlides()) {
ISlideShowTransition transition = slide.getSlideShowTransition();
int duration = transition.getDuration();
if (duration >= 0) {
System.out.println("Slide " + slide.getSlideNumber() + ": stored transition duration is " + duration + " ms.");
} else {
System.out.println("Slide " + slide.getSlideNumber() + ": no explicit duration; timing depends on transition type " + transition.getType() + " and speed " + transition.getSpeed() + ".");
}
}
} finally {
presentation.dispose();
}
การเปลี่ยน Morph
การเปลี่ยน Morph ทำให้การเปลี่ยนแปลงระหว่างวัตถุบนสไลด์ต่อเนื่องเป็นภาพเคลื่อนไหว เพื่อสร้างเอฟเฟกต์ Morph อย่างง่าย ให้คัดลอกสไลด์ ย้ายหรือปรับขนาดวัตถุบนสไลด์ที่คัดลอก แล้วใส่การเปลี่ยน Morph กับสไลด์ที่สอง การทำเช่นนี้จะทำให้วัตถุที่ตรงกันทำการเคลื่อนไหวจากสถานะเริ่มต้นไปยังสถานะที่แก้ไข
ตัวอย่างต่อไปสร้างสไลด์ที่มีสี่เหลี่ยมข้อความ คัดลอกสไลด์และเปลี่ยนตำแหน่งและขนาดของสี่เหลี่ยมบนสไลด์คัดลอก แล้วเลือก Morph จาก enumeration TransitionType สำหรับสไลด์ที่สอง เปิดไฟล์ที่บันทึกไว้ในตัวดูพรีเซนเทชันที่รองรับ Morph เพื่อดูเอฟเฟกต์ระหว่างการนำเสนอ
import com.aspose.slides.*;
Presentation presentation = new Presentation();
try {
ISlide firstSlide = presentation.getSlides().get_Item(0);
IAutoShape rectangle = firstSlide.getShapes().addAutoShape(ShapeType.Rectangle, 100, 100, 400, 100);
rectangle.getTextFrame().setText("Morph transition");
ISlide secondSlide = presentation.getSlides().addClone(firstSlide);
IShape movedRectangle = secondSlide.getShapes().get_Item(0);
movedRectangle.setX(movedRectangle.getX() + 100);
movedRectangle.setY(movedRectangle.getY() + 50);
movedRectangle.setWidth(movedRectangle.getWidth() - 200);
movedRectangle.setHeight(movedRectangle.getHeight() - 10);
secondSlide.getSlideShowTransition().setType(TransitionType.Morph);
presentation.save("morph-transition.pptx", SaveFormat.Pptx);
} finally {
presentation.dispose();
}
ประเภทการเปลี่ยน Morph
enumeration TransitionMorphType ควบคุมวิธีที่ Morph จับคู่และทำภาพเคลื่อนไหวของเนื้อหา:
- ByObject ถือแต่ละรูปทรงเป็นวัตถุทั้งหมด
- ByWord ทำภาพเคลื่อนไหวข้อความโดยจับคู่คำเมื่อเป็นไปได้
- ByChar ทำภาพเคลื่อนไหวข้อความโดยจับคู่อักขระเมื่อเป็นไปได้
ใช้ setType เพื่อเลือก Morph ก่อนเข้าถึง getValue. ค่าที่ได้จะให้ interface IMorphTransition ซึ่งเมธอด setMorphType เลือกโหมดการจับคู่
ตัวอย่างนี้เปิดพรีเซนเทชันที่สร้างในส่วนก่อนหน้าและกำหนดให้สไลด์ที่สองใช้การเคลื่อนไหว Morph แบบตามคำ
import com.aspose.slides.*;
Presentation presentation = new Presentation("morph-transition.pptx");
try {
if (presentation.getSlides().size() >= 2) {
ISlideShowTransition transition = presentation.getSlides().get_Item(1).getSlideShowTransition();
transition.setType(TransitionType.Morph);
ITransitionValueBase transitionValue = transition.getValue();
if (transitionValue instanceof IMorphTransition) {
IMorphTransition morphTransition = (IMorphTransition) transitionValue;
morphTransition.setMorphType(TransitionMorphType.ByWord);
presentation.save("morph-by-word.pptx", SaveFormat.Pptx);
} else {
System.out.println("Morph transition options are unavailable.");
}
} else {
System.out.println("The input presentation must contain at least two slides.");
}
} finally {
presentation.dispose();
}
ตั้งค่าเอฟเฟกต์การเปลี่ยน
บางการเปลี่ยนเปิดเผยตัวเลือกเพิ่มเติม เช่น ทิศทางหรือการเริ่มจากหน้าจอสีดำ ตัวเลือกที่ใช้ได้ขึ้นอยู่กับการเปลี่ยนที่เลือกด้วย setType. ตั้งค่าประเภทก่อนแล้วใช้ interface ที่เหมาะสมจาก getValue
ตัวอย่างต่อไปใช้การเปลี่ยน Cut กับสไลด์แรกของ input.pptx. มันเรียก setFromBlack ผ่าน IOptionalBlackTransition เพื่อให้การเปลี่ยนเริ่มจากหน้าจอสีดำ
import com.aspose.slides.*;
Presentation presentation = new Presentation("input.pptx");
try {
ISlideShowTransition transition = presentation.getSlides().get_Item(0).getSlideShowTransition();
transition.setType(TransitionType.Cut);
ITransitionValueBase transitionValue = transition.getValue();
if (transitionValue instanceof IOptionalBlackTransition) {
IOptionalBlackTransition cutTransition = (IOptionalBlackTransition) transitionValue;
cutTransition.setFromBlack(true);
presentation.save("cut-from-black.pptx", SaveFormat.Pptx);
} else {
System.out.println("Cut transition options are unavailable.");
}
} finally {
presentation.dispose();
}
คำถามที่พบบ่อย
ฉันสามารถควบคุมความเร็วการเล่นของการเปลี่ยนสไลด์ได้หรือไม่?
ได้. ควรใช้ setDuration เมื่อคุณต้องการระยะเวลาเอฟเฟกต์ที่แน่นอนเป็นมิลลิวินาที ใช้ setSpeed เมื่อหมวด TransitionSpeed ที่กำหนดไว้ล่วงหน้า—Slow, Medium, หรือ Fast เพียงพอและไม่มีการตั้งค่าระยะเวลาโดยตรง การตั้งค่าเหล่านี้ควบคุมเอฟเฟกต์การเปลี่ยนโดยอิสระจากหน่วงเวลาการดำเนินการอัตโนมัติ
ฉันสามารถแนบเสียงกับการเปลี่ยนและทำให้วนซ้ำได้หรือไม่?
ได้. กำหนดเสียงฝังด้วย setSound, ส่งค่า StartSound จาก enumeration TransitionSoundMode ไปยัง setSoundMode, และเปิด setSoundLoop ด้วยค่า true. เสียงจะวนซ้ำจนกว่าจะมีเหตุการณ์เสียงถัดไปในการนำเสนอ
วิธีที่เร็วที่สุดในการใช้การเปลี่ยนเดียวกันกับทุกสไลด์คืออะไร?
วนลูปผ่านคอลเลกชัน getSlides ของพรีเซนเทชันและเรียก setType ด้วยค่าเดียวกันสำหรับการเปลี่ยนของแต่ละสไลด์ ตั้งค่าตัวเลือกเวลาและเอฟเฟกต์ใด ๆ ในลูปเดียวกันเพื่อให้พฤติกรรมสอดคล้องกันในทุกสไลด์
ฉันจะตรวจสอบว่าการเปลี่ยนใดถูกตั้งค่าบนสไลด์ปัจจุบันได้อย่างไร?
เรียก getType บนผลลัพธ์ของ getSlideShowTransition ของสไลด์ จะได้รับค่าจาก enumeration TransitionType; ค่า None หมายถึงไม่มีเอฟเฟกต์การเปลี่ยนใด ๆ ถูกใช้