Browse our Products
Aspose.Words for .NET 24.8 Release Notes
Major Features
There are 51 improvements and fixes in this regular monthly release. The most notable are:
- Chart Customization: Precise control over chart axis tick label orientation and rotation.
- Font Management: Expanded font information with EmbeddingLicensingRights property.
- Document Structure: Efficiently clear section headers and footers while preserving watermarks.
- Format Compatibility: Improved HTML and XAML export with backward compatibility for backslash and yen sign.
- PDF Functionality: Enhanced PDF export with support for using SDT tags as form field names.
- Document Conversion: Introduced a new LowCode.Converter class, designed to provide a set of methods for converting various types of documents with a single line of code.
- Digital Signatures: Enabled digital signing of XPS documents using XpsSaveOptions.
Full List of Issues Covering all Changes in this Release
Expand to view the full list of issues.
Key | Summary | Category |
---|---|---|
WORDSNET-26787 | Provide a way to specify UpdateCreatedTimeProperty,UpdateLastPrintedProperty and UpdateLastSavedTimeProperty options while using Document.RenderToSize and Document.RenderToScale methods | New Feature |
WORDSNET-27203 | Add property to specify axis labels orientation | New Feature |
WORDSNET-27202 | Add property to specify axis labels rotation | New Feature |
WORDSNET-27222 | Consider using Title or Tag of SDT as a name of form field in PDF | New Feature |
WORDSNET-27063 | Export control form tag or alias as form ID in PDF | New Feature |
WORDSNET-26552 | Consider adding an option into Section.ClearHeadersFooters to keep watermarks | New Feature |
WORDSNET-25369 | Implement low-code public API for direct conversion between fixed page formats | New Feature |
WORDSNET-26686 | Provide an option to check “Print and Preview” flag for fonts embedded into document | New Feature |
WORDSNET-26848 | Support watermarks in output XSLX documents | New Feature |
WORDSNET-27184 | Implement Bibliography edit API | New Feature |
WORDSNET-10750 | Provide Table.ConvertToText method in Aspose.Words | New Feature |
WORDSNET-27201 | Section breaks move to the next page and create blank pages when converting to PDF | Bug |
WORDSNET-27188 | Providing sign document option in XpsSaveOptions | Bug |
WORDSNET-27166 | Text positioning issue in list after converting PDF to DOCX | Bug |
WORDSNET-27163 | Extra spaces between “THE” and “REGULAR”. | Bug |
WORDSNET-27213 | Incorrect wrapping boundaries reported for a text box with auto width | Bug |
WORDSNET-25012 | InvalidOperationException is thrown upon comparing document | Bug |
WORDSNET-27067 | EQ field is rendered improperly | Bug |
WORDSNET-26785 | Incorrect korean backslash symbol after converting to PDF | Bug |
WORDSNET-26346 | Extra page while document saving to PDF | Bug |
WORDSNET-26466 | Barcode generated by CustomBarcodeGenerator example has incorrect size | Bug |
WORDSNET-27122 | Unneeded footnote continuation notice on conversion to PDF | Bug |
WORDSNET-27169 | Remove obsolete API from IStructuredDocumentTag | Bug |
WORDSNET-26698 | Table row w14:paraId are duplicated after cloning row | Bug |
WORDSNET-27045 | Second level items are not included in TOC | Bug |
WORDSNET-27059 | Delta symbol in OfficeMath is rendered as missed character | Bug |
WORDSNET-26646 | horizontal axis labels are rendered improperly after building report | Bug |
WORDSNET-27098 | Italic text in OfficeMath is rendered as regular | Bug |
WORDSNET-26400 | Incorrect font for Chinese characters inside SDT on conversion to PDF | Bug |
WORDSNET-27159 | FileCorruptedException while loading mht files | Bug |
WORDSNET-27199 | Style of footnote mark is lost after open/save RTF document | Bug |
WORDSNET-27144 | Chart axis crossing value changed after re-saving | Bug |
WORDSNET-26864 | Wrong layout when converting particular DOC to PDF | Bug |
WORDSNET-27196 | pdf-online tool reports that PDF produced by Aspose.Words does not conform PDF 1.7 spec | Bug |
WORDSNET-22807 | Reference to the Microsoft Forms 2.0 Object Library is lost after setting SourceCode | Bug |
WORDSNET-27119 | Export to XLSX produces document with broken tables layout which can not be re-saved | Bug |
WORDSNET-27050 | Chinese characters are rendered as missed characters | Bug |
WORDSNET-26905 | Comment discrepancies after mapping | Bug |
WORDSNET-26986 | Form fields are not updated after calling Document.UpdateFields | Bug |
WORDSNET-26519 | Skatter chart is rendered improperly | Bug |
WORDSNET-27140 | EQ-field matrix. Incorrect height | Bug |
WORDSNET-27161 | Image loss after converting PDF to DOCX | Bug |
WORDSNET-26639 | Axis boundaries are incorrect after building report | Bug |
WORDSNET-26892 | Converting DOCX to RTF text disappears | Bug |
WORDSNET-27158 | Bookmarks are not preserved in HtmlFixed | Bug |
WORDSNET-27157 | Incorrect text wrapping when converting RTF to PDF | Bug |
WORDSNET-26828 | Hyperlink Breakage in Aspose.Words PDF Conversion | Bug |
WORDSNET-27136 | Wrong content alignment after conversion to HTML | Bug |
WORDSNET-26643 | Skype SILK is detected by Aspose.Words as TXT | Bug |
WORDSNET-8602 | Improve export of paragraphs with borders to HTML with embedded CSS | Bug |
WORDSNET-6189 | Provide syntax analysis of text inside Html to auto-detect encoding | Bug |
Public API and Backward Incompatible Changes
This section lists public API changes that were introduced in Aspose.Words 24.8. 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 set orientation and rotation of chart axis tick labels
Related issue: WORDSNET-27202
The new properties Orientation and Rotation have been added to the AxisTickLabels class:
/// <summary>
/// Gets or sets the orientation of the tick label text.
/// </summary>
/// <remarks>
/// The default value is ShapeTextOrientation.Horizontal.
/// Note that some ShapeTextOrientation values do not affect the orientation of tick label text in value axes.
/// </remarks>
public ShapeTextOrientation Orientation { get; set; }
/// <summary>
/// Gets or sets the rotation of the tick labels in degrees.
/// </summary>
/// <remarks>
/// The range of acceptable values is from -180 to 180 inclusive. The default value is 0.
/// </remarks>
public int Rotation { get; set; }
This use case explains how to to set orientation and rotation of axis tick labels:
Added EmbeddingLicensingRights property to FontInfo and PhysicalFontInfo
Related issue: WORDSNET-26686
Added EmbeddingLicensingRights property to FontInfo and PhysicalFontInfo classes:
/// <summary>
/// Represents embedding licensing rights for the font.
/// </summary>
/// <remarks>
/// To learn more, visit the
/// <a href="https://learn.microsoft.com/en-us/typography/opentype/spec/os2#fstype">OpenType specification section</a>
/// on Microsoft Typography portal.
/// </remarks>
public class FontEmbeddingLicensingRights
{
/// <summary>
/// Usage permissions.
/// </summary>
public FontEmbeddingUsagePermissions EmbeddingUsagePermissions { get; }
/// <summary>
/// Indicates the "No subsetting" restriction.
/// </summary>
/// <remarks>
/// When this flag is set, the font must not be subsetted prior to embedding. Other embedding restrictions
/// also apply.
/// </remarks>
public bool NoSubsetting { get; }
/// <summary>
/// Indicates the "Bitmap embedding only" restriction.
/// </summary>
/// <remarks>
/// When this bit is set, only bitmaps contained in the font may be embedded. No outline data may be embedded.
/// If there are no bitmaps available in the font, then the font is considered unembeddable and the embedding
/// services will fail. Other embedding restrictions also apply.
/// </remarks>
public bool BitmapEmbeddingOnly { get; }
}
/// <summary>
/// Represents the font embedding usage permissions.
/// </summary>
public enum FontEmbeddingUsagePermissions
{
/// <summary>
/// The font may be embedded, and may be permanently installed for use on a remote systems, or for use by
/// other users.
/// </summary>
Installable,
/// <summary>
/// The font must not be modified, embedded or exchanged in any manner without first obtaining explicit
/// permission of the legal owner.
/// </summary>
RestrictedLicense,
/// <summary>
/// The font may be embedded, and may be temporarily loaded on other systems for purposes of viewing or
/// printing the document.
/// </summary>
/// <remarks>
/// Documents containing Preview & Print fonts must be opened “read-only”; no edits may
/// be applied to the document.
/// </remarks>
PrintAndPreview,
/// <summary>
/// The font may be embedded, and may be temporarily loaded on other systems.
/// </summary>
/// <remarks>
/// As with Preview & Print embedding, documents containing Editable fonts may be opened for reading.
/// In addition, editing is permitted, including ability to format new text using the embedded font, and
/// changes may be saved.
/// </remarks>
Editable
}
public class FontInfo
{
/// <summary>
/// Gets the embedded font licensing rights.
/// </summary>
/// <remarks>
/// <para>The value may be null if font is not embedded.</para>
/// </remarks>
public FontEmbeddingLicensingRights EmbeddingLicensingRights { get; }
}
public class PhysicalFontInfo
{
/// <summary>
/// Embedding licensing rights for the font.
/// </summary>
public FontEmbeddingLicensingRights EmbeddingLicensingRights { get; }
}
This use case explains how to use EmbeddingLicensingRights:
Added new public method Section.ClearHeadersFooters(preserveWatermarks)
Related issue: WORDSNET-26552
A new ClearHeadersFooters(bool preserveWatermarks) public method has been added to Section class:
/// <summary>
/// Clears the headers and footers of this section.
/// </summary>
/// <remarks>
/// <p>The text of all headers and footers is cleared, but <see cref="HeaderFooter"/> objects themselves are not removed.</p>
/// <p>This makes headers and footers of this section linked to headers and footers of the previous section.</p>
/// </remarks>
/// <param name="preserveWatermarks">True if the watermarks shall not be removed.</param>
public void ClearHeadersFooters(bool preserveWatermarks)
This use case explains how to clear Headers and Footers but preserve the Watermarks:
Added ReplaceBackslashWithYenSign backward compatibility options to HtmlSaveOptions and XamlFlowSaveOptions
Related issue: WORDSNET-26785
Added ReplaceBackslashWithYenSign property to HtmlSaveOptions and to XamlFlowSaveOptions. It designed for keep backward compatibility with previous versions of Aspose.Words and allows to replace a backslash character with Yen sign in generated HTML and XAML documents.
/// <summary>
/// Specifies whether backslash characters should be replaced with yen signs.
/// Default value is <c>false</c>.
/// </summary>
/// <remarks>
/// By default, Aspose.Words mimics MS Word's behavior and doesn't replace backslash characters with yen signs in
/// generated HTML documents. However, previous versions of Aspose.Words performed such replacements in certain
/// scenarios. This flag enables backward compatibility with previous versions of Aspose.Words.
/// </remarks>
public bool ReplaceBackslashWithYenSign { get; set; }
/// <summary>
/// Specifies whether backslash characters should be replaced with yen signs.
/// Default value is <c>false</c>.
/// </summary>
/// <remarks>
/// By default, Aspose.Words mimics MS Word's behavior and doesn't replace backslash characters with yen signs in
/// generated XAML documents. However, previous versions of Aspose.Words performed such replacements in certain
/// scenarios. This flag enables backward compatibility with previous versions of Aspose.Words.
/// </remarks>
public bool ReplaceBackslashWithYenSign { get; set; }
This use case explains how to replace a backslash character with Yen sign in generated HTML document:
This use case explains how to replace a backslash character with Yen sign in generated XAML document:
Added UseSdtTagAsFormFieldName property to PdfSaveOptions
Related issue: WORDSNET-27063
Added UseSdtTagAsFormFieldName property to PdfSaveOptions. It allows to use StructuredDocumentTag.Tag as a PDF form field name instead of StructuredDocumentTag.Id. Also now StructuredDocumentTag.Title field is exported as PDF form field user name.
/// <summary>
/// Specifies whether to use SDT control Tag or Id property as a name of form field in PDF.
/// </summary>
/// <remarks>
/// <p>The default value is <c>false</c>.</p>
/// <para>When set to <c>false</c>, SDT control Id property is used as a name of form field in PDF.</para>
/// <para>When set to <c>true</c>, SDT control Tag property is used as a name of form field in PDF.</para>
/// <para>If set to <c>true</c> and Tag is empty, Id property will be used as a form field name.</para>
/// <para>If set to <c>true</c> and Tag values are not unique, duplicate Tag values will be altered to build
/// unique PDF form field names.</para>
/// </remarks>
public bool UseSdtTagAsFormFieldName
{
get { return mUseSdtTagAsFormFieldName; }
set { mUseSdtTagAsFormFieldName = value; }
}
This use case explains how to use UseSdtTagAsFormFieldName property:
Introduced a new LowCode.Converter class, designed to provide a set of methods for converting various types of documents with a single line of code
Related issue: WORDSNET-24092
Introduced a new LowCode.Converter class, designed to provide a set of methods for converting various types of documents with a single line of code.
The class includes the following methods:
/// <summary>
/// Converts the given input document into the output document using specified input output file names and its extensions.
/// </summary>
/// <param name="inputFile">The input file name.</param>
/// <param name="outputFile">The output file name.</param>
public static void Convert(string inputFile, string outputFile)
/// <summary>
/// Converts the given input document into the output document using specified input output file names and the final document format.
/// </summary>
/// <param name="inputFile">The input file name.</param>
/// <param name="outputFile">The output file name.</param>
/// <param name="saveFormat">The save format.</param>
public static void Convert(string inputFile, string outputFile, SaveFormat saveFormat)
/// <summary>
/// Converts the given input document into the output document using specified input output file names and save options.
/// </summary>
/// <param name="inputFile">The input file name.</param>
/// <param name="outputFile">The output file name.</param>
/// <param name="saveOptions">The save options.</param>
public static void Convert(string inputFile, string outputFile, SaveOptions saveOptions)
/// <summary>
/// Converts the given input document into a single output document using specified input and output streams.
/// </summary>
/// <param name="inputStream">The input stream.</param>
/// <param name="outputStream">The output stream.</param>
/// <param name="saveFormat">The save format.</param>
public static void Convert(Stream inputStream, Stream outputStream, SaveFormat saveFormat)
/// <summary>
/// Converts the given input document into a single output document using specified input and output streams.
/// </summary>
/// <param name="inputStream">The input streams.</param>
/// <param name="outputStream">The output stream.</param>
/// <param name="saveOptions">The save options.</param>
public static void Convert(Stream inputStream, Stream outputStream, SaveOptions saveOptions)
/// <summary>
/// Converts the input file pages to images.
/// </summary>
/// <param name="inputFile">The input file name.</param>
/// <param name="outputFile">The output file name used to generate file name for page images using rule "outputFile_pageIndex.extension"</param>
public static void ConvertToImages(string inputFile, string outputFile)
/// <summary>
/// Converts the input file pages to images.
/// </summary>
/// <param name="inputFile">The input file name.</param>
/// <param name="outputFile">The output file name used to generate file name for page images using rule "outputFile_pageIndex.extension"</param>
/// <param name="saveFormat">Save format. Only image save formats are allowed.</param>
public static void ConvertToImages(string inputFile, string outputFile, SaveFormat saveFormat)
/// <summary>
/// Converts the input file pages to images.
/// </summary>
/// <param name="inputFile">The input file name.</param>
/// <param name="outputFile">The output file name used to generate file name for page images using rule "outputFile_pageIndex.extension"</param>
/// <param name="saveOptions">Image save options.</param>
public static void ConvertToImages(string inputFile, string outputFile, ImageSaveOptions saveOptions)
/// <summary>
/// Converts the input file pages to images.
/// </summary>
/// <param name="inputFile">The input file name.</param>
/// <param name="saveFormat">Save format. Only image save formats are allowed.</param>
/// <returns>Returns array of image streams. The streams should be disposed by the enduser.</returns>
public static Stream[] ConvertToImages(string inputFile, SaveFormat saveFormat)
/// <summary>
/// Converts the input file pages to images.
/// </summary>
/// <param name="inputFile">The input file name.</param>
/// <param name="saveOptions">Image save options.</param>
/// <returns>Returns array of image streams. The streams should be disposed by the enduser.</returns>
public static Stream[] ConvertToImages(string inputFile, ImageSaveOptions saveOptions)
/// <summary>
/// Converts the input stream pages to images.
/// </summary>
/// <param name="inputStream">The input stream.</param>
/// <param name="saveFormat">Save format. Only image save formats are allowed.</param>
/// <returns>Returns array of image streams. The streams should be disposed by the enduser.</returns>
public static Stream[] ConvertToImages(Stream inputStream, SaveFormat saveFormat)
/// <summary>
/// Converts the input stream pages to images.
/// </summary>
/// <param name="inputStream">The input stream.</param>
/// <param name="saveOptions">Image save options.</param>
/// <returns>Returns array of image streams. The streams should be disposed by the enduser.</returns>
public static Stream[] ConvertToImages(Stream inputStream, ImageSaveOptions saveOptions)
/// <summary>
/// Converts the document pages to images.
/// </summary>
/// <param name="doc">The input document.</param>
/// <param name="saveFormat">Save format. Only image save formats are allowed.</param>
/// <returns>Returns array of image streams. The streams should be disposed by the enduser.</returns>
public static Stream[] ConvertToImages(Document doc, SaveFormat saveFormat)
/// <summary>
/// Converts the document pages to images.
/// </summary>
/// <param name="doc">The input document.</param>
/// <param name="saveOptions">Image save options.</param>
/// <returns>Returns array of image streams. The streams should be disposed by the enduser.</returns>
public static Stream[] ConvertToImages(Document doc, ImageSaveOptions saveOptions)
This use case explains how to convert the given input document into the output document using specified input output file names, save format or save options:
The ConvertToImages group of methods are designed to transform documents into images, with each page being converted into a separate image file. These methods also convert PDF documents directly to fixed-page formats without loading them into the document model (using our pdf2word plugin), which enhances both performance and accuracy.
Using ImageSaveOptions.PageSet, you can specify a particular set of pages to convert into images.
Provided sign document option in XpsSaveOptions
Related issue: WORDSNET-27188
Added new public property to Aspose.Words.Saving.XpsSaveOptions class:
/// <summary>
/// Gets or sets <see cref="Aspose.Words.Saving.DigitalSignatureDetails"/> object used to sign a document.
/// </summary>
public DigitalSignatureDetails DigitalSignatureDetails { get; set; }
This use case explains how to specify signature options while saving XPS document:
Removed obsolete API from IStructuredDocumentTag
Related issue: WORDSNET-27169
The obsolete public methods IsRanged() and StructuredDocumentTagNode() have been removed from IStructuredDocumentTag interface and all its implementations.
Please note that the removed IsRanged() is equivalent to IsMultiSection property, and the removed StructuredDocumentTagNode() is equivalent to Node property. Please use these properties instead.