private static void AddAppearAnimation(Shape shape, PowerPointSlide inSlide, int effectStartIndex) { if (inSlide.HasEntryAnimation(shape)) return; var effectFade = inSlide.GetNativeSlide().TimeLine.MainSequence.AddEffect(shape, MsoAnimEffect.msoAnimEffectAppear, MsoAnimateByLevel.msoAnimateLevelNone, MsoAnimTriggerType.msoAnimTriggerWithPrevious, effectStartIndex); effectFade.Exit = MsoTriState.msoFalse; }
private void AddSlideThumbnail(PowerPointSlide slide, int pos = -1, bool isCurrentSlide = false) { if (slide == null) return; var thumbnailPath = TempPath.GetPath("slide-" + DateTime.Now.GetHashCode() + slide.Index); slide.GetNativeSlide().Export(thumbnailPath, "JPG", GetPreviewWidth(), PreviewHeight); ImageItem imageItem; if (isCurrentSlide) { imageItem = new ImageItem { ImageFile = thumbnailPath, Tooltip = "(Current) Slide " + slide.Index }; } else { imageItem = new ImageItem { ImageFile = thumbnailPath, Tooltip = "Slide " + slide.Index }; } Dispatcher.Invoke(new Action(() => { if (pos == -1) { SlideList.Add(imageItem); } else { SlideList.Insert(pos, imageItem); } })); }
/// <summary> /// Extracts the transition animation out of slide to be used as a transition animation for shapes. /// For now, it only extracts the trigger type (trigger by wait or by mouse click), not actual slide transitions. /// </summary> private static EffectTransition GetTransitionFromSlide(PowerPointSlide slide) { var transition = slide.GetNativeSlide().SlideShowTransition; if (transition.AdvanceOnTime == MsoTriState.msoTrue) { return new EffectTransition(MsoAnimTriggerType.msoAnimTriggerAfterPrevious, transition.AdvanceTime); } return new EffectTransition(MsoAnimTriggerType.msoAnimTriggerOnPageClick, 0); }
public static void ExportSlide(PowerPointSlide slide, string exportPath) { ExportSlide(slide.GetNativeSlide(), exportPath); }
public static void MakeShapeViewTimeInvisible(ShapeRange shapeRange, PowerPointSlide curSlide) { MakeShapeViewTimeInvisible(shapeRange, curSlide.GetNativeSlide()); }
private static void SelectOriginalSlide(PowerPointSlide originalSlide, PowerPointSlide fallbackToSlide) { if (originalSlide != null) { originalSlide.GetNativeSlide().Select(); return; } if (fallbackToSlide != null) { fallbackToSlide.GetNativeSlide().Select(); } }
private static PowerPointBgEffectSlide PrepareForeground(ShapeRange oriShapeRange, ShapeRange copyShapeRange, Slide refSlide, PowerPointSlide newSlide) { try { // crop in the original slide and put into clipboard var croppedShape = MakeFrontImage(oriShapeRange); croppedShape.Cut(); // swap the uncropped shapes and cropped shapes var pastedCrop = newSlide.Shapes.Paste(); // calibrate pasted shapes pastedCrop.Left -= 12; pastedCrop.Top -= 12; // ungroup front image if necessary if (pastedCrop[1].Type == Core.MsoShapeType.msoGroup) { pastedCrop[1].Ungroup(); } copyShapeRange.Cut(); oriShapeRange = refSlide.Shapes.Paste(); oriShapeRange.Fill.ForeColor.RGB = 0xaaaaaa; oriShapeRange.Fill.Transparency = 0.7f; oriShapeRange.Line.Visible = Core.MsoTriState.msoTrue; oriShapeRange.Line.ForeColor.RGB = 0x000000; Utils.Graphics.MakeShapeViewTimeInvisible(oriShapeRange, refSlide); oriShapeRange.Select(); // finally add transition to the new slide newSlide.Transition.EntryEffect = PpEntryEffect.ppEffectFadeSmoothly; newSlide.Transition.Duration = 0.5f; return new PowerPointBgEffectSlide(newSlide.GetNativeSlide()); } catch (Exception e) { var errorMessage = CropToShape.GetErrorMessageForErrorCode(e.Message); errorMessage = errorMessage.Replace("Crop To Shape", "Blur/Recolor Remainder"); newSlide.Delete(); throw new InvalidOperationException(errorMessage); } }