Aspose.Slides for .NET 15.10.0 Release Notes

Minor Changes

KeySummary
SLIDESNET-36651Animating chart series API

Other improments and changes

**Bug Fixes

KeySummary
SLIDESNET-37012Empty column is missing in generated PDF
SLIDESNET-37006Incorrect text on ppt to html in Chrome
SLIDESNET-36987Chart label font color changed on saving pptx
SLIDESNET-36956Presentation gets corrupt on adding slide notes
SLIDESNET-36950Aspose.Slides corrupts PPTX file if it contains a trash folder
SLIDESNET-36948Implement ODP rotate and translate frame’s transformations
SLIDESNET-36935Saving POT to POTX results in corrupted presenatation
SLIDESNET-36920Artifacts from chart on generated thumbnail
SLIDESNET-36911Background missing in generated thumbnail
SLIDESNET-36906Problem with number format of list in generated PDF
SLIDESNET-36902Saved pptx presentation requires recovery in PowerPoint
SLIDESNET-36879Bullets are lost in generated html file
SLIDESNET-36862Cell’s border is not completely drawn in case of adjacent merged cells
SLIDESNET-36848Layouts are distorted
SLIDESNET-36607Text on pdf is lost when opened in mac
SLIDESNET-36052Series Fill Color not getting applied on secondary Y axis
SLIDESNET-35988Exception on exporting PPT to PDF
SLIDESNET-35768Fonts are not rendered from HTML to presentation
SLIDESNET-35590ArgumentException is thrown while Odp loading
SLIDESNET-35579Wrong Display of Chart data when converting PPTX to JPG
SLIDESNET-35541The bullet is improperly rendered in generated slide thumbnail
SLIDESNET-35539Table cell border is rendered wrong
SLIDESNET-35482Improper charts rendering
SLIDESNET-35422Object Reference Exception is thrown on opening the PPTX file
SLIDESNET-35404Aspose.Slides failed to load chart series fill if it is Automatic fill color
SLIDESNET-34585Border for merged table cells is improperly applied

Public API Changes

New VideoPlayerHtmlController added to support export od media files to HTML

The new public class VideoPlayerHtmlController has been added to Aspose.Slides.Export namespace. Using the instance of this class user can export video and audio files into HTML. VideoPlayerHtmlController contructors accepts the following parameters: path: The path where video and audio files will be generated fileName: The name of the HTML file baseUri: The base URI which will be used to generate links Usage example:

using (Presentation pres = new Presentation("example.pptx"))
{
  const string path = "path";
  const string fileName = "video.html";
  const string baseUri = "http://www.example.com/";
  VideoPlayerHtmlController controller = new VideoPlayerHtmlController(path: path, fileName: fileName, baseUri: baseUri);
  HtmlOptions htmlOptions = new HtmlOptions(controller);
  SVGOptions svgOptions = new SVGOptions(controller);
  htmlOptions.HtmlFormatter = HtmlFormatter.CreateCustomFormatter(controller);
  htmlOptions.SlideImageFormat = SlideImageFormat.Svg(svgOptions);
  pres.Save(Path.Combine(path, fileName), SaveFormat.Html, htmlOptions);
}

Chart series animation API has been added

The new 2 methods have been added to Aspose.Slides.Animation.ISequence interface.

IEffect AddEffect(IChart chart, EffectChartMajorGroupingType type, int index, EffectType effectType, EffectSubtype subtype, EffectTriggerType triggerType);
IEffect AddEffect(IChart chart, EffectChartMinorGroupingType type, int seriesIndex, int categoriesIndex, EffectType effectType, EffectSubtype subtype, EffectTriggerType triggerType);

These methods are intended to support the chart’s elements animations:

  • by series
  • by categories
  • by series elements
  • by categories elements

The two new enums EffectChartMajorGroupingType and EffectChartMinorGroupingType related to the chart’s elements animation were introduced.

To add a series animation to the chart the following code may be used:

using (Presentation pres = new Presentation(inFileName))
{
  var slide = pres.Slides[0] as Slide;
  var shapes = slide.Shapes as ShapeCollection;
  var chart = shapes[0] as IChart;
  
  slide.Timeline.MainSequence.AddEffect(chart, EffectType.Fade, EffectSubtype.None, 
      EffectTriggerType.AfterPrevious);
  
  ((Sequence)slide.Timeline.MainSequence).AddEffect(chart, 
      EffectChartMajorGroupingType.BySeries, 0, 
	  EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);
  
  ((Sequence)slide.Timeline.MainSequence).AddEffect(chart, 
      EffectChartMajorGroupingType.BySeries, 1, 
      EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);
  
  ((Sequence)slide.Timeline.MainSequence).AddEffect(chart,
      EffectChartMajorGroupingType.BySeries, 2,
      EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);

  ((Sequence)slide.Timeline.MainSequence).AddEffect(chart,
      EffectChartMajorGroupingType.BySeries, 3,
      EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);
  
  pres.Save(outFileName, SaveFormat.Pptx);
}

Categories animation:

using (Presentation pres = new Presentation(inFileName))
{
  var slide = pres.Slides[0] as Slide;
  var shapes = slide.Shapes as ShapeCollection;
  var chart = shapes[0] as IChart;
  
  slide.Timeline.MainSequence.AddEffect(chart, EffectType.Fade, EffectSubtype.None,
      EffectTriggerType.AfterPrevious);
  
  ((Sequence)slide.Timeline.MainSequence).AddEffect(chart,
      EffectChartMajorGroupingType.ByCategory, 0,
      EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);

  ((Sequence)slide.Timeline.MainSequence).AddEffect(chart,
      EffectChartMajorGroupingType.ByCategory, 1,
      EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);

  ((Sequence)slide.Timeline.MainSequence).AddEffect(chart,
      EffectChartMajorGroupingType.ByCategory, 2,
      EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);

  ((Sequence)slide.Timeline.MainSequence).AddEffect(chart,
      EffectChartMajorGroupingType.ByCategory, 3,
      EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);

  pres.Save(outFileName, SaveFormat.Pptx);
}

Series elements animation:

using (Presentation pres = new Presentation(inFileName))
{
  var slide = pres.Slides[0] as Slide;
  var shapes = slide.Shapes as ShapeCollection;
  var chart = shapes[0] as IChart;

  slide.Timeline.MainSequence.AddEffect(chart, EffectType.Fade, EffectSubtype.None,
      EffectTriggerType.AfterPrevious);

  ((Sequence)slide.Timeline.MainSequence).AddEffect(chart,
      EffectChartMinorGroupingType.ByElementInSeries, 0, 0,
      EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);

  ((Sequence)slide.Timeline.MainSequence).AddEffect(chart,
      EffectChartMinorGroupingType.ByElementInSeries, 0, 1,
      EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);

  ((Sequence)slide.Timeline.MainSequence).AddEffect(chart,
      EffectChartMinorGroupingType.ByElementInSeries, 0, 2,
      EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);

  ((Sequence)slide.Timeline.MainSequence).AddEffect(chart,
      EffectChartMinorGroupingType.ByElementInSeries, 0, 3,
      EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);

  ((Sequence)slide.Timeline.MainSequence).AddEffect(chart,
      EffectChartMinorGroupingType.ByElementInSeries, 1, 0,
      EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);

  ((Sequence)slide.Timeline.MainSequence).AddEffect(chart,
      EffectChartMinorGroupingType.ByElementInSeries, 1, 1,
      EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);

  ((Sequence)slide.Timeline.MainSequence).AddEffect(chart,
      EffectChartMinorGroupingType.ByElementInSeries, 1, 2,
      EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);

  ((Sequence)slide.Timeline.MainSequence).AddEffect(chart,
      EffectChartMinorGroupingType.ByElementInSeries, 1, 3,
      EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);

  ((Sequence)slide.Timeline.MainSequence).AddEffect(chart,
      EffectChartMinorGroupingType.ByElementInSeries, 2, 0,
      EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);

  ((Sequence)slide.Timeline.MainSequence).AddEffect(chart,
      EffectChartMinorGroupingType.ByElementInSeries, 2, 1,
      EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);

  ((Sequence)slide.Timeline.MainSequence).AddEffect(chart,
      EffectChartMinorGroupingType.ByElementInSeries, 2, 2,
      EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);

  ((Sequence)slide.Timeline.MainSequence).AddEffect(chart,
      EffectChartMinorGroupingType.ByElementInSeries, 2, 3,
      EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);

  pres.Save(outFileName, SaveFormat.Pptx);
}

Categories elements animation:

using (Presentation pres = new Presentation(inFileName))
{
  var slide = pres.Slides[0] as Slide;
  var shapes = slide.Shapes as ShapeCollection;
  var chart = shapes[0] as IChart;

  slide.Timeline.MainSequence.AddEffect(chart, EffectType.Fade, EffectSubtype.None,
      EffectTriggerType.AfterPrevious);

  ((Sequence)slide.Timeline.MainSequence).AddEffect(chart,
      EffectChartMinorGroupingType.ByElementInCategory, 0, 0,
      EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);

  ((Sequence)slide.Timeline.MainSequence).AddEffect(chart,
      EffectChartMinorGroupingType.ByElementInCategory, 0, 1,
      EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);

  ((Sequence)slide.Timeline.MainSequence).AddEffect(chart,
      EffectChartMinorGroupingType.ByElementInCategory, 0, 2,
      EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);

  ((Sequence)slide.Timeline.MainSequence).AddEffect(chart,
      EffectChartMinorGroupingType.ByElementInCategory, 0, 3,
      EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);

  ((Sequence)slide.Timeline.MainSequence).AddEffect(chart,
      EffectChartMinorGroupingType.ByElementInCategory, 1, 0,
      EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);

  ((Sequence)slide.Timeline.MainSequence).AddEffect(chart,
      EffectChartMinorGroupingType.ByElementInCategory, 1, 1,
      EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);

  ((Sequence)slide.Timeline.MainSequence).AddEffect(chart,
      EffectChartMinorGroupingType.ByElementInCategory, 1, 2,
      EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);

  ((Sequence)slide.Timeline.MainSequence).AddEffect(chart,
      EffectChartMinorGroupingType.ByElementInCategory, 1, 3,
      EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);

  ((Sequence)slide.Timeline.MainSequence).AddEffect(chart,
      EffectChartMinorGroupingType.ByElementInCategory, 2, 0,
      EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);

  ((Sequence)slide.Timeline.MainSequence).AddEffect(chart,
      EffectChartMinorGroupingType.ByElementInCategory, 2, 1,
      EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);

  ((Sequence)slide.Timeline.MainSequence).AddEffect(chart,
      EffectChartMinorGroupingType.ByElementInCategory, 2, 2,
      EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);

  ((Sequence)slide.Timeline.MainSequence).AddEffect(chart,
      EffectChartMinorGroupingType.ByElementInCategory, 2, 3,
      EffectType.Appear, EffectSubtype.None, EffectTriggerType.AfterPrevious);

  pres.Save(outFileName, SaveFormat.Pptx);
}