Browse our Products

Aspose.HTML for .NET 25.8 Release Notes

As per the regular monthly update process of all APIs being offered by Aspose, we are honored to announce the August release of Aspose.HTML for .NET.

Release Notes

This release delivers significant performance enhancements and rendering improvements, focusing on memory optimization and CSS compliance.

Performance Optimizations:

  • Memory Efficiency: We have significantly optimized memory usage for operations involving pseudo-element style processing and general HTML element rendering. This reduces the overall memory footprint of the application.
  • Document Loading: Memory consumption when opening and loading HTML documents has been reduced.
  • Network Operations: The processing of network requests and the handling of StreamContent have been optimized for better efficiency and reliability.

Rendering Improvements:

  • CSS & Images: Fixed an issue with the correct application of the object-fit CSS property for images during rendering.
  • SVG Text: Improved the fidelity of text rendering with shadow effects within SVG images.
  • Tables: Addressed rendering artifacts to ensure correct layout and pagination of HTML tables.
  • Layout Stability: Enhancements have been made to the handling of Flexbox (Flex) elements, increasing the overall stability and predictability of CSS style processing.

Package references
Aspose.HTML for .NET 25.8.0 NuGet
Aspose.HTML.Drawing for .NET 25.8.0 NuGet
Aspose.HTML for Python via .NET 25.8.0 PyPI

Improvements and Changes

KeySummaryCategory
HTMLNET-6327Regression: HTML to PDF: OutOfMemory exception occursBug
HTMLNET-6272NullReferenceException when converting HTML to PDFBug
HTMLNET-6491Aspose.Html.Converter.ConvertHTML, runaway memory leakBug
HTMLNET-6339HTML to PDF: Duplicated data in output fileBug
HTMLNET-6513The conversion distorts the original layout.Bug
HTMLNET-6572HTML-to-PNG and PDF conversion error due to JavaScript execution failure.Task
HTMLNET-6204Mht to pdf - exception is thrown - System.InvalidOperationException - The sequence contains no elements.Bug

Public API and Backward Incompatible Changes

Added APIs

namespace Aspose.Html.Dom.Svg.Saving
{
    /// <summary>
    /// Specifies format in which document is saved.
    /// </summary>
    public enum SVGSaveFormat
    {
        /// <summary>
        /// Document will be saved as SVGZ.
        /// </summary>
        SVGZ
    }

    /// <summary>
    /// Represents SVGZ save options.
    /// </summary>
    public class SVGZSaveOptions : SaveOptions
    {
        /// <summary>
        /// Gets or sets whether text elements are replaced with paths.
        /// </summary>
        public bool VectorizeText { get; set; }
    }
}

namespace Aspose.Html.Dom.Svg
{
    /// <summary>
    /// An <c>SVGDocument</c> is the root of the SVG hierarchy and holds the entire content. Besides providing access to the hierarchy, it also provides some convenience methods for accessing certain sets of information from the document.
    /// In addition to loading standard .svg files, both the constructors and the <see cref="Document.Navigate"/> method can load gzip-compressed .svgz files.
    /// When an ‘svg’ element is embedded inline as a component of a document from another namespace, such as when an ‘svg’ element is embedded inline within an XHTML document [XHTML], then an SVGDocument object will not exist; instead, the root object in the document object hierarchy will be a Document object of a different type, such as an HTMLDocument object.
    /// However, an SVGDocument object will indeed exist when the root element of the XML document hierarchy is an ‘svg’ element, such as when viewing a stand-alone SVG file(i.e., a file with MIME type "image/svg+xml"). In this case, the SVGDocument object will be the root object of the document object model hierarchy.
    /// </summary>
    /// <seealso cref="Dom.Document" />
    /// <seealso cref="Dom.Events.IDocumentEvent" />
    public class SVGDocument : Document, IDocumentEvent, IDocumentCSS
    {
        /// <summary>
        /// Saves the document content and associated resources using the specified <see cref="ResourceHandler"/>.
        /// </summary>
        /// <param name="resourceHandler">The resource handler to manage document resources, such as file system or memory-based storage.</param>
        /// <param name="saveOptions">Options that specify additional saving parameters, such as vectorization preferences.</param>
        public void Save(ResourceHandler resourceHandler, SVGZSaveOptions saveOptions)
        {
        }
    
        /// <summary>
        /// Saves the document as a compressed <c>.svgz</c> file to <paramref name="url"/>.
        /// All external resources are placed in a sibling folder named
        /// <c>{output_file_name}_files</c>.
        /// </summary>
        /// <param name="url">Local path of the target <c>.svgz</c> file.</param>
        /// <param name="saveOptions">Options that control SVGZ serialization.</param>
        /// <exception cref="ArgumentException">
        /// Thrown if <paramref name="url"/> is not a valid local file path.
        /// </exception>
        public void Save(Url url, SVGZSaveOptions saveOptions)
        {
        }
        
        /// <summary>
        /// Saves the document as a compressed <c>.svgz</c> file to the local path specified by
        /// <paramref name="path"/>.
        /// Any external resources are written to a sibling folder named
        /// <c>{output_file_name}_files</c>.
        /// </summary>
        /// <param name="path">
        /// Absolute or relative path of the target <c>.svgz</c> file.
        /// </param>
        /// <param name="saveOptions">
        /// Options that control SVGZ serialization.
        /// </param>
        /// <exception cref="ArgumentException">
        /// Thrown if <paramref name="path"/> is not a valid local file path.
        /// </exception>
        public void Save(string path, SVGZSaveOptions saveOptions)
        {
        }
    }
}

namespace Aspose.Html.Net
{
    /// <summary>
    /// Represents a base class for an HTTP entity body and content headers.
    /// </summary>
    public abstract class Content : IDisposable
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="Content"/> class.
        /// </summary>
        /// <param name="content">The content as byte array.</param>
        /// <exception cref="ArgumentNullException">Content is null.</exception>
        protected Content(byte[] content)
        {
        }
    }
}