在簡報中使用 PHP 套用形狀動畫
簡介
動畫是可以套用到文字、圖像、形狀或圖表的視覺效果。它們為簡報或其組成部分賦予活力。
為何在簡報中使用動畫?
使用動畫,您可以
- 控制資訊的流向
- 強調重要要點
- 提升觀眾的興趣或參與度
- 讓內容更易閱讀、同化或處理
- 吸引讀者或觀眾注意簡報中的重要部份
PowerPoint 提供了大量選項與工具,用於 進場、退場、強調與移動路徑類別的動畫與動畫效果。
Aspose.Slides 中的動畫
- Aspose.Slides 在
Aspose.Slides.Animation命名空間下提供您處理動畫所需的類別與型別, - Aspose.Slides 在 EffectType 列舉中提供超過 150 個動畫效果。這些效果本質上與 PowerPoint 中使用的效果相同(或等效)。
將動畫套用至文字方塊
Aspose.Slides for PHP via Java 允許您將動畫套用至形狀中的文字。
- 建立 Presentation 類別的實例。
- 透過索引取得投影片的參考。
- 加入一個矩形 AutoShape。
- 將文字加入
AutoShape的 TextFrame。 - 取得主要的效果序列。
- 將動畫效果加入 AutoShape。
- 使用
TextAnimation.setBuildType方法,並使用BuildType列舉中的值。 - 將簡報寫入磁碟,儲存為 PPTX 檔案。
以下 PHP 程式碼示範如何將 Fade 效果套用至 AutoShape,並將文字動畫設為 By 1st Level Paragraphs 值:
# 建立一個代表簡報檔案的 Presentation 類別實例。
$pres = new Presentation();
try {
$sld = $pres->getSlides()->get_Item(0);
# 新增帶文字的 AutoShape
$autoShape = $sld->getShapes()->addAutoShape(ShapeType::Rectangle, 20, 20, 150, 100);
$textFrame = $autoShape->getTextFrame();
$textFrame->setText("First paragraph \nSecond paragraph \n Third paragraph");
# 取得投影片的主要序列。
$sequence = $sld->getTimeline()->getMainSequence();
# 為形狀新增 Fade 動畫效果
$effect = $sequence->addEffect($autoShape, EffectType::Fade, EffectSubType::None, EffectTriggerType::OnClick);
# 依第一層段落為形狀文字加入動畫
$effect->getTextAnimation()->setBuildType(BuildType::ByLevelParagraphs1);
# 將 PPTX 檔案儲存至磁碟
$pres->save($path . "AnimText_out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
將動畫套用至圖片框架
- 建立 Presentation 類別的實例。
- 透過索引取得投影片的參考。
- 在投影片上新增或取得 PictureFrame。
- 取得主要的效果序列。
- 將動畫效果加入 PictureFrame。
- 將簡報寫入磁碟,儲存為 PPTX 檔案。
以下 PHP 程式碼示範如何將 Fly 效果套用至圖片框架:
# 建立代表簡報檔案的 Presentation 類別實例。
$pres = new Presentation();
try {
# 載入要加入簡報影像集合的圖像
$picture;
$image = Images->fromFile("aspose-logo.jpg");
try {
$picture = $pres->getImages()->addImage($image);
} finally {
if (!java_is_null($image)) {
$image->dispose();
}
}
# 在投影片上新增圖片框架
$picFrame = $pres->getSlides()->get_Item(0)->getShapes()->addPictureFrame(ShapeType::Rectangle, 50, 50, 100, 100, $picture);
# 取得投影片的主要序列。
$sequence = $pres->getSlides()->get_Item(0)->getTimeline()->getMainSequence();
# 為圖片框架新增 From Left 飛入動畫效果
$effect = $sequence->addEffect($picFrame, EffectType::Fly, EffectSubType::Left, EffectTriggerType::OnClick);
# 將 PPTX 檔案儲存至磁碟
$pres->save($path . "AnimImage_out.pptx", SaveFormat::Pptx);
} catch (JavaException $e) {
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
將動畫套用至形狀
- 建立 the Presentation 類別的實例。
- 透過索引取得投影片的參考。
- 加入一個矩形 AutoShape。
- 加入一個斜角 AutoShape(當此物件被點擊時,動畫會播放)。
- 在斜角形狀上建立效果序列。
- 建立自訂的
UserPath。 - 新增移動至
UserPath的指令。 - 將簡報寫入磁碟,儲存為 PPTX 檔案。
以下 PHP 程式碼示範如何將 PathFootball(path football)效果套用至形狀:
# 建立代表 PPTX 檔案的 Presentation 類別實例。
$pres = new Presentation();
try {
$sld = $pres->getSlides()->get_Item(0);
# 從頭建立現有形狀的 PathFootball 效果。
$ashp = $sld->getShapes()->addAutoShape(ShapeType::Rectangle, 150, 150, 250, 25);
$ashp->addTextFrame("Animated TextBox");
# 加入 PathFootBall 動畫效果
$pres->getSlides()->get_Item(0)->getTimeline()->getMainSequence()->addEffect($ashp, EffectType::PathFootball, EffectSubType::None, EffectTriggerType::AfterPrevious);
# 建立某種「按鈕」。
$shapeTrigger = $pres->getSlides()->get_Item(0)->getShapes()->addAutoShape(ShapeType::Bevel, 10, 10, 20, 20);
# 為此按鈕建立效果序列。
$seqInter = $pres->getSlides()->get_Item(0)->getTimeline()->getInteractiveSequences()->add($shapeTrigger);
# 建立自訂使用者路徑。物件僅會在按鈕點擊後移動。
$fxUserPath = $seqInter->addEffect($ashp, EffectType::PathUser, EffectSubType::None, EffectTriggerType::OnClick);
# 加入移動指令,因為建立的路徑是空的。
$motionBhv = $fxUserPath->getBehaviors()->get_Item(0);
$pts = new Point2DFloat[1];
$pts[0] = new Point2DFloat(0.076, 0.59);
$motionBhv->getPath()->add(MotionCommandPathType::LineTo, $pts, MotionPathPointsType::Auto, true);
$pts[0] = new Point2DFloat(-0.076, -0.59);
$motionBhv->getPath()->add(MotionCommandPathType::LineTo, $pts, MotionPathPointsType::Auto, false);
$motionBhv->getPath()->add(MotionCommandPathType::End, null, MotionPathPointsType::Auto, false);
# 將 PPTX 檔案寫入磁碟
$pres->save("AnimExample_out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
取得套用於形狀的動畫效果
以下範例說明如何使用來自 Sequence 類別的 getEffectsByShape 方法,取得套用於形狀的所有動畫效果。
範例 1:取得普通投影片上形狀的動畫效果
先前您已了解如何在 PowerPoint 簡報的形狀上加入動畫效果。以下範例程式碼示範如何取得簡報 AnimExample_out.pptx 中第一張普通投影片上第一個形狀所套用的效果。
$Array = new java_class("java.lang.reflect.Array");
$presentation = new Presentation("AnimExample_out.pptx");
try {
$firstSlide = $presentation->getSlides()->get_Item(0);
# 取得投影片的主要動畫序列。
$sequence = $firstSlide->getTimeline()->getMainSequence();
# 取得第一張投影片上的第一個形狀。
$shape = $firstSlide->getShapes()->get_Item(0);
# 取得套用於該形狀的動畫效果。
$shapeEffects = $sequence->getEffectsByShape($shape);
if (java_values($Array->getLength($shapeEffects)) > 0) {
echo("The shape " . $shape->getName() . " has " . $Array->getLength($shapeEffects) . " animation effects.");
}
} finally {
if (!java_is_null($presentation)) {
$presentation->dispose();
}
}
範例 2:取得所有動畫效果,包含從占位區繼承的效果
如果普通投影片上的形狀具有佈局投影片和/或母片投影片上的占位區,且這些占位區已加入動畫效果,則在投影片放映時,形狀的所有效果都會被播放,包含從占位區繼承的效果。
假設我們有一個 PowerPoint 簡報檔案 sample.pptx,其中有一張投影片僅包含一個頁腳形狀,文字為「Made with Aspose.Slides」,且已套用 Random Bars 效果。

再假設在 layout 投影片的頁腳占位區套用了 Split 效果。

最後,Fly In 效果套用於 master 投影片的頁腳占位區。

以下範例程式碼示範如何使用 Shape 類別的 getBasePlaceholder 方法,存取形狀的占位區,並取得套用於頁腳形狀的動畫效果,包含來自佈局與母片投影片占位區的繼承效果。
$presentation = new Presentation("sample.pptx");
$slide = $presentation->getSlides()->get_Item(0);
// 取得普通投影片上形狀的動畫效果。
$shape = $slide->getShapes()->get_Item(0);
$shapeEffects = $slide->getTimeline()->getMainSequence()->getEffectsByShape($shape);
// 取得版面投影片上占位區的動畫效果。
$layoutShape = $shape->getBasePlaceholder();
$layoutShapeEffects = $slide->getLayoutSlide()->getTimeline()->getMainSequence()->getEffectsByShape($layoutShape);
// 取得母片投影片上占位區的動畫效果。
$masterShape = $layoutShape->getBasePlaceholder();
$masterShapeEffects = $slide->getLayoutSlide()->getMasterSlide()->getTimeline()->getMainSequence()->getEffectsByShape($masterShape);
echo "Main sequence of shape effects:" . PHP_EOL;
printEffects($masterShapeEffects);
printEffects($layoutShapeEffects);
printEffects($shapeEffects);
$presentation->dispose();
function printEffects($effects) {
foreach ($effects as $effect) {
echo "Type: " . $effect->getType() . ", subtype: " . $effect->getSubtype() . PHP_EOL;
}
}
Output:
Main sequence of shape effects:
Type: 47, subtype: 2 // 飛入, 底部
Type: 134, subtype: 45 // 分割, 垂直進入
Type: 126, subtype: 22 // 隨機條, 水平
變更動畫效果時間設定方法
Aspose.Slides for PHP via Java 允許您變更動畫效果的 Timing 屬性。
這是 Microsoft PowerPoint 中的 Animation Timing 面板:

以下是 PowerPoint Timing 與 Effect Timing 屬性之對應關係:
- PowerPoint Timing Start 下拉選單對應至 Timing::getTriggerType 方法。
- PowerPoint Timing Duration 對應至 Timing::getDuration 方法。動畫的持續時間(以秒為單位)為動畫完成一個週期所需的總時間。
- PowerPoint Timing Delay 對應至 Timing::getTriggerDelayTime 方法。
以下說明如何變更 Effect Timing 屬性:
- 套用或取得動畫效果。
- 使用 Effect::getTiming 方法設定您需要的新值。
- 儲存已修改的 PPTX 檔案。
以下 PHP 程式碼示範此操作:
# 建立代表簡報檔案的 Presentation 類別實例。
$pres = new Presentation("AnimExample_out.pptx");
try {
# 取得投影片的主要序列。
$sequence = $pres->getSlides()->get_Item(0)->getTimeline()->getMainSequence();
# 取得主要序列的第一個效果。
$effect = $sequence->get_Item(0);
# 將效果的 TriggerType 更改為點擊時開始
$effect->getTiming()->setTriggerType(EffectTriggerType::OnClick);
# 更改效果的 Duration
$effect->getTiming()->setDuration(3.0);
# 更改效果的 TriggerDelayTime
$effect->getTiming()->setTriggerDelayTime(0.5);
# 將 PPTX 檔案儲存至磁碟
$pres->save("AnimExample_changed.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
動畫效果音效
Aspose.Slides 提供以下方法,讓您在動畫效果中使用音效:
新增動畫效果音效
以下 PHP 程式碼示範如何新增動畫效果音效,並在下一個效果開始時停止它:
$pres = new Presentation("AnimExample_out.pptx");
try {
# 將音訊加入簡報的音訊集合
$Array = new JavaClass("java.lang.reflect.Array");
$Byte = (new JavaClass("java.lang.Byte"))->TYPE;
try {
$dis = new Java("java.io.DataInputStream", new Java("java.io.FileInputStream", "sampleaudio.wav"));
$bytes = $Array->newInstance($Byte, $dis->available());
$dis->readFully($bytes);
} finally {
if (!java_is_null($dis)) $dis->close();
}
$effectSound = $pres->getAudios()->addAudio($bytes);
$firstSlide = $pres->getSlides()->get_Item(0);
# 取得投影片的主要序列。
$sequence = $firstSlide->getTimeline()->getMainSequence();
# 取得主要序列的第一個效果
$firstEffect = $sequence->get_Item(0);
# 檢查效果是否為「無聲音」
if (java_is_null(!$firstEffect->getStopPreviousSound() && $firstEffect->getSound())) {
# 為第一個效果加入音效
$firstEffect->setSound($effectSound);
}
# 取得投影片的第一個互動序列。
$interactiveSequence = $firstSlide->getTimeline()->getInteractiveSequences()->get_Item(0);
# 設定效果的「停止先前音效」旗標
$interactiveSequence->get_Item(0)->setStopPreviousSound(true);
# 將 PPTX 檔案寫入磁碟
$pres->save("AnimExample_Sound_out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
擷取動畫效果音效
- 建立 Presentation 類別的實例。
- 透過索引取得投影片的參考。
- 取得主要的效果序列。
- 擷取每個動畫效果中嵌入的 setSound(IAudio value)。
以下 PHP 程式碼示範如何擷取動畫效果中嵌入的音效:
# 建立代表簡報檔案的 Presentation 類別實例。
$presentation = new Presentation("EffectSound.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
# 取得投影片的主要序列。
$sequence = $slide->getTimeline()->getMainSequence();
foreach($sequence as $effect) {
if (java_is_null($effect->getSound())) {
continue;
}
# 擷取效果音訊的位元組陣列
$audio = $effect->getSound()->getBinaryData();
}
} finally {
if (!java_is_null($presentation)) {
$presentation->dispose();
}
}
動畫結束後
Aspose.Slides for PHP via Java 允許您變更動畫效果的 After animation 屬性。
這是 Microsoft PowerPoint 中的 Animation Effect 面板與延伸功能表:

PowerPoint Effect After animation 下拉選單對應以下方法:
- setAfterAnimationType(int value) 方法,用於描述 After animation 類型:
- PowerPoint More Colors 對應至 AfterAnimationType::Color 型別;
- PowerPoint Don’t Dim 項目對應至 AfterAnimationType::DoNotDim 型別(預設的 after animation 類型);
- PowerPoint Hide After Animation 項目對應至 AfterAnimationType::HideAfterAnimation 型別;
- PowerPoint Hide on Next Mouse Click 項目對應至 AfterAnimationType::HideOnNextMouseClick 型別;
- setAfterAnimationColor(IColorFormat value) 方法,用於定義 after animation 的顏色格式。此方法與 AfterAnimationType::Color 類型一起使用。如果您將類型變更為其他,after animation 的顏色將被清除。
以下 PHP 程式碼示範如何變更 after animation 效果:
# 建立代表簡報檔案的 Presentation 類別實例
$pres = new Presentation("AnimImage_out.pptx");
try {
$firstSlide = $pres->getSlides()->get_Item(0);
# 取得主要序列的第一個效果
$firstEffect = $firstSlide->getTimeline()->getMainSequence()->get_Item(0);
# 將 after animation 類型變更為 Color
$firstEffect->setAfterAnimationType(AfterAnimationType::Color);
# 設定 after animation 暗淡顏色
$firstEffect->getAfterAnimationColor()->setColor(java("java.awt.Color")->BLUE);
# 將 PPTX 檔案寫入磁碟
$pres->save("AnimImage_AfterAnimation.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
動畫文字
Aspose.Slides 提供以下方法,讓您在動畫效果的 Animate text 區塊中工作:
- setAnimateTextType(int value) 方法,描述效果的 animate text 類型。形狀文字可以被動畫化:
- 一次全部 (AnimateTextType::AllAtOnce 型別)
- 逐字 (AnimateTextType::ByWord 型別)
- 逐字母 (AnimateTextType::ByLetter 型別)
- setDelayBetweenTextParts(float value) 設定動畫文字部份(字或字母)之間的延遲。正值表示效果持續時間的百分比,負值表示以秒為單位的延遲。
以下說明如何變更 Effect Animate text 屬性:
- 套用或取得動畫效果。
- 使用 setBuildType(int value) 方法與 BuildType::AsOneObject 值,關閉 By Paragraphs 動畫模式。
- 使用 setAnimateTextType(int value) 與 setDelayBetweenTextParts(float value) 方法設定新值。
- 儲存已修改的 PPTX 檔案。
以下 PHP 程式碼示範此操作:
# 建立代表簡報檔案的 Presentation 類別實例。
$pres = new Presentation("AnimTextBox_out.pptx");
try {
$firstSlide = $pres->getSlides()->get_Item(0);
# 取得主要序列的第一個效果
$firstEffect = $firstSlide->getTimeline()->getMainSequence()->get_Item(0);
# 將效果的文字動畫類型變更為「As One Object」
$firstEffect->getTextAnimation()->setBuildType(BuildType::AsOneObject);
# 將效果的動畫文字類型變更為「By word」
$firstEffect->setAnimateTextType(AnimateTextType::ByWord);
# 設定單字之間的延遲為效果持續時間的 20%
$firstEffect->setDelayBetweenTextParts(20.0);
# 將 PPTX 檔案寫入磁碟
$pres->save("AnimTextBox_AnimateText.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
常見問題
如何確保在將簡報發佈至網路時保留動畫?
Export to HTML5 並啟用負責 shape 與 transition 動畫的 options。純 HTML 不會播放投影片動畫,HTML5 則會。
變更形狀的 Z 軸順序(圖層順序)如何影響動畫?
動畫與繪製順序是獨立的:效果控制出現/消失的時間與類型,而 z-order 決定何者覆蓋何者。最終可見結果由兩者組合決定。(這是一般 PowerPoint 的行為;Aspose.Slides 的效果與形狀模型遵循相同邏輯。)
在將動畫轉換為影片時,某些效果是否有限制?
一般而言,動畫受到支援,但在少數情況或特定效果可能會有不同的呈現方式。建議使用您所使用的效果與相應的函式庫版本進行測試。