GroupDocs.Viewer for .NET 20.10 Release Notes

Major Features

There are 31 features, improvements, and bug-fixes in this release, most notable are:

Full List of Issues Covering all Changes in this Release

KeySummaryCategory
VIEWERNET-2422Add logging supportFeature
VIEWERNET-2605Add Compressed Windows Metafile (.wmz) file-format supportFeature
VIEWERNET-2606Add Windows Compressed Enhanced Metafile (.emz) file-format supportFeature
VIEWERNET-2747More descriptive exception when opening encrypted XLSM filesFeature
VIEWERNET-2749Add Corel Metafile exchange (.cmx) file-format supportFeature
VIEWERNET-2759Add Corel Draw (.cdr) file-format supportFeature
VIEWERNET-2760Add RAR5 archive extraction supportFeature
VIEWERNET-2769Support rendering presentations with shapes and text with 3D effectsFeature
VIEWERNET-1080Incorrect print preview and print of output HTML in ChromeBug
VIEWERNET-2426Problem with summary when rendering a PDF to HTMLBug
VIEWERNET-2477Exception is thrown when loading XLSB fileBug
VIEWERNET-2488Exception is thrown when rendering DNG fileBug
VIEWERNET-2489"Image export failed” exception when rendering TIFF file”Bug
VIEWERNET-2495"A generic error occurred in GDI+” exception occurs when rendering VSDX file”Bug
VIEWERNET-2550"A generic error occurred in GDI+” exception occurs when rendering MPP file”Bug
VIEWERNET-2603XLSX to HTML rendering missing some fieldsBug
VIEWERNET-2609Can’t get document info for JPFBug
VIEWERNET-2660Out of memory exception thrown Linux when rendering MPP to PNGBug
VIEWERNET-2661"A generic error occurred in GDI+” exception occurs when rendering VSDX file to PNG in Linux”Bug
VIEWERNET-2751You can not change part of an array or table formula.Bug
VIEWERNET-2765Out of memory when opening VSDXBug
VIEWERNET-2771Could not load file. File is corrupted or damaged.Bug
VIEWERNET-2772'Object reference not set to an instance of an object.’ when saving VSS shapes for specific fileBug
VIEWERNET-2777Image saving failed exception when saving SVGBug
VIEWERNET-2779PLT file is failed to openBug
VIEWERNET-2780Empty XLSX cells not rendered when converting to PNGBug
VIEWERNET-2781An exception should be not thrown when the font doesn’t existBug
VIEWERNET-2783You can not change part of an array or table formula.Bug
VIEWERNET-2784Object reference not set to an instance of an object.Bug
VIEWERNET-2787The column index should not be inside the pivottable reportBug
VIEWERNET-2792ViewOptions ignored for Cells fileBug

Public API and Backward Incompatible Changes

Changes in the public API

GroupDocs.Viewer.FileType

Fields were added to GroupDocs.Viewer.FileType class that reflects new file formats that we’re supporting starting from v20.10.

/// <summary>
/// Corel Exchange (.cmx) is a drawing image file that may contain vector graphics as well as bitmap graphics.
/// Learn more about this file format <a href="https://wiki.fileformat.com/image/cmx">here</a>.
/// </summary>
public static readonly FileType CMX = new FileType("Corel Metafile exchange", ".cmx");

/// <summary>
/// Enhanced Windows Metafile compressed (.emz) represents graphical images device-independently compressed by GZIP. Metafiles of EMF comprises of variable-length records in chronological order that can render the stored image after parsing on any output device.
/// Learn more about this file format <a href="https://wiki.fileformat.com/image/emz">here</a>.
/// </summary>

public static readonly FileType EMZ = new FileType("Windows Compressed Enhanced Metafile", ".emz");

/// <summary>
/// Compressed Windows Metafile (.wmz) represents Microsoft Windows Metafile (WMF) compressed in GZIP archvive - for storing vector as well as bitmap-format images data.
/// Learn more about this file format <a href="https://fileinfo.com/extension/wmz#compressed_windows_metafile">here</a>.
/// </summary>
public static readonly FileType WMZ = new FileType("Compressed Windows Metafile", ".wmz");

GroupDocs.Viewer.Logging

public class ConsoleLogger class added to GroupDocs.Viewer.Logging. This class provides support for logging GroupDocs.Viewer conversion process to console.

/// <summary>
/// Writes log messages to the console.
/// </summary>
public class ConsoleLogger : ILogger
{
    /// <summary>
    /// Writes a trace message to the console.
    /// Trace log messages provide generally useful information about application flow.
    /// </summary>
    /// <param name="message">The trace message.</param>
    /// <exception cref="System.ArgumentNullException">Thrown when <paramref name="message"/> is null.</exception>
    public void Trace(string message);

    /// <summary>
    /// Writes a warning message to the console.
    /// Warning log messages provide information about unexpected and recoverable events in application flow.
    /// </summary>
    /// <param name="message">The warning message.</param>
    /// <exception cref="System.ArgumentNullException">Thrown when <paramref name="message"/> is null.</exception>
    public void Warning(string message);


    /// <summary>
    /// Writes an error message to the console.
    /// Error log messages provide information about unrecoverable events in application flow.
    /// </summary>
    /// <param name="message">The error message.</param>
    /// <param name="exception">The exception.</param>
    /// <exception cref="System.ArgumentNullException">Thrown when <paramref name="message"/> is null.</exception>
    /// <exception cref="System.ArgumentNullException">Thrown when <paramref name="exception"/> is null.</exception>
    public void Error(string message, Exception exception);

}


public class FileLogger class added to GroupDocs.Viewer.Logging. This class provides support for logging GroupDocs.Viewer conversion process to file.

/// <summary>
/// Writes log messages to the file.
/// </summary>
public class FileLogger : ILogger
{
    /// <summary>
    /// Create logger to file.
    /// </summary>
    /// <param name="fileName">Full file name with path</param>
    public FileLogger(string fileName);

    /// <summary>
    /// Writes a trace message to the console.
    /// Trace log messages provide generally useful information about application flow.
    /// </summary>
    /// <param name="message">The trace message.</param>
    /// <exception cref="System.ArgumentNullException">Thrown when <paramref name="message"/> is null.</exception>
    public void Trace(string message);

    /// <summary>
    /// Writes a warning message to the console.
    /// Warning log messages provide information about unexpected and recoverable events in application flow.
    /// </summary>
    /// <param name="message">The warning message.</param>
    /// <exception cref="System.ArgumentNullException">Thrown when <paramref name="message"/> is null.</exception>
    public void Warning(string message);

    /// <summary>
    /// Writes an error message to the console.
    /// Error log messages provide information about unrecoverable events in application flow.
    /// </summary>
    /// <param name="message">The error message.</param>
    /// <param name="exception">The exception.</param>
    /// <exception cref="System.ArgumentNullException">Thrown when <paramref name="message"/> is null.</exception>
    /// <exception cref="System.ArgumentNullException">Thrown when <paramref name="exception"/> is null.</exception>
    public void Error(string message, Exception exception);
}


public interface ILogger class added to GroupDocs.Viewer.Logging. This interface provides support for custom logger implementation.

    /// <summary>
    /// Defines the methods that are used to perform logging.
    /// </summary>
    public interface ILogger
    {
        /// <summary>
        /// Writes a trace message.
        /// Trace log messages provide generally useful information about application flow.
        /// </summary>
        /// <param name="message">The trace message.</param>
        /// <exception cref="System.ArgumentNullException">Thrown when <paramref name="message"/> is null.</exception>
        void Trace(string message);

        /// <summary>
        /// Writes a warning message.
        /// Warning log messages provide information about unexpected and recoverable events in application flow.
        /// </summary>
        /// <param name="message">The warning message.</param>
        /// <exception cref="System.ArgumentNullException">Thrown when <paramref name="message"/> is null.</exception>
        void Warning(string message);

        /// <summary>
        /// Writes an error message.
        /// Error log messages provide information about unrecoverable events in application flow.
        /// </summary>
        /// <param name="message">The error message.</param>
        /// <param name="exception">The exception.</param>
        /// <exception cref="System.ArgumentNullException">Thrown when <paramref name="message"/> is null.</exception>
        /// <exception cref="System.ArgumentNullException">Thrown when <paramref name="exception"/> is null.</exception>
        void Error(string message, Exception exception);
    }

GroupDocs.Viewer

New property and constructor added to ViewerSettings class.

/// <summary>
/// The logger implementation used for logging (Errors, Warnings, Traces).
/// </summary>
public ILogger Logger { get; }

/// <summary>
/// Initializes new instance of <see cref="ViewerSettings"/> class.
/// </summary>
/// <param name="cache">The cache.</param>
/// <param name="logger">The logger.</param>
/// <exception cref="System.ArgumentNullException">Thrown when <paramref name="cache"/> is null.</exception>
public ViewerSettings(ICache cache, ILogger logger)