Aspose.Slides for .NET 19.10 Release Notes

KeySummaryCategory
SLIDESNET-40805Font Fallback in Aspose.SlidesFeature
SLIDESNET-40689Support for accessing prompt text from slides shapes placeholdersFeature
SLIDESNET-41393After conversion to PDF/A an image is rendered with blurFeature
SLIDESNET-41099High memory consumption during a document savingEnhancement
SLIDESNET-41426Read animation using Aspose.SlidesEnhancement
SLIDESNET-39722Aspose Slides using a lot of memory for generating a small PPTXEnhancement
SLIDESNET-36972Slower performance when converting presentation to PDF in multi-threaded environmentBug
SLIDESNET-41065HtmlOptions.SvgResponsiveLayout save option not working when resources are externalBug
SLIDESNET-41367Adding SVG to PPT is throwing an error on UbuntuBug
SLIDESNET-40527Slide to PNG - word moved up to first lineBug
SLIDESNET-41414After saving the presentation output file is corruptedBug
SLIDESNET-40129Some shapes have trimmed text in the output PDF documentBug
SLIDESNET-41251The unexpected characters occur on the chart axis labelsBug
SLIDESNET-41055PPTX to PDF - output different than MS Word exportBug
SLIDESNET-41200After conversion Format Axes get distortedBug
SLIDESNET-40030Adding text box on a slide in PowerPoint shrinks and overflows the text added using Aspose.SlidesBug
SLIDESNET-40513Add clone method not working properly in 18.7Bug
SLIDESNET-33205UnsupportedFormat exception on loading ODP fileBug
SLIDESNET-40954PPTX not properly converted to PDFBug
SLIDESNET-33555UnsupportedFormat exception on loading ODP fileBug
SLIDESNET-40744Unexpected repair message in generated PPTXBug
SLIDESNET-38238Text wrapping on slideBug
SLIDESNET-38162Wrong word wrapping in SmartArt elementBug
SLIDESNET-38273Problem while converting PPT to SVGBug
SLIDESNET-38166Font size is invalid on renderingBug
SLIDESNET-33535The text is improperly rendered in generated thumbnailBug
SLIDESNET-36197The slide text is improperly rendered in generated TIFFBug
SLIDESNET-39305Wrong word wrapping in generated PDF and thumbnailBug
SLIDESNET-41164Using Tab key instead of Spacebar key results in subscript misalignment in HTMLBug
SLIDESNET-37441The text is improperly rendered in generated thumbnailBug
SLIDESNET-38163Text rendering differs from PowerPointBug
SLIDESNET-39104Wrong text breaking in generated thumbnailBug
SLIDESNET-37307Wrong text wrapping in generated thumbnailBug
SLIDESNET-41278Presentation repair message on slide theme overrideBug
SLIDESNET-41320Aspose Slides returns incorrect external URL for hyperlink if the display text contains a colon characterBug
SLIDESNET-41376FormatException on converting PPTX to PNGBug
SLIDESNET-37614High memory consumption leading to IO exception on saving a PowerPoint with 100 slidesBug
SLIDESNET-41384Chart color and text change on saving to PDFBug
SLIDESNET-41385Chart title vanishes on saving the presentationBug
SLIDESNET-41330PPTX not properly converted to SVGBug
SLIDESNET-41389Text is improperly rendered in generated PDFBug
SLIDESNET-41399PPTX fails to export as PDF NotesBug
SLIDESNET-41352Exception on converting PPTX to PDFBug
SLIDESNET-41407IndexOutOfRangeException on loading presentationBug
SLIDESNET-41377Repair message appears on loading and saving presentationBug
SLIDESNET-41380StackOverflowException when saving to PDFBug
SLIDESNET-33428ODP presentation bullets improperly renderedBug
SLIDESNET-35741The images are missing in generated PDFBug

Public API Changes

Introducing new API for FontFallBack functionality

Fallback font is used when the font specified for text is present in the system, but this font doesn’t contain a necessary glyph. In this case, fallback font allows using one of the specified fallback fonts for the glyph replacement. It differs, from font subsitution, which can be used to dynamically substitute the font of the whole document, if the specified font can’t be found.

In order to use fallback font functionality, you need to set the rules how fallback fonts should be used. For that, you can use FontFallBackRule type and initialize it’s object with the Unicode range and fallback font name, or even a list of names.

Here is an example:

uint startUnicodeIndex = 0x0B80;
uint endUnicodeIndex = 0x0BFF;

IFontFallBackRule firstRule = new FontFallBackRule (startUnicodeIndex, endUnicodeIndex, "Vijaya");
IFontFallBackRule secondRule = new FontFallBackRule (0x3040, 0x309F, "MS Mincho, MS Gothic");

//Also the fonts list can be added in several ways:
string[] fontNames = new string[] { "Segoe UI Emoji, Segoe UI Symbol", "Arial"};
IFontFallBackRule thirdRule = new FontFallBackRule (0x1F300, 0x1F64F, fontNames);

It is possible to specify several rules and add them into FontFallBackRulesCollection. Then you may assign this fallback font fules collection into an appropriate field of FontsManager object.

Each presentation has FontsManager object, implementing IFontsManager, which defines the main logic of fonts rendering:

using (Presentation presentation = new Presentation())
{
    IFontFallBackRulesCollection userRulesList = new FontFallBackRulesCollection();

    userRulesList.Add(new FontFallBackRule(0x0B80, 0x0BFF, "Vijaya"));
    userRulesList.Add(new FontFallBackRule(0x3040, 0x309F, "MS Mincho, MS Gothic"));

    presentation.FontsManager.FontFallBackRulesCollection = userRulesList;
}

Note: The ranges of several rules can overlap. In this case, the fonts from overlapped rules will be merged and places in order the rules were added into the list.

You can automatically retrieve a new linked instance directly from the FontsManager:

IFontFallBackRulesCollection userRulesList = presentation.FontsManager.FontFallBackRulesCollection;

This can be used to change existing FontsManager settings, as shown in the next example.

You may also use several collections with different set of rules by assigning the required list in the FontsManager. If you do not want to use multiple lists, you do not have to create a new collection.

using (Presentation presentation = new Presentation("MyPresentation.pptx"))
{
    IFontFallBackRulesCollection userRulesList = presentation.FontsManager.FontFallBackRulesCollection;
    userRulesList.Add(new FontFallBackRule(0x400, 0x4FF, "Times New Roman"));
    presentation.Slides[0].GetThumbnail (1f,1f).Save ("Slide0.png", ImageFormat.Png);
}


IFontsManager.FontFallBackRulesCollection property added

FontFallBackRulesCollection property has been added to IFontsManager interface and FontsManager class. It allows to get and set a collection of FontFallBackRule objects to control the rules of using fallback fonts.

FontFallBackRulesCollection can be used in the following way:

using (Presentation pres = new Presentation(path + "input.pptx"))
{
    // Getting an empty collection from FontsManager
    IFontFallBackRulesCollection rulesList = pres.FontsManager.FontFallBackRulesCollection;

    // Adding of rule to collection
    rulesList.Add(new FontFallBackRule(0x400, 0x4FF, "Times New Roman"));

    // Saving of thumbnail from the first slide to PNG
    pres.Slides[0].GetThumbnail(1f, 1f).Save(path + "Slide_0.png", ImageFormat.Png);
    //New instance of rules collection
    IFontFallBackRulesCollection anotherRulesList = new FontFallBackRulesCollection();

    //Filling by the another set of rules
    anotherRulesList.Add(new FontFallBackRule(0x400, 0x4FF, "Tahoma"));
    anotherRulesList.Add(new FontFallBackRule(0x3040, 0x309F, "MS Mincho"));

    //Assigning of new rules to the FontsManager
    pres.FontsManager.FontFallBackRulesCollection = anotherRulesList;

    // Rendering of thumbnail with new rules and saving to PNG
    pres.Slides[0].GetThumbnail(1f, 1f).Save(path + "Slide_0_Another.png", ImageFormat.Png);
}

IFontFallBackRulesCollection, IFontFallBackRule interfaces and FontFallBackRulesCollection, FontFallBackRule classed added

FontFallBackRulesCollection (implementes IFontFallBackRulesCollection) represents an object for managing a collection of FontFallBackRule objects.

FontFallBackRule (implementes IFontFallBackRule) represents an association between the specified Unicode range and list of fonts, that may contain proper glyphs for font fallback replacement.

Below is an example:

void RenderingWithFallBack()
{
    // Create new instance of a rules collection
    IFontFallBackRulesCollection rulesList = new FontFallBackRulesCollection();
	
    // create a number of rules
    rulesList.Add(new FontFallBackRule(0x400, 0x4FF, "Times New Roman"));
    //rulesList.Add(new FontFallBackRule(...));
    
	foreach (IFontFallBackRule fallBackRule in rulesList)
    {
        //Trying to remove FallBack font "Tahoma" from loaded rules
        fallBackRule.Remove("Tahoma");
        
		//And to update of rules for specified range
        if ((fallBackRule.RangeEndIndex >= 0x4000) && (fallBackRule.RangeStartIndex < 0x5000))
            fallBackRule.AddFallBackFonts("Verdana");
    }
	
    //Also we can remove any existing rules from list
    if (rulesList.Count > 0)
        rulesList.Remove(rulesList[0]);
    
	using (Presentation pres = new Presentation(path + "input.pptx"))
    {
        //Assigning a prepared rules list for using
        pres.FontsManager.FontFallBackRulesCollection = rulesList;
        
		// Rendering of thumbnail with using of initialized rules collection and saving to PNG
        pres.Slides[0].GetThumbnail(1f, 1f).Save(path + "Slide_0.png", ImageFormat.Png);
    }
}

Equals and GetHashCode methods were overridden for Aspose.Slides.Effects classes

Equals and GetHashCode methods were overridden for Aspose.Slides.Effects classes, now objects of these classes are compared by their semantic value.

Full list of updated classes:

Aspose.Slides.Effects.AlphaBiLevel
Aspose.Slides.Effects.AlphaBiLevelEffectiveData
Aspose.Slides.Effects.AlphaCeiling
Aspose.Slides.Effects.AlphaCeilingEffectiveData
Aspose.Slides.Effects.AlphaFloor
Aspose.Slides.Effects.AlphaFloorEffectiveData
Aspose.Slides.Effects.AlphaInverse
Aspose.Slides.Effects.AlphaInverseEffectiveData
Aspose.Slides.Effects.AlphaModulate
Aspose.Slides.Effects.AlphaModulateEffectiveData
Aspose.Slides.Effects.AlphaModulateFixed
Aspose.Slides.Effects.AlphaModulateFixedEffectiveData
Aspose.Slides.Effects.AlphaReplace
Aspose.Slides.Effects.AlphaReplaceEffectiveData
Aspose.Slides.Effects.BiLevel
Aspose.Slides.Effects.BiLevelEffectiveData
Aspose.Slides.Effects.Blur
Aspose.Slides.Effects.BlurEffectiveData
Aspose.Slides.Effects.ColorChange
Aspose.Slides.Effects.ColorChangeEffectiveData
Aspose.Slides.Effects.ColorReplace
Aspose.Slides.Effects.ColorReplaceEffectiveData
Aspose.Slides.Effects.Duotone
Aspose.Slides.Effects.DuotoneEffectiveData
Aspose.Slides.Effects.FillOverlay
Aspose.Slides.Effects.FillOverlayEffectiveData
Aspose.Slides.Effects.Glow
Aspose.Slides.Effects.GlowEffectiveData
Aspose.Slides.Effects.GrayScale
Aspose.Slides.Effects.GrayScaleEffectiveData
Aspose.Slides.Effects.HSL
Aspose.Slides.Effects.HSLEffectiveData
Aspose.Slides.Effects.InnerShadow
Aspose.Slides.Effects.InnerShadowEffectiveData
Aspose.Slides.Effects.Luminance
Aspose.Slides.Effects.LuminanceEffectiveData
Aspose.Slides.Effects.OuterShadow
Aspose.Slides.Effects.OuterShadowEffectiveData
Aspose.Slides.Effects.PresetShadow
Aspose.Slides.Effects.PresetShadowEffectiveData
Aspose.Slides.Effects.Reflection
Aspose.Slides.Effects.ReflectionEffectiveData
Aspose.Slides.Effects.SoftEdge
Aspose.Slides.Effects.SoftEdgeEffectiveData
Aspose.Slides.Effects.Tint
Aspose.Slides.Effects.TintEffectiveData

Equals and GetHashCode methods were overridden for GradientStopEffectiveData

Equals and GetHashCode methods were overridden for Aspose.Slides.GradientStopEffectiveData class, now objects of this class are compared by their semantic value.