Browse our Products

Aspose.Words for Java 26.9 Release Notes

Major Features

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

  • Optional Dependencies: Make JOGL, GlueGen and FreeHEP dependencies optional.
  • .NET Core: Added Windows-specific builds for .NET Core 9 and .NET Core 10.
  • Document Comparison: Added the ability to control whether list definition content is included when comparing documents.
  • Digital Signature: Added support for timestamping in the DigitalSignatureUtil.Sign method.
  • Export PDF: Improved PDF layout tagging by placing footnote and endnote tags according to accessibility best practices.

Full List of Issues Covering all Changes in this Release

Expand to view the full list of issues, reported by Java Users.
KeySummaryCategory
WORDSJAVA-3422Add HarfBuzz support for Apple Silicon (arm64)New Feature
WORDSJAVA-3420Make JOGL and GlueGen dependencies optionalNew Feature
WORDSJAVA-3421Aspose.Words 26.8 version pulls test dependenciesBug
WORDSJAVA-3406NullPointerException upon rendering document to EMF on LinuxBug
WORDSJAVA-3348HarfBuzz Legacy for Alpine LinuxBug
Expand to view the full list of issues, reported by .NET Users.
KeySummaryCategory
WORDSNET-29341Provide Windows specific builds for .Net Core 9 and  .Net Core 10New Feature
WORDSNET-28665Improve handling column bookmarks upon manipulating the tableNew Feature
WORDSNET-29514ExtractPages applies incorrect numbering paragraph properties after page breakBug
WORDSNET-29490DOCX to PDF inccorect headers and footer numbersBug
WORDSNET-29486Compare method throws NullReferenceExceptionBug
WORDSNET-29481Color of SVG image is changed when HTML is insertedBug
WORDSNET-29480InvalidCastException is thrown upon building document layoutBug
WORDSNET-29477InvalidOperationException is thrown upon saving document as DOCXBug
WORDSNET-29469Paragraph with deleted paragraph mark is numbered separatelyBug
WORDSNET-29467Font.AllCaps incorrectly uppercases mu symbol during conversion to PDFBug
WORDSNET-29462Rich text content controls are lost after document comparisonBug
WORDSNET-29461Comparing identical documents creates style revisionsBug
WORDSNET-29460Formatting is not restored for VML shape from o:gfxdata attribute’s valueBug
WORDSNET-29459AW and MS Word handle conditional HTML comments differentlyBug
WORDSNET-29439Extra shape appears when rendering SVG with empty clipPathBug
WORDSNET-29430Long document conversion with a large number of nested fieldsBug
WORDSNET-29415NullReferenceException on conversion document with a waterfall chart to PDFBug
WORDSNET-29413UpdatePageLayout call runs indefinitelyBug
WORDSNET-29404Copying ChartDataLabels.Format.Fill properties causes black rectangles in chart labels during PDF renderingBug
WORDSNET-29387MathML import: visual discrepancies vs MSWBug
WORDSNET-29372XmlException occurs upon trying to save signed and encrypted ODTBug
WORDSNET-29324Grey rectangle overlaps image after renderingBug
WORDSNET-29316Line wrapping is incorrect after renderingBug
WORDSNET-29305Pdf2Word. Some tests fail in .NET Framework 4.6.1 buildBug
WORDSNET-29300Comparing a document with itself creates revisionsBug
WORDSNET-29285ExtractPages does not split pages correctlyBug
WORDSNET-29275Additional Font Color Formatting Added After XML Mapping with Track Changes EnabledBug
WORDSNET-29269Lz4 file is wrongly detected as PDFBug
WORDSNET-29208Tab stop position is incorrect after renderingBug
WORDSNET-29188The right offset is incorrect due to the horizontal label widthBug
WORDSNET-29006Footnote position in logical structure is unexpectedBug
WORDSNET-28885EQ field is rendered improperlyBug
WORDSNET-27632Tab position is incorrect after renderingBug
WORDSNET-25897Consider adding TimeStamping option in DigitalSignatureUtil.Sign methodBug
WORDSNET-25685Tab position is incorrect after rendering the documentBug
WORDSNET-25097Incorrect calculation of the width of the formulaBug
WORDSNET-23724Document with different list types shows no difference after comparingBug
WORDSNET-22011DOC to PDF, text pushed to the sideBug
WORDSNET-19473Incorrect wrapping of tabbed text causes one extra page in PDFBug
WORDSNET-18526Chart to image - poor quality and broken imagesBug
WORDSNET-17795Incorrect Tab indentation in PDFBug
WORDSNET-29437Text shifted on conversion to PDFBug

Public API and Backward Incompatible Changes

This section lists public API changes that were introduced in Aspose.Words 26.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.

Make JOGL, GlueGen and FreeHEP dependencies optional

Related issue WORDSJAVA-3420 and WORDSJAVA-3421.

Two dependencies in aspose-words.pom are now marked as <optional>true</optional>:

  • Without JOGL/FreeHEP: Core document processing (DOCX, PDF, HTML, PNG, JPEG, WebP, TIFF) works unchanged.
  • FreeHEP: Only needed when saving to EMF and useGdiEmfRenderer(true) is set. Without FreeHEP, EMF export falls back to the EMF+ renderer. A warning is printed if the library is missing.
  • JOGL + GlueGen: Required for Dml3DEffectsRenderingMode.ADVANCED (hardware-accelerated 3D shape rendering). Without dependencies it throws error and printed that library is missing.

Add optional dependencies only if needed:

<!-- For ADVANCED 3D shape rendering -->
<dependency>
    <groupId>org.jogamp.jogl</groupId>
    <artifactId>jogl-all-main</artifactId>
    <version>2.3.2</version>
</dependency>
<dependency>
    <groupId>org.jogamp.gluegen</groupId>
    <artifactId>gluegen-rt-main</artifactId>
    <version>2.3.2</version>
</dependency>

<!-- For EMF export with useGdiEmfRenderer=true -->
<dependency>
    <groupId>org.freehep</groupId>
    <artifactId>freehep-graphicsio-emf</artifactId>
    <version>2.4</version>
</dependency>

Added CompareListDefinitions options to AdvancedCompareOptions class

Related issue WORDSNET-23724.

New public property has been added to AdvancedCompareOptions class.

The property allows customer to control whether list definition content will be compared during document comparison.

Default value is false to follow MS Word behavior.

Option has no equivalent in MS Word.

/// <summary>
/// Specifies whether list definition contents are compared instead of list definition Ids.
/// </summary>
/// <remarks>
/// Default value is <c>false</c>.
/// </remarks>
public bool CompareListDefinitions { get; set; }

This use case explains how to control whether list definition content is included when comparing documents:

Added TimeStamping option in DigitalSignatureUtil.Sign method

Related issue: WORDSNET-25897

The new public property has been added into Aspose.Words.DigitalSignatures.SignOptions class:

/// <summary>
/// Specifies settings for timestamping the digital signature using an RFC 3161 timestamp authority (TSA).
/// The default value is <c>null</c> and the digital signature will not be time-stamped.
/// </summary>
/// <remarks>
/// When this property is set to a valid <see cref="DigitalSignatureTimestampSettings"/> object,
/// and <see cref="XmlDsigLevel"/> is set to <see cref="DigitalSignatures.XmlDsigLevel.XAdEsT"/> or higher,
/// the digital signature will be time-stamped.
/// </remarks>
public DigitalSignatureTimestampSettings TimestampSettings { get; set; }

and the new enumeration into Aspose.Words.DigitalSignatures.XmlDsigLevel:

/// <summary>
/// Specifies XAdES-T signature level.
/// </summary>
/// <remarks>
/// Adds an RFC 3161 timestamp of the signature value to the XAdES-EPES signature, obtained from a
/// trusted timestamp authority (TSA). This proves the signature existed at a specific point in time,
/// independent of the signing certificate's validity period.
/// </remarks>
XAdEsT = 2

Also, added a new public class into Aspose.Words.DigitalSignatures namespace:

/// <summary>
/// Contains settings of the digital signature timestamp.
/// </summary>
public class DigitalSignatureTimestampSettings

/// <summary>
/// Initializes a new instance of <see cref="DigitalSignatureTimestampSettings"/> class.
/// </summary>
/// <param name="serverUrl">Timestamp server URL.</param>
/// <param name="userName">Timestamp server user name.</param>
/// <param name="password">Timestamp server password.</param>
public DigitalSignatureTimestampSettings(string serverUrl, string userName, string password)

/// <summary>
/// Initializes a new instance of <see cref="DigitalSignatureTimestampSettings"/> class.
/// </summary>
/// <param name="serverUrl">Timestamp server URL.</param>
/// <param name="userName">Timestamp server user name.</param>
/// <param name="password">Timestamp server password.</param>
/// <param name="timeout">Time-out value for accessing timestamp server.</param>
public DigitalSignatureTimestampSettings(string serverUrl, string userName, string password, TimeSpan timeout)

/// <summary>
/// Gets or sets a string value representing timestamp server URL.
/// The default value is <c>null</c>.
/// </summary>
/// <remarks>
/// If <c>null</c>, then the digital signature will not be time-stamped.
/// </remarks>
public string ServerUrl { get; set; }

/// <summary>
/// Gets or sets a string value representing timestamp server user name.
/// The default value is <c>null</c>.
/// </summary>
public string UserName { get; set; }

/// <summary>
/// Gets or sets a string value representing timestamp server password.
/// The default value is <c>null</c>.
/// </summary>
public string Password { get; set; }

/// <summary>
/// Gets or sets a time-out value for accessing timestamp server.
/// The default value is 100 seconds.
/// </summary>
public TimeSpan Timeout { get; set; }

This use case explains how to use TameStamping option: