Browse our Products

Aspose.Words for .NET 24.9 Release Notes

Major Features

There are 76 improvements and fixes in this regular monthly release. The most notable are:

  • Group Shape Insertion: Added new public methods DocumentBuilder.InsertGroupShape.
  • Structured Document Tag Insertion: Added a public API to insert StructuredDocumentTags using the DocumentBuilder class.
  • Enhanced Radial Chart Rendering: Implemented the rendering of graduations on radial charts.
  • Digital Signature Improvements: Added the ability to sign documents with XAdES-EPES level XML-DSig signatures.
  • Markdown Formatting: Incorporated an option to recognize underline formatting when loading Markdown documents.
  • Footnote/Endnote Separator Access: Provided public access to footnote/endnote separators.

Full List of Issues Covering all Changes in this Release

Expand to view the full list of issues.
KeySummaryCategory
WORDSNET-26688Provide a feature to get details for format revisionNew Feature
WORDSNET-27240Allow creating DML GroupShapeNew Feature
WORDSNET-17820Provide API to Remove the Footnote Endnote Separator LineNew Feature
WORDSNET-9645Add feature to format FootnoteSeparator/EndnoteSeparatorNew Feature
WORDSNET-20641Provide API to Detect and Manipulate Content of Footnote Endnote SeparatorsNew Feature
WORDSNET-27281Implement custom falloff for the path gradient rendering for .NET StandardNew Feature
WORDSNET-27234DOCX to PDF: output has more pages (because Open Type Ligatures is not supported)New Feature
WORDSNET-22239Support of Sensitivity LabelsEnhancement
WORDSNET-17592Contents are shifted up to the page in output PDFEnhancement
WORDSNET-22328Body of Pages render a little above than the original PositionEnhancement
WORDSNET-17917“Step down” logic returns incorrect position when line is wrapped around square and tight-wrapped floatersEnhancement
WORDSNET-23542DOCX to PDF: Footer content pulled downEnhancement
WORDSNET-23502DOCX to PDF: Header truncated to half the sizeEnhancement
WORDSNET-27239Modifying paragraph style of the footnote separator and footnote continuation separatorEnhancement
WORDSNET-27220Save PDF to WEBP directly without intermediate flow layoutEnhancement
WORDSNET-27219Save PDF to EPS directly without intermediate flow layoutEnhancement
WORDSNET-27117DOCX to PDF: Accessibility should read the page number of visited documentEnhancement
WORDSNET-24217Space after the floating shape in the header is less than in the original documentBug
WORDSNET-24474Content is misplaced upon rendering documentBug
WORDSNET-25264Incorrect line Y after text wrappingBug
WORDSNET-27285Incorrect text position after converting to PDFBug
WORDSNET-16750Content position is changed in output PDFBug
WORDSNET-26295Tick marks are lost upon rendering radar chartBug
WORDSNET-27272EMF image is rendered a little darker than in the source documentBug
WORDSNET-17433Add feature to handle documents labeled and/or protected by Microsoft Azure Information Protection ServicesBug
WORDSNET-26908Layout issue for document with CambodianBug
WORDSNET-25317Newly added content control does not inherit “Caption” styleBug
WORDSNET-27231Structural destination in PDF 2 structure is not created correctly in case of bookmark parent node spans over pagesBug
WORDSNET-27326InvalidCastException is thrown upon comparing documentBug
WORDSNET-26989Images overlap after renderingBug
WORDSNET-27291Code blocks are improperly imported from markdownBug
WORDSNET-27290HTML is not interpreted while loading MarkdownBug
WORDSNET-27294MailMerge field does not behave correctly with SUM formulaBug
WORDSNET-27266InvalidCastException is thrown upon using Document.ExtractPages methodBug
WORDSNET-27246RTF to PDF: Extra ? Symbol addedBug
WORDSNET-27217ArgumentOutOfRangeException is thrown upon updating fieldsBug
WORDSNET-27187Chinese becomes Arabic numbering after conversion to HTMLBug
WORDSNET-27345Public key token i null in Aspose.Words.Pdf2WordBug
WORDSNET-27195Add direct conversion from PDF to PCL formatBug
WORDSNET-27172Incorrect displaying table content after extracting pageBug
WORDSNET-27233FileCorruptedException is thrown upon loading DOCX document.Bug
WORDSNET-26139Charts are rendered improperly when PdfCompliance.PdfA1a is usedBug
WORDSNET-27249Text is barely visible after rendering document to PDFBug
WORDSNET-27251TestCorruptedJpeg is red on .NET StandardBug
WORDSNET-27204InvalidOperationException is raised when saving document optimized for Word 2013 with added Word 2016 chartsBug
WORDSNET-27356Critical memory leak when splitting document into separate pagesBug
WORDSNET-27295Exception thrown during rendering of tables with diagonal bordersBug
WORDSNET-25096Pie charts slices re invisible after renderingBug
WORDSNET-27200Extra paragraph added after open/save documentBug
WORDSNET-27304TestUI deletes temporary files earlier than necessaryBug
WORDSNET-27061Missed headings in navigation pane after conversion to EPUBBug
WORDSNET-26570Remove obsolete properties of ChartAxis classBug
WORDSNET-24334DOCX to PDF: Chart legend not rendered correctlyBug
WORDSNET-24523Incorrect rendering underline for formulas with fractionsBug
WORDSNET-27030Cannot add Word 2016 chart using Aspose.WordsBug
WORDSNET-27198XML to DOC: Footer structure changedBug
WORDSNET-27284PDF produced by Aspose.Words does not pass PDF/UA validationBug
WORDSNET-25029Aspose.Words duplicated table properties in rows in tblPrEx elementBug
WORDSNET-27262LowCode.Converter does not produce multi-page tiff from PDFBug
WORDSNET-18451DocumentBuilder.EndTable sets DocumentBuilder.Font properties unexpectedlyBug
WORDSNET-18449DocumentBuilder.EndTable sets DocumentBuilder.Font.Bold to trueBug
WORDSNET-15676Different Font color after builder.EndTable in 17.7 and 14.1Bug
WORDSNET-23389Issue when changing Font immediately after DocumentBuilder.StartTableBug
WORDSNET-27181TOA broke after updating the fieldsBug
WORDSNET-27242Incorrect font metric is written when embedding font in SVGBug
WORDSNET-27265DOCX to MD: Conversion raises ArgumentOutOfRangeExceptionBug
WORDSNET-27245Borders of a text box are rendered whereas they should notBug
WORDSNET-27143InvalidOperationException when calling AddConverterFeatureIfNeeded()Bug
WORDSNET-27209List style is changed after merging documents and calling Document.Cleanup methodBug
WORDSNET-26635Incorrect direction for Arabic textBug
WORDSNET-27315Error “The type initializer for ‘XY’ threw an exception” in Docker ContainerBug
WORDSNET-27221Number format behavior has been changed after 24.5 version in Norwegian cultureBug
WORDSNET-25614Rar achieve is detected as TXTBug
WORDSNET-27252PDF to DOC to PCL: Adds new page with PCL XL errorBug
WORDSNET-18989Allow English text to wrap in the middle of a wordBug
WORDSNET-27270Chinese glyph is missed after renderingBug

Public API and Backward Incompatible Changes

This section lists public API changes that were introduced in Aspose.Words 24.9. It includes not only new and obsoleted public methods, but also a description of any changes in the behavior behind the scenes in Aspose.Words which may affect existing code. Any behavior introduced that could be seen as regression and modifies the existing behavior is especially important and is documented here.

Added ability to sign documents with XAdES-EPES level of XML-DSig signature

Related issue: WORDSNET-27192

Added a new public property to Aspose.Words.DigitalSignatures.SignOptions class:

/// <summary>
/// Specifies the level of a digital signature based on XML-DSig standard.
/// The default value is <see cref="DigitalSignatures.XmlDsigLevel.XmlDSig"/>.
/// </summary>
/// <remarks>
/// Different levels of XAdES signatures can be created starting from Office 2010.
/// </remarks>
public XmlDsigLevel XmlDsigLevel { get; set; }

and public enumeration in Aspose.Words.DigitalSignatures namespace:

/// <summary>
/// Specifies the level of a digital signature based on XML-DSig standard.
/// </summary>
public enum XmlDsigLevel

This use case explains how to specify XAdES-EPES level of XML-DSig signature:

Added an option that allows to recognize underline formatting while loading Markdown

Related issue: WORDSNET-27318

Implemented new public property in Aspose.Words.Loading.MarkdownLoadOptions class:

/// <summary>
/// Gets or sets a boolean value indicating either to recognize a sequence
/// of two plus characters "++" as underline text formatting.
/// The default value is <c>false</c>.
/// </summary>
public bool ImportUnderlineFormatting { get; set; }

This use case explains how to recognize underline formatting while loading Markdown:

Added new public methods DocumentBuilder.InsertGroupShape

Related issue: WORDSNET-27240

A new InsertGroupShape() public methods has been added to DocumentBuilder class:

/// <summary>
/// Groups the shapes passed as a parameter into a new GroupShape node which is inserted into the current position.
/// </summary>
/// <param name="shapes">The list of shapes to be grouped.</param>
/// <remarks>
/// <p>The position and dimension of the new GroupShape will be calculated automatically.</p>
/// <p>VML and DML shapes cannot be grouped together.</p>
/// </remarks>
public GroupShape InsertGroupShape(params Shape[] shapes)

/// <summary>
/// Groups the shapes passed as a parameter into a new GroupShape node of the specified size which is inserted into the specified position.
/// </summary>
/// <param name="left">Distance in points from the origin to the left side of the group shape.</param>
/// <param name="top">Distance in points from the origin to the top side of the group shape.</param>
/// <param name="width">The width of the group shape in points. A negative value is not allowed.</param>
/// <param name="height">The height of the group shape in points. A negative value is not allowed.</param>
/// <param name="shapes">The list of shapes to be grouped.</param>
/// <remarks>
/// VML and DML shapes cannot be grouped together.
/// </remarks>
public GroupShape InsertGroupShape(double left, double top, double width, double height, params Shape[] shapes)

This use case explains how to insert group shape:

Added new public option DocumentBuilderOptions.ContextTableFormatting

Related issue: WORDSNET-23389

A new public option ContextTableFormatting has been added in DocumentBuilderOptions class:

/// <summary>
/// True if the formatting applied to table content does not affect the formatting of the content that follows it.
/// Default value is <c>true</c>.
/// </summary>
public bool ContextTableFormatting{ get; set; }

This use case explains how to specify the desired behavior for content formatting:

Added public access to footnote/endnote separators

Related issue: WORDSNET-20641.

Following public classes had been added:

/// <summary>
/// Represents a container for the footnote/endnote separator and continuation content of a document.
/// </summary>
/// <remarks>
/// <p><see cref="FootnoteSeparator"/> can contain <see cref="Paragraph"/> and <see cref="Tables.Table">Table</see> child nodes.</p>
///
/// <p>There can only be one <see cref="FootnoteSeparator"/> of each <see cref="FootnoteSeparatorType"/> in a document.</p>
/// </remarks>
public class FootnoteSeparator : Story
{
    /// <summary>
    /// Creates a new footnote/endnote separator of the specified type.
    /// </summary>
    public FootnoteSeparator(DocumentBase doc, FootnoteSeparatorType separatorType);

    public FootnoteSeparatorType SeparatorType { get; }
}

/// <summary>
/// Specifies the type of the footnote/endnote separator.
/// </summary>
public enum FootnoteSeparatorType
{
    /// <summary>
    /// Separator between main text and footnote text.
    /// </summary>
    FootnoteSeparator = 0,

    /// <summary>
    /// Printed above footnote text on a page when the text must be continued from a previous page.
    /// </summary>
    FootnoteContinuationSeparator,

    /// <summary>
    /// Printed below footnote text on a page when footnote text must be continued on a succeeding page.
    /// </summary>
    FootnoteContinuationNotice,

    /// <summary>
    /// Separator between main text and endnote text.
    /// </summary>
    EndnoteSeparator,

    /// <summary>
    /// Printed above endnote text on a page when the text must be continued from a previous page.
    /// </summary>
    EndnoteContinuationSeparator,

    /// <summary>
    /// Printed below endnote text on a page when endnote text must be continued on a succeeding page.
    /// </summary>
    EndnoteContinuationNotice
}

/// <summary>
/// Provides typed access to <see cref="FootnoteSeparator"/> nodes of a document.
/// </summary>
public class FootnoteSeparatorCollection : IEnumerable<FootnoteSeparator>
{
    /// <summary>
    /// Retrieves a <see cref="FootnoteSeparator"/> of the specified type.
    /// </summary>
    /// <remarks>
    /// Returns <c>null</c> if the footnote/endnote separator of the specified type is not found.
    /// </remarks>
    public FootnoteSeparator this[FootnoteSeparatorType separatorType]
}
Following public property has been added:

/// <summary>
/// Provides access to the footnote/endnote separators defined in the document.
/// </summary>
public DocumentBase.FootnoteSeparatorCollection FootnoteSeparators { get; }

This public API changes allows manipulations of footnote/endnote separators. Footnote/endnote separators inherit Story type therefore any actions allowed for Body/HeaderFooter can be applied for FootnoteSeparator objects.

This use case explains how to remove endnote separator line:

This use case explains how to modify separator line formatting:

Added public API to insert StructuredDocumentTag using DocumentBuilder class

Related issue: WORDSNET-25317.

Following method has been added to DocumentBuilder class.

/// <summary>
/// Inserts a <see cref="StructuredDocumentTag" /> into the document.
/// </summary>
/// <returns>The <see cref="StructuredDocumentTag"/> node that was just inserted.</returns>
public StructuredDocumentTag DocumentBuilder.InsertStructuredDocumentTag(SdtType type);

New public API method mimics Microsoft Word behavior when StrucruredDocumentTag (called “Content Control” in Microsoft Word UI) object is inserted at cursor. Only following StructuredDocumentTag types are allowed for insertion: SdtType.PlainText, SdtType.RichText, SdtType.Checkbox, SdtType.DropDownList, SdtType.ComboBox, SdtType.Picture, SdtType.Date. Markup level of inserted StructuredDocumentTag will be detected automatically and depends on position being inserted at. New StructuredDocumentTag will inherit paragraph and font formatting from cursor position.

This use case demonstrates StructuredDocumentTag insertion at different cursor positions:

Removed obsolete properties of ChartAxis class

Related issue: WORDSNET-26570

The following obsolete properties have been removed from the ChartAxis class:

/// <summary>
/// Returns or sets the position of the tick labels on the axis.
/// </summary>
/// <remarks>
/// The property is not supported by MS Office 2016 new charts.
/// </remarks>
[Obsolete("Obsolete, use the TickLabels.Position property instead.")]
public AxisTickLabelPosition TickLabelPosition { get; set; }

/// <summary>
/// Gets or sets the distance of labels from the axis.
/// </summary>
/// <remarks>
/// The property represents a percentage of the default label offset.
/// Valid range is from 0 to 1000 percent inclusive. Default value is 100%.
/// The property has effect only for category axes. It is not supported by MS Office 2016 new charts.
/// </remarks>
[Obsolete("Obsolete, use the TickLabels.Offset property instead.")]
public int TickLabelOffset { get; set; }

/// <summary>
/// Gets or sets the interval, at which tick labels are drawn.
/// </summary>
/// <remarks>
/// The property has effect for text category and series axes. It is not supported by MS Office 2016 
/// new charts. Valid range of a value is greater than or equal to 1.
/// Setting this property sets the <see cref="AxisTickLabels.IsAutoSpacing"/> property to <c>false</c>.
/// </remarks>
[Obsolete("Obsolete, use the TickLabels.Spacing property instead.")]
public int TickLabelSpacing { get; set; }

/// <summary>
/// Gets or sets a flag indicating whether automatic interval of drawing tick labels shall be used.
/// </summary>
/// <remarks>
/// Default value is <c>true</c>.
/// The property has effect for text category and series axes. It is not supported by MS Office 2016
/// new charts.
/// </remarks>
[Obsolete("Obsolete, use the TickLabels.IsAutoSpacing property instead.")]
public bool TickLabelSpacingIsAuto { get; set; }

/// <summary>
/// Gets or sets text alignment of axis tick labels.
/// </summary>
/// <remarks>
/// This property has effect only for multi-line labels.
/// Default value is <see cref="ParagraphAlignment.Center"/>.
/// </remarks>
[Obsolete("Obsolete, use the TickLabels.Alignment property instead.")]
public ParagraphAlignment TickLabelAlignment { get; set; }

Instead, you should use the corresponding properties of the AxisTickLabels class, whose instance is provided in the ChartAxis.TickLabels property.

For details on replacements for the removed properties, see the messages in the Obsolete attributes above.