Browse our Products

Aspose.Words for C++ 23.12 Release Notes

Major Features

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

  • Added an ability to specify the page layout to be used when the document is opened in a PDF reader.
  • Implemented the way to control how ZIP64 format extensions will be used for OOXML documents.
  • Introduced support for WebP images. Please note, this feature is available for .NetStandart and .NET6+ versions only.
  • Added the dollarText number format for LINQ Reporting Engine.

Full List of Issues Covering all Changes in this Release

Public API and Backward Incompatible Changes

This section lists public API changes that were introduced in Aspose.Words 23.12. 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 a public property and enumeration to set the initial view page layout that will be used when opening a document in a PDF reader

New public PageLayout property has been added to the PdfSaveOptions class:

    class ASPOSE_WORDS_SHARED_CLASS PdfSaveOptions : public Aspose::Words::Saving::FixedPageSaveOptions
    {
        ...
    
        /// <summary>
        /// Specifies the page layout to be used when the document is opened in a PDF reader.
        /// </summary>
        /// <remarks>
        /// The default value is PdfPageLayout.SinglePage/>.
        /// </remarks>
        ASPOSE_WORDS_SHARED_API Aspose::Words::Saving::PdfPageLayout get_PageLayout() const;
        ASPOSE_WORDS_SHARED_API void set_PageLayout(Aspose::Words::Saving::PdfPageLayout value);
    }

New public PdfPageLayout enumeration has been introduced:

    /// <summary>
    /// Specifies the page layout to be used when the document is opened in a PDF reader.
    /// </summary>
    enum class ASPOSE_WORDS_SHARED_CLASS PdfPageLayout
    {
        /// <summary>
        /// Display one page at a time.
        /// </summary>
        SinglePage,
    
        /// <summary>
        /// Display the pages in one column.
        /// </summary>
        OneColumn,
    
        /// <summary>
        /// Display the pages in two columns, with odd-numbered pages on the left.
        /// </summary>
        TwoColumnLeft,
    
        /// <summary>
        /// Display the pages in two columns, with odd-numbered pages on the right.
        /// </summary>
        TwoColumnRight,
    
        /// <summary>
        /// Display the pages two at a time, with odd-numbered pages on the left.
        /// </summary>
        TwoPageLeft,
    
        /// <summary>
        /// Display the pages two at a time, with odd-numbered pages on the right.
        /// </summary>
        TwoPageRight
    }

Added LowCode.Merger.Merge method overload with array of Document objects as an input

A new public method Merge(Document[], MergeFormatMode) has been added to class LowCode.Merger:

    /// <summary>
    /// Merges the given input documents into a single document and returns <see cref="Document"/> instance of the final document.
    /// </summary>
    /// <param name="inputDocuments">The input documents.</param>
    /// <param name="mergeFormatMode">Specifies how to merge formatting that clashes.</param>
    static ASPOSE_WORDS_SHARED_API System::SharedPtr<Aspose::Words::Document> Merge(const System::ArrayPtr<System::SharedPtr<Aspose::Words::Document>>& inputDocuments, Aspose::Words::LowCode::MergeFormatMode mergeFormatMode);

Added public property OoxmlSaveOptions.Zip64Mode and enum type Zip64Mode

New public Zip64Mode property has been added to the OoxmlSaveOptions class:

    class ASPOSE_WORDS_SHARED_CLASS OoxmlSaveOptions : public Aspose::Words::Saving::SaveOptions
    {
        ...
        
        /// <summary>
        /// Specifies whether or not to use ZIP64 format extensions for the output document.
        /// The default value is <see cref="Saving.Zip64Mode.Never"/>.
        /// </summary>
        /// <seealso cref="Zip64Mode"/>
        ASPOSE_WORDS_SHARED_API Aspose::Words::Saving::Zip64Mode get_Zip64Mode() const;
        ASPOSE_WORDS_SHARED_API void set_Zip64Mode(Aspose::Words::Saving::Zip64Mode value);
    }

New public Zip64Mode enumeration has been introduced:

    /// <summary>
    /// Specifies when to use ZIP64 format extensions for OOXML files.
    /// </summary>
    /// <remarks>
    /// OOXML file is a ZIP-archive that has a 4 GB (2^32 bytes) limit on uncompressed size of a file,
    /// compressed size of a file, and total size of the archive, as well as a limit of 65,535 (2^16-1) files in archive.
    /// ZIP64 format extensions increase the limits to 2^64.
    /// </remarks>
    /// <seealso cref="OoxmlSaveOptions.Zip64Mode"/>
    enum class ASPOSE_WORDS_SHARED_CLASS Zip64Mode
    {
        /// <summary>
        /// Do not use ZIP64 format extensions.
        /// </summary>
        Never = 0,
    
        /// <summary>
        /// If necessary use ZIP64 format extensions.
        /// </summary>
        IfNecessary = 1,
    
        /// <summary>
        /// Always use ZIP64 format extensions.
        /// </summary>
        Always = 2
    }

Introduced support for WebP images.

Added support for reading WebP image format. Added the ability to both read WebP images from documents and insert them via DocumentBuilder.

Slight changes in IStructuredDocumentTag public interface

The new public methods RemoveSelfOnly and GetChildNodes have been added to IStructuredDocumentTag interface:

    /// <summary>
    /// Removes just this SDT node itself, but keeps the content of it inside the document tree.
    /// </summary>
    virtual void RemoveSelfOnly() = 0;
    
    /// <summary>
    /// Returns a live collection of child nodes that match the specified types.
    /// </summary>
    virtual System::SharedPtr<Aspose::Words::NodeCollection> GetChildNodes(Aspose::Words::NodeType nodeType, bool isDeep) = 0;

IsRanged and StructuredDocumentTagNode methods have been converted to IsMultiSection and Node properties.

    /// <summary>
    /// Returns true if this instance is a ranged (multi-section) structured document tag.
    /// </summary>
    ASPOSE_WORDS_SHARED_API bool get_IsMultiSection() override;
    
    /// <summary>
    /// Returns Node object that implements this interface.
    /// </summary>
    ASPOSE_WORDS_SHARED_API System::SharedPtr<Aspose::Words::Node> get_Node() override;

Limitations and API Differences

Aspose.Words for C++ has some differences as compared to its equivalent .NET version of the API. This section contains information about all such functionality that is not available in the current release. The missing features will be added in future releases.

  • The current release does not support LINQ and Reporting features.
  • The current release does not support OpenGL 3D Shapes rendering.
  • The current release does not support loading PDF documents.
  • The current release has limited support for database features - C++ doesn’t have common API for DB like .NET System.Data.