Java를 사용한 프레젠테이션에서 도형 애니메이션 적용
소개
애니메이션은 텍스트, 이미지, 도형 또는 차트에 적용될 수 있는 시각 효과입니다. 프레젠테이션이나 그 구성 요소에 생동감을 부여합니다.
프레젠테이션에서 애니메이션을 사용하는 이유는?
- 정보를 흐름을 제어한다
- 중요한 포인트를 강조한다
- 청중의 흥미나 참여도를 높인다
- 내용을 더 쉽게 읽거나 이해하거나 처리할 수 있게 만든다
- 프레젠테이션에서 중요한 부분에 독자나 시청자의 주의를 끈다
PowerPoint는 입장, 퇴장, 강조, 움직임 경로 범주에 걸쳐 애니메이션 및 애니메이션 효과를 위한 다양한 옵션과 도구를 제공합니다.
Aspose.Slides의 애니메이션
- Aspose.Slides는
Aspose.Slides.Animation네임스페이스 아래에서 애니메이션 작업에 필요한 클래스와 타입을 제공합니다. - Aspose.Slides는 EffectType 열거형에 150개 이상의 애니메이션 효과를 제공합니다. 이러한 효과는 본질적으로 PowerPoint에서 사용되는 효과와 동일(또는 동등)합니다.
텍스트 상자에 애니메이션 적용
Aspose.Slides for Java를 사용하면 도형의 텍스트에 애니메이션을 적용할 수 있습니다.
- Presentation 클래스의 인스턴스를 생성합니다.
- 인덱스를 통해 슬라이드 참조를 가져옵니다.
rectangleIAutoShape을 추가합니다.- IAutoShape.TextFrame에 텍스트를 추가합니다.
- 기본 효과 시퀀스를 가져옵니다.
- IAutoShape에 애니메이션 효과를 추가합니다.
TextAnimation.BuildType속성을BuildType열거형의 값으로 설정합니다.- 프레젠테이션을 PPTX 파일로 디스크에 저장합니다.
다음 Java 코드는 AutoShape에 Fade 효과를 적용하고 텍스트 애니메이션을 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);
// 도형 텍스트를 1단계 단락별로 애니메이션합니다
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 코드는 picture frame에 Fly 효과를 적용하는 방법을 보여줍니다:
// 프레젠테이션 파일을 나타내는 프레젠테이션 클래스를 인스턴스화합니다.
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();
// 그림 프레임에 왼쪽에서 날아오는 애니메이션 효과를 추가합니다
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();
}
도형에 애니메이션 적용
- Presentation 클래스의 인스턴스를 생성합니다.
- 인덱스를 통해 슬라이드 참조를 가져옵니다.
rectangleIAutoShape을 추가합니다.BevelIAutoShape를 추가합니다(이 개체를 클릭하면 애니메이션이 재생됩니다).- 베벨 도형에 대한 효과 시퀀스를 생성합니다.
- 사용자 정의
UserPath를 생성합니다. UserPath로 이동하기 위한 명령을 추가합니다.- 프레젠테이션을 PPTX 파일로 디스크에 저장합니다.
다음 Java 코드는 도형에 PathFootball(경로 축구) 효과를 적용하는 방법을 보여줍니다:
// PPTX 파일을 나타내는 Presentation 클래스를 인스턴스화합니다.
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();
}
도형에 적용된 애니메이션 효과 가져오기
다음 예제는 ISequence 인터페이스의 getEffectsByShape 메서드를 사용하여 도형에 적용된 모든 애니메이션 효과를 가져오는 방법을 보여줍니다.
예제 1: 일반 슬라이드의 도형에 적용된 애니메이션 효과 가져오기
이전에 PowerPoint 프레젠테이션에서 도형에 애니메이션 효과를 추가하는 방법을 배웠습니다. 다음 샘플 코드는 프레젠테이션 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();
}
예제 2: 자리표시자에서 상속된 효과를 포함한 모든 애니메이션 효과 가져오기
일반 슬라이드의 도형에 레이아웃 슬라이드 및/또는 마스터 슬라이드에 있는 자리표시자가 있고, 이러한 자리표시자에 애니메이션 효과가 추가된 경우, 슬라이드 쇼 동안 해당 도형의 모든 효과가 재생되며, 여기에는 자리표시자에서 상속된 효과도 포함됩니다.
예를 들어 sample.pptx라는 PowerPoint 프레젠테이션 파일에 한 슬라이드가 있으며, 해당 슬라이드에는 푸터 도형에 ‘Made with Aspose.Slides’ 텍스트가 포함되고 Random Bars 효과가 도형에 적용되어 있다고 가정해 보겠습니다.

또한 레이아웃 슬라이드의 푸터 자리표시자에 Split 효과가 적용되어 있다고 가정합니다.

마지막으로 마스터 슬라이드의 푸터 자리표시자에 Fly In 효과가 적용되어 있습니다.

다음 샘플 코드는 IShape 인터페이스의 getBasePlaceholder 메서드를 사용하여 도형 자리표시자에 접근하고 레이아웃 및 마스터 슬라이드에 위치한 자리표시자에서 상속된 효과를 포함하여 푸터 도형에 적용된 애니메이션 효과를 가져오는 방법을 보여줍니다:
Presentation presentation = new Presentation("sample.pptx");
ISlide slide = presentation.getSlides().get_Item(0);
// Get animation effects of the shape on the normal slide.
IShape shape = slide.getShapes().get_Item(0);
IEffect[] shapeEffects = slide.getTimeline().getMainSequence().getEffectsByShape(shape);
// Get animation effects of the placeholder on the layout slide.
IShape layoutShape = shape.getBasePlaceholder();
IEffect[] layoutShapeEffects = slide.getLayoutSlide().getTimeline().getMainSequence().getEffectsByShape(layoutShape);
// Get animation effects of the placeholder on the master slide.
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 for Java를 사용하면 애니메이션 효과의 타이밍 속성을 변경할 수 있습니다.
다음은 Microsoft PowerPoint에서의 애니메이션 타이밍 창입니다:

다음은 PowerPoint 타이밍과 Effect.Timing 속성 간의 대응 관계입니다:
- PowerPoint 타이밍 Start 드롭다운 목록은 Effect.Timing.TriggerType 속성과 일치합니다.
- PowerPoint 타이밍 Duration은 Effect.Timing.Duration 속성과 일치합니다. 애니메이션의 지속 시간(초)은 애니메이션이 한 사이클을 완료하는 데 걸리는 총 시간입니다.
- PowerPoint 타이밍 Delay는 Effect.Timing.TriggerDelayTime 속성과 일치합니다.
다음은 Effect 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);
// 효과 TriggerType을 클릭 시 시작하도록 변경합니다.
effect.getTiming().setTriggerType(EffectTriggerType.OnClick);
// 효과 Duration을 변경합니다.
effect.getTiming().setDuration(3f);
// 효과 TriggerDelayTime을 변경합니다.
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);
// 효과 "이전 소리 중지" 플래그를 설정합니다
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 = 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 for Java를 사용하면 애니메이션 효과의 After animation 속성을 변경할 수 있습니다.
다음은 Microsoft PowerPoint의 애니메이션 효과 창 및 확장 메뉴입니다:

PowerPoint 효과 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 색상이 초기화됩니다.
다음 Java 코드는 after animation 효과를 변경하는 방법을 보여줍니다:
// 프레젠테이션 파일을 나타내는 프레젠테이션 클래스를 인스턴스화합니다
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 색상을 설정합니다
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) 은(는) 애니메이트 텍스트 유형을 설명합니다. 도형 텍스트는 다음과 같이 애니메이션될 수 있습니다:
- 한 번에 전체 (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 pres = new Presentation("AnimTextBox_out.pptx");
try {
ISlide firstSlide = pres.getSlides().get_Item(0);
// 메인 시퀀스의 첫 번째 효과를 가져옵니다
IEffect firstEffect = firstSlide.getTimeline().getMainSequence().get_Item(0);
// 효과 Text animation type을 "As One Object"로 변경합니다
firstEffect.getTextAnimation().setBuildType(BuildType.AsOneObject);
// 효과 Animate text type을 "By word"로 변경합니다
firstEffect.setAnimateTextType(AnimateTextType.ByWord);
// 단어 사이 지연을 효과 지속시간의 20%로 설정합니다
firstEffect.setDelayBetweenTextParts(20f);
// PPTX 파일을 디스크에 저장합니다
pres.save("AnimTextBox_AnimateText.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
FAQ
프레젠테이션을 웹에 게시할 때 애니메이션이 보존되도록 하려면 어떻게 해야 하나요?
Export to HTML5를 사용하고 옵션 중 shape 및 transition 애니메이션을 활성화합니다. 일반 HTML은 슬라이드 애니메이션을 재생하지 않지만 HTML5는 재생합니다.
도형의 z-순서(레이어 순서)를 변경하면 애니메이션에 어떤 영향을 줍니까?
애니메이션 순서와 그리기 순서는 독립적입니다. 효과는 나타나거나 사라지는 타이밍과 유형을 제어하고, z-order는 어떤 것이 무엇을 가리는지를 결정합니다. 가시적인 결과는 두 요소의 조합에 의해 정의됩니다. (이는 일반적인 PowerPoint 동작이며, Aspose.Slides의 효과와 도형 모델도 같은 논리를 따릅니다.)
특정 효과를 비디오로 변환할 때 애니메이션에 제한이 있습니까?
일반적으로 애니메이션은 지원됩니다, 하지만 드문 경우나 특정 효과는 다르게 렌더링될 수 있습니다. 사용하는 효과와 라이브러리 버전으로 테스트하는 것이 좋습니다.