اعمال انیمیشن‌های شکل در ارائه‌ها با استفاده از جاوا

مقدمه

انیمیشن‌ها افکت‌های بصری هستند که می‌توانند بر روی متن‌ها، تصاویر، اشکال یا نمودارها اعمال شوند. آن‌ها به ارائه‌ها یا اجزای آن جان می‌بخشند.

چرا از انیمیشن‌ها در ارائه‌ها استفاده کنیم؟

  • کنترل جریان اطلاعات
  • تأکید بر نکات مهم
  • افزایش علاقه یا مشارکت مخاطبان
  • آسان‌تر کردن خواندن یا درک یا پردازش محتوا
  • جلب توجه خوانندگان یا بینندگان به بخش‌های مهم در یک ارائه

PowerPoint گزینه‌ها و ابزارهای فراوانی برای انیمیشن‌ها و افکت‌های انیمیشن در دسته‌های ورودی، خروجی، تاکید و مسیرهای حرکتی ارائه می‌دهد.

انیمیشن‌ها در Aspose.Slides

  • Aspose.Slides کلاس‌ها و انواع مورد نیاز برای کار با انیمیشن‌ها را در فضای نام Aspose.Slides.Animation ارائه می‌دهد،
  • Aspose.Slides بیش از 150 افکت انیمیشن را در زیرمجموعه EffectType ارائه می‌دهد. این افکت‌ها در اصل همان افکت‌های استفاده‌شده در PowerPoint هستند (یا معادل آن‌ها).

اعمال انیمیشن به TextBox

Aspose.Slides برای Java به شما امکان می‌دهد انیمیشن را بر متن یک شکل اعمال کنید.

  1. یک نمونه از کلاس Presentation ایجاد کنید.
  2. یک مرجع اسلاید را از طریق اندیس آن به‌دست آورید.
  3. یک rectangle IAutoShape اضافه کنید.
  4. متن را به IAutoShape.TextFrame اضافه کنید.
  5. یک توالی اصلی از افکت‌ها دریافت کنید.
  6. یک افکت انیمیشن به IAutoShape اضافه کنید.
  7. ویژگی TextAnimation.BuildType را به مقدار موجود در Enumeraton BuildType تنظیم کنید.
  8. ارائه را به‌صورت فایل 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

  1. یک نمونه از کلاس Presentation ایجاد کنید.
  2. مرجع اسلاید را از طریق اندیس آن به‌دست آورید.
  3. یک PictureFrame را روی اسلاید اضافه کنید یا دریافت کنید.
  4. توالی اصلی افکت‌ها را دریافت کنید.
  5. یک افکت انیمیشن به PictureFrame اضافه کنید.
  6. فایل 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

  1. یک نمونه از کلاس Presentation ایجاد کنید.
  2. مرجع اسلاید را از طریق اندیس آن به‌دست آورید.
  3. یک rectangle IAutoShape اضافه کنید.
  4. یک Bevel IAutoShape اضافه کنید (زمانی که این شیء کلیک شود، انیمیشن اجرا می‌شود).
  5. یک توالی از افکت‌ها روی شکل Bevel ایجاد کنید.
  6. یک UserPath سفارشی ایجاد کنید.
  7. دستورات برای حرکت به UserPath اضافه کنید.
  8. فایل 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 اعمال شده است.

Slide shape animation effect

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

Layout shape animation effect

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

Master shape animation effect

کد نمونه زیر نحوه استفاده از متد 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 است:

example1_image

  • لیست کشویی Start در PowerPoint Timing با ویژگی Effect.Timing.TriggerType مطابقت دارد.
  • PowerPoint Timing Duration با ویژگی Effect.Timing.Duration مطابقت دارد. مدت زمان یک انیمیشن (به ثانیه) زمان کل لازم برای تکمیل یک چرخه انیمیشن است.
  • PowerPoint Timing Delay با ویژگی Effect.Timing.TriggerDelayTime مطابقت دارد.

نحوه تغییر ویژگی‌های Timing افکت به این صورت است:

  1. Apply یا دریافت افکت انیمیشن.
  2. مقادیر جدید برای ویژگی‌های Effect.Timing که نیاز دارید تنظیم کنید.
  3. فایل 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();
}

استخراج صدا از افکت انیمیشن

  1. یک نمونه از کلاس Presentation ایجاد کنید.
  2. مرجع اسلاید را از طریق اندیس آن به‌دست آورید.
  3. توالی اصلی افکت‌ها را دریافت کنید.
  4. صدا 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 است:

example1_image

لیست کشویی After animation در PowerPoint Effect با این ویژگی‌ها مطابقت دارد:

این کد 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 یک افکت انیمیشن فراهم می‌کند:

نحوه تغییر ویژگی‌های Effect Animate text به این صورت است:

  1. Apply یا دریافت افکت انیمیشن.
  2. ویژگی setBuildType(int value) را به مقدار BuildType.AsOneObject تنظیم کنید تا حالت انیمیشن By Paragraphs غیرفعال شود.
  3. مقادیر جدید را برای ویژگی‌های setAnimateTextType(int value) و setDelayBetweenTextParts(float value) تنظیم کنید.
  4. فایل 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 همان منطق را دنبال می‌کند.)

آیا محدودیتی هنگام تبدیل انیمیشن‌ها به ویدیو برای برخی افکت‌ها وجود دارد؟

به‌طور کلی، انیمیشن‌ها پشتیبانی می‌شوند، اما در موارد نادر یا برای افکت‌های خاص ممکن است به‌صورت متفاوتی رندر شوند. توصیه می‌شود با افکت‌هایی که استفاده می‌کنید و نسخه کتابخانه تست کنید.