اعمال انیمیشنهای شکل در ارائهها با استفاده از جاوا
مقدمه
انیمیشنها افکتهای بصری هستند که میتوانند بر روی متنها، تصاویر، اشکال یا نمودارها اعمال شوند. آنها به ارائهها یا اجزای آن جان میبخشند.
چرا از انیمیشنها در ارائهها استفاده کنیم؟
- کنترل جریان اطلاعات
- تأکید بر نکات مهم
- افزایش علاقه یا مشارکت مخاطبان
- آسانتر کردن خواندن یا درک یا پردازش محتوا
- جلب توجه خوانندگان یا بینندگان به بخشهای مهم در یک ارائه
PowerPoint گزینهها و ابزارهای فراوانی برای انیمیشنها و افکتهای انیمیشن در دستههای ورودی، خروجی، تاکید و مسیرهای حرکتی ارائه میدهد.
انیمیشنها در Aspose.Slides
- Aspose.Slides کلاسها و انواع مورد نیاز برای کار با انیمیشنها را در فضای نام
Aspose.Slides.Animationارائه میدهد، - Aspose.Slides بیش از 150 افکت انیمیشن را در زیرمجموعه EffectType ارائه میدهد. این افکتها در اصل همان افکتهای استفادهشده در PowerPoint هستند (یا معادل آنها).
اعمال انیمیشن به TextBox
Aspose.Slides برای Java به شما امکان میدهد انیمیشن را بر متن یک شکل اعمال کنید.
- یک نمونه از کلاس Presentation ایجاد کنید.
- یک مرجع اسلاید را از طریق اندیس آن بهدست آورید.
- یک
rectangleIAutoShape اضافه کنید. - متن را به IAutoShape.TextFrame اضافه کنید.
- یک توالی اصلی از افکتها دریافت کنید.
- یک افکت انیمیشن به IAutoShape اضافه کنید.
- ویژگی
TextAnimation.BuildTypeرا به مقدار موجود در EnumeratonBuildTypeتنظیم کنید. - ارائه را بهصورت فایل PPTX روی دیسک بنویسید.
این کد Java نشان میدهد چگونه افکت Fade را به AutoShape اعمال کنید و انیمیشن متن را به مقدار By 1st Level Paragraphs تنظیم کنید:
// یک کلاس ارائه را که نمایانگر یک فایل ارائه است، نمونهسازی میکند.
Presentation pres = new Presentation();
try {
ISlide sld = pres.getSlides().get_Item(0);
// یک AutoShape جدید با متن اضافه میکند
IAutoShape autoShape = sld.getShapes().addAutoShape(ShapeType.Rectangle, 20, 20, 150, 100);
ITextFrame textFrame = autoShape.getTextFrame();
textFrame.setText("First paragraph \nSecond paragraph \n Third paragraph");
// توالی اصلی اسلاید را میگیرد.
ISequence sequence = sld.getTimeline().getMainSequence();
// افکت انیمیشن Fade را به شکل اضافه میکند
IEffect 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 (pres != null) pres.dispose();
}
اعمال انیمیشن به PictureFrame
- یک نمونه از کلاس Presentation ایجاد کنید.
- مرجع اسلاید را از طریق اندیس آن بهدست آورید.
- یک PictureFrame را روی اسلاید اضافه کنید یا دریافت کنید.
- توالی اصلی افکتها را دریافت کنید.
- یک افکت انیمیشن به PictureFrame اضافه کنید.
- فایل PPTX اصلاحشده را ذخیره کنید.
این کد Java نشان میدهد چگونه افکت Fly را به یک picture frame اعمال کنید:
// یک کلاس ارائه را که نمایانگر یک فایل ارائه است، نمونهسازی میکند.
Presentation pres = new Presentation();
try {
// تصویر را که باید به مجموعه تصاویر ارائه اضافه شود، بارگذاری میکند
IPPImage picture;
IImage image = Images.fromFile("aspose-logo.jpg");
try {
picture = pres.getImages().addImage(image);
} finally {
if (image != null) image.dispose();
}
// یک قاب تصویر به اسلاید اضافه میکند
IPictureFrame picFrame = pres.getSlides().get_Item(0).getShapes().addPictureFrame(ShapeType.Rectangle, 50, 50, 100, 100, picture);
// توالی اصلی اسلاید را میگیرد.
ISequence sequence = pres.getSlides().get_Item(0).getTimeline().getMainSequence();
// افکت انیمیشن Fly از سمت چپ را به قاب تصویر اضافه میکند
IEffect effect = sequence.addEffect(picFrame, EffectType.Fly, EffectSubtype.Left, EffectTriggerType.OnClick);
// فایل PPTX را روی دیسک ذخیره میکند
pres.save(path + "AnimImage_out.pptx", SaveFormat.Pptx);
} catch(IOException e) {
} finally {
if (pres != null) pres.dispose();
}
اعمال انیمیشن به Shape
- یک نمونه از کلاس Presentation ایجاد کنید.
- مرجع اسلاید را از طریق اندیس آن بهدست آورید.
- یک
rectangleIAutoShape اضافه کنید. - یک
BevelIAutoShape اضافه کنید (زمانی که این شیء کلیک شود، انیمیشن اجرا میشود). - یک توالی از افکتها روی شکل Bevel ایجاد کنید.
- یک
UserPathسفارشی ایجاد کنید. - دستورات برای حرکت به
UserPathاضافه کنید. - فایل PPTX اصلاحشده را ذخیره کنید.
این کد Java نشان میدهد چگونه افکت PathFootball (مسیر فوتبال) را به یک shape اعمال کنید:
// یک کلاس Presentation که نمایانگر یک فایل PPTX است را نمونهسازی میکند.
Presentation pres = new Presentation();
try {
ISlide sld = pres.getSlides().get_Item(0);
// افکت PathFootball را برای شکل موجود از ابتدا ایجاد میکند.
IAutoShape 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);
// یک نوع "دکمه" ایجاد میکند.
IShape shapeTrigger = pres.getSlides().get_Item(0).getShapes().addAutoShape(ShapeType.Bevel, 10, 10, 20, 20);
// یک توالی از افکتها برای این دکمه ایجاد میکند.
ISequence seqInter = pres.getSlides().get_Item(0).getTimeline().getInteractiveSequences().add(shapeTrigger);
// یک مسیر سفارشی کاربر ایجاد میکند. شیء ما تنها پس از کلیک روی دکمه جابهجا میشود.
IEffect fxUserPath = seqInter.addEffect(ashp, EffectType.PathUser, EffectSubtype.None, EffectTriggerType.OnClick);
// دستورات جابهجایی را اضافه میکند زیرا مسیر ایجاد شده خالی است.
IMotionEffect motionBhv = ((IMotionEffect)fxUserPath.getBehaviors().get_Item(0));
Point2D.Float[] pts = new Point2D.Float[1];
pts[0] = new Point2D.Float(0.076f, 0.59f);
motionBhv.getPath().add(MotionCommandPathType.LineTo, pts, MotionPathPointsType.Auto, true);
pts[0] = new Point2D.Float(-0.076f, -0.59f);
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 (pres != null) pres.dispose();
}
دریافت افکتهای انیمیشن اعمالشده بر یک Shape
مثالهای زیر نحوه استفاده از متد getEffectsByShape از رابط ISequence را برای دریافت تمام افکتهای انیمیشن اعمالشده بر یک shape نشان میدهند.
مثال ۱: دریافت افکتهای انیمیشن اعمالشده بر یک shape در اسلاید معمولی
در ابتدا، یاد گرفتید چگونه افکتهای انیمیشن را به شکلها در ارائههای PowerPoint اضافه کنید. کد نمونه زیر نشان میدهد چگونه افکتهای اعمالشده بر اولین shape در اولین اسلاید معمولی در ارائه AnimExample_out.pptx را دریافت کنید:
Presentation presentation = new Presentation("AnimExample_out.pptx");
try {
ISlide firstSlide = presentation.getSlides().get_Item(0);
// توالی اصلی انیمیشن اسلاید را دریافت میکند.
ISequence sequence = firstSlide.getTimeline().getMainSequence();
// اولین شکل در اولین اسلاید را دریافت میکند.
IShape shape = firstSlide.getShapes().get_Item(0);
// افکتهای انیمیشن اعمالشده بر شکل را دریافت میکند.
IEffect[] shapeEffects = sequence.getEffectsByShape(shape);
if (shapeEffects.length > 0)
System.out.println("The shape " + shape.getName() + " has " + shapeEffects.length + " animation effects.");
} finally {
if (presentation != null) presentation.dispose();
}
مثال ۲: دریافت تمام افکتهای انیمیشن، از جمله آنهایی که از placeholders به ارث میرسند
اگر یک shape در اسلاید معمولی دارای placeholders باشد که در اسلاید layout و/یا master قرار دارند و افکتهای انیمیشن به این placeholders اضافه شده باشند، تمام افکتهای shape در طول نمایش اسلاید پخش خواهد شد، شامل آنهایی که از placeholders به ارث رسیدهاند.
فرض کنید یک فایل ارائه PowerPoint به نام sample.pptx داریم که یک اسلاید دارد که فقط شامل یک shape فوتر با متن “Made with Aspose.Slides” است و افکت Random Bars بر این shape اعمال شده است.

همچنین فرض کنید افکت Split بر placeholder فوتر در اسلاید layout اعمال شده است.

و در نهایت، افکت Fly In بر placeholder فوتر در اسلاید master اعمال شده است.

کد نمونه زیر نحوه استفاده از متد getBasePlaceholder از رابط IShape را برای دسترسی به placeholders شکل و دریافت افکتهای انیمیشن اعمالشده بر shape فوتر، شامل آنهایی که از placeholders موجود در اسلایدهای layout و master به ارث رسیدهاند، نشان میدهد:
Presentation presentation = new Presentation("sample.pptx");
ISlide slide = presentation.getSlides().get_Item(0);
// دریافت افکتهای انیمیشن شکل در اسلاید عادی.
IShape shape = slide.getShapes().get_Item(0);
IEffect[] shapeEffects = slide.getTimeline().getMainSequence().getEffectsByShape(shape);
// دریافت افکتهای انیمیشن placeholder در اسلاید layout.
IShape layoutShape = shape.getBasePlaceholder();
IEffect[] layoutShapeEffects = slide.getLayoutSlide().getTimeline().getMainSequence().getEffectsByShape(layoutShape);
// دریافت افکتهای انیمیشن placeholder در اسلاید master.
IShape masterShape = layoutShape.getBasePlaceholder();
IEffect[] masterShapeEffects = slide.getLayoutSlide().getMasterSlide().getTimeline().getMainSequence().getEffectsByShape(masterShape);
System.out.println("Main sequence of shape effects:");
printEffects(masterShapeEffects);
printEffects(layoutShapeEffects);
printEffects(shapeEffects);
presentation.dispose();
static void printEffects(IEffect[] effects)
{
for (IEffect effect : effects)
{
String typeName = EffectType.getName(EffectType.class, effect.getType());
String subtypeName = EffectSubtype.getName(EffectSubtype.class, effect.getSubtype());
System.out.println(typeName + " " + subtypeName);
}
}
خروجی:
Main sequence of shape effects:
Fly Bottom
Split VerticalIn
RandomBars Horizontal
تغییر ویژگیهای زمانبندی افکت انیمیشن
Aspose.Slides برای Java به شما امکان میدهد ویژگیهای Timing یک افکت انیمیشن را تغییر دهید.
این پنل Animation Timing در Microsoft PowerPoint است:

- لیست کشویی Start در PowerPoint Timing با ویژگی Effect.Timing.TriggerType مطابقت دارد.
- PowerPoint Timing Duration با ویژگی Effect.Timing.Duration مطابقت دارد. مدت زمان یک انیمیشن (به ثانیه) زمان کل لازم برای تکمیل یک چرخه انیمیشن است.
- PowerPoint Timing Delay با ویژگی Effect.Timing.TriggerDelayTime مطابقت دارد.
نحوه تغییر ویژگیهای Timing افکت به این صورت است:
- Apply یا دریافت افکت انیمیشن.
- مقادیر جدید برای ویژگیهای Effect.Timing که نیاز دارید تنظیم کنید.
- فایل PPTX اصلاحشده را ذخیره کنید.
این کد Java عملیات را نشان میدهد:
// یک کلاس Presentation که نمایانگر یک فایل ارائه است را نمونهسازی میکند.
Presentation pres = new Presentation("AnimExample_out.pptx");
try {
// دنباله اصلی اسلاید را دریافت میکند.
ISequence sequence = pres.getSlides().get_Item(0).getTimeline().getMainSequence();
// اولین افکت دنباله اصلی را دریافت میکند.
IEffect effect = sequence.get_Item(0);
// نوع Trigger افکت را به شروع با کلیک تغییر میدهد
effect.getTiming().setTriggerType(EffectTriggerType.OnClick);
// مدت زمان افکت را تغییر میدهد
effect.getTiming().setDuration(3f);
// زمان تأخیر Trigger افکت را تغییر میدهد
effect.getTiming().setTriggerDelayTime(0.5f);
// فایل PPTX را روی دیسک ذخیره میکند
pres.save("AnimExample_changed.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
صدا در افکت انیمیشن
Aspose.Slides این ویژگیها را برای کار با صداها در افکتهای انیمیشن فراهم میکند:
افزودن صدا به افکت انیمیشن
این کد Java نشان میدهد چگونه یک صدا به افکت انیمیشن اضافه کنید و هنگام شروع افکت بعدی آن را متوقف کنید:
Presentation pres = new Presentation("AnimExample_out.pptx");
try {
// صدا را به مجموعه صداهای ارائه اضافه میکند
IAudio effectSound = pres.getAudios().addAudio(Files.readAllBytes(Paths.get("sampleaudio.wav")));
ISlide firstSlide = pres.getSlides().get_Item(0);
// دنباله اصلی اسلاید را دریافت میکند.
ISequence sequence = firstSlide.getTimeline().getMainSequence();
// اولین افکت دنباله اصلی را دریافت میکند
IEffect firstEffect = sequence.get_Item(0);
// بررسی میکند افکت برای "بدون صدا"
if (!firstEffect.getStopPreviousSound() && firstEffect.getSound() == null)
{
// صدا را برای اولین افکت اضافه میکند
firstEffect.setSound(effectSound);
}
// اولین توالی تعاملی اسلاید را دریافت میکند.
ISequence interactiveSequence = firstSlide.getTimeline().getInteractiveSequences().get_Item(0);
// پرچم "Stop previous sound" افکت را تنظیم میکند
interactiveSequence.get_Item(0).setStopPreviousSound(true);
// فایل PPTX را روی دیسک مینویسد
pres.save("AnimExample_Sound_out.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
استخراج صدا از افکت انیمیشن
- یک نمونه از کلاس Presentation ایجاد کنید.
- مرجع اسلاید را از طریق اندیس آن بهدست آورید.
- توالی اصلی افکتها را دریافت کنید.
- صدا setSound(IAudio value) تعبیهشده در هر افکت انیمیشن را استخراج کنید.
این کد Java نشان میدهد چگونه صدا تعبیهشده در یک افکت انیمیشن را استخراج کنید:
// یک کلاس Presentation که نمایانگر یک فایل ارائه است را نمونهسازی میکند.
Presentation presentation = new Presentation("EffectSound.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
// دنباله اصلی اسلاید را دریافت میکند.
ISequence sequence = slide.getTimeline().getMainSequence();
for (IEffect effect : sequence)
{
if (effect.getSound() == null)
continue;
// صدای افکت را به صورت آرایه بایت استخراج میکند
byte[] audio = effect.getSound().getBinaryData();
}
} finally {
if (presentation != null) presentation.dispose();
}
بعد از انیمیشن
Aspose.Slides برای Java به شما امکان میدهد ویژگی After animation یک افکت انیمیشن را تغییر دهید.
این پنل Animation Effect و منوی گسترده در Microsoft PowerPoint است:

لیست کشویی After animation در PowerPoint Effect با این ویژگیها مطابقت دارد:
- ویژگی 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 پاک میشود.
این کد Java نشان میدهد چگونه یک افکت after animation را تغییر دهید:
// یک کلاس Presentation که نمایانگر یک فایل ارائه است را نمونهسازی میکند
Presentation pres = new Presentation("AnimImage_out.pptx");
try {
ISlide firstSlide = pres.getSlides().get_Item(0);
// اولین افکت دنباله اصلی را دریافت میکند
IEffect firstEffect = firstSlide.getTimeline().getMainSequence().get_Item(0);
// نوع after animation را به Color تغییر میدهد
firstEffect.setAfterAnimationType(AfterAnimationType.Color);
// رنگ after animation dim را تنظیم میکند
firstEffect.getAfterAnimationColor().setColor(Color.BLUE);
// فایل PPTX را روی دیسک ذخیره میکند
pres.save("AnimImage_AfterAnimation.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
انیمیشن متن
Aspose.Slides این ویژگیها را برای کار با بلوک Animate text یک افکت انیمیشن فراهم میکند:
- ویژگی setAnimateTextType(int value) که نوع animate text افکت را توصیف میکند. متن shape میتواند انیمیشن شود:
- همه بهطور همزمان (AnimateTextType.AllAtOnce)
- بهصورت کلمه به کلمه (AnimateTextType.ByWord)
- بهصورت حرف به حرف (AnimateTextType.ByLetter)
- ویژگی setDelayBetweenTextParts(float value) تاخیر بین بخشهای متن انیمیشنشده (کلمات یا حروف) را تنظیم میکند. مقدار مثبت درصد مدت افکت را مشخص میکند. مقدار منفی تاخیر را بر حسب ثانیه تعیین میکند.
نحوه تغییر ویژگیهای Effect Animate text به این صورت است:
- Apply یا دریافت افکت انیمیشن.
- ویژگی setBuildType(int value) را به مقدار BuildType.AsOneObject تنظیم کنید تا حالت انیمیشن By Paragraphs غیرفعال شود.
- مقادیر جدید را برای ویژگیهای setAnimateTextType(int value) و setDelayBetweenTextParts(float value) تنظیم کنید.
- فایل PPTX اصلاحشده را ذخیره کنید.
این کد Java عملیات را نشان میدهد:
// یک کلاس Presentation که نمایانگر یک فایل ارائه است را نمونهسازی میکند.
Presentation pres = new Presentation("AnimTextBox_out.pptx");
try {
ISlide firstSlide = pres.getSlides().get_Item(0);
// اولین افکت دنباله اصلی را دریافت میکند
IEffect firstEffect = firstSlide.getTimeline().getMainSequence().get_Item(0);
// نوع انیمیشن متن افکت را به «As One Object» تغییر میدهد
firstEffect.getTextAnimation().setBuildType(BuildType.AsOneObject);
// نوع Animate text افکت را به «By word» تغییر میدهد
firstEffect.setAnimateTextType(AnimateTextType.ByWord);
// تاخیر بین کلمات را به 20 درصد از مدت افکت تنظیم میکند
firstEffect.setDelayBetweenTextParts(20f);
// فایل PPTX را روی دیسک ذخیره میکند
pres.save("AnimTextBox_AnimateText.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
سوالات متداول
چگونه میتوانم اطمینان حاصل کنم که انیمیشنها هنگام انتشار ارائه در وب حفظ میشوند؟
Export to HTML5 و فعال کردن options که مسئول انیمیشنهای shape و transition هستند. HTML ساده انیمیشنهای اسلاید را پخش نمیکند، در حالی که HTML5 این کار را انجام میدهد.
تغییر ترتیب z-order (ترتیب لایه) اشکال چگونه بر انیمیشن تاثیر میگذارد؟
انیمیشن و ترتیب رسم مستقل هستند: یک افکت زمانبندی و نوع ظاهر شدن/ناپدید شدن را کنترل میکند، در حالی که z-order تعیین میکند کدام شیء چه چیزی را میپوشاند. نتیجه قابلمشاهده ترکیبی از این دو است. (این رفتار کلی PowerPoint است؛ مدل effects-and-shapes در Aspose.Slides همان منطق را دنبال میکند.)
آیا محدودیتی هنگام تبدیل انیمیشنها به ویدیو برای برخی افکتها وجود دارد؟
بهطور کلی، انیمیشنها پشتیبانی میشوند، اما در موارد نادر یا برای افکتهای خاص ممکن است بهصورت متفاوتی رندر شوند. توصیه میشود با افکتهایی که استفاده میکنید و نسخه کتابخانه تست کنید.