Aspose.Words for C++ 20.9 Release Notes
Major Features
Starting from this release, we are beginning to publish the Linux version of Aspose.Words for C++. The minimum required version of compilers are the following:
- GCC 6.3 or higher
- Clang 3.9.1 or higher
Right now, we support only the x86_x64 platform, but we can add other architectures to the next releases on request.
It is the first version for Linux, so there may be artifacts and differences in behavior from both the Windows version of Aspose.Words for C++ and Aspose.Words for .NET. We continue to work on improving the product and adding features from .NET
We have added the following features from Aspose.Words for .NET on this regular monthly release:
- VbaReferenceCollection and related types are exposed publicly.
- Implemented rendering of metafiles with EMF+ containers.
- The FormField font formatting API was extended.
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 the Metered license.
- 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 advanced typography based on the HarfBuzz shaper.
- The current release does not support loading PDF documents.
- The current release has limited support for database features - C++ does not have a common API for DB like .NET System.Data.
- The current release supports Microsoft Visual C++ version 2017 or higher and only for the x64 platform.
- The current release supports GCC 6.3 or higher and Clang 3.9.1 or higher on Linux and only for the x86_x64 platform.
Full List of Issues Covering all Changes in this Release
Key | Summary | Category |
---|---|---|
WORDSCPP-865 | Add support for Linux | New Feature |
WORDSNET-522 | Allow applying font formatting to FormField as a whole | New Feature |
WORDSNET-20289 | Passing correct border parameters through Words-HTML-Words roundtrip | New Feature |
WORDSNET-13678 | Provide way to remove template reference from a Word document | New Feature |
WORDSNET-20986 | ‘Keep with next’ property is changed after RTF to DOCX conversion | Enhancement |
WORDSNET-20868 | UnsupportedFileFormatException while loading RTF | Enhancement |
WORDSCPP-995 | Aspose.Words for C++ causes STACK OVERFLOW | Bug |
WORDSCPP-996 | Unable to reference Aspose.Words for C++ in Visual Studio | Bug |
WORDSNET-14910 | Nesting a Continuous Section Break in a content control tag breaks Aspose?s tree traversal | Bug |
WORDSNET-20585 | Infinite loop with a table in a footnote | Bug |
WORDSNET-20996 | OutOfMemoryException when SaveAs document with charts as PNG | Bug |
WORDSNET-9660 | Add tests for different row height rule/vertically merged cell combinations | Bug |
WORDSNET-20399 | Image is lost after DOCX to PDF conversion | Bug |
WORDSNET-20356 | Convert DOC to PDF - Bullets getting renumbered | Bug |
WORDSNET-21014 | Position of rotated shapes with a relative size is incorrect | Bug |
WORDSNET-14444 | Shape flip is missing after re-saving document | Bug |
WORDSNET-20489 | Incorrect text flow for a paragraph wrapped around a floater | Bug |
WORDSNET-21019 | Incorrect width of cells after import from RTF | Bug |
WORDSNET-20496 | Some text in ‘TestJira13969’ aligned incorrectly | Bug |
WORDSNET-20601 | Incorrect text wrapping for a line started with a sequence of spaces in compatibility mode | Bug |
WORDSNET-17533 | Incorrect vertical position of the text in the cell | Bug |
WORDSNET-18261 | DOCX to PDF conversion issue with table rendering | Bug |
WORDSNET-5808 | Header format is lost after conversion | Bug |
WORDSNET-17815 | Some Arabic characters are improperly rendered to another font | Bug |
WORDSNET-11384 | Vertically merged cell contents is not broken correctly when the cell is broken in 2013 mode | Bug |
WORDSNET-14369 | Relations between linked textbox are broken after re-saving document | Bug |
WORDSNET-19094 | DOCX to EPUB convertion -> NCX-identifier does not match OPF identifier | Bug |
WORDSNET-20258 | DOC to HTML throws System.InvalidOperationException | Bug |
WORDSNET-20370 | Extra spaces are created after links when ODT is re-saved | Bug |
WORDSNET-20727 | Text order changed when converting word to PDF using 20.6 | Bug |
WORDSNET-20744 | Chart data labels are lost after DOCX to PDF conversion | Bug |
WORDSNET-20327 | DOCX to HTML - Single Table represented by 11 Tables in HTML | Bug |
WORDSNET-20530 | Text and footnotes pushed to the next page - convert to PDF | Bug |
WORDSNET-20823 | Insert and Delete Revisions appear against Image when Comparing similar Documents | Bug |
WORDSNET-20771 | Numbers are reversed after DOCX to PDF conversion | Bug |
WORDSNET-19889 | System.InvalidOperationException is thrown while saving HTML to DOCX | Bug |
WORDSNET-20085 | HTML to DOCX throw exception | Bug |
WORDSNET-20839 | FileCorruptedException occurs upon loading a DOCX - Unexpected ST_TrueFalse value | Bug |
WORDSNET-20840 | Extra space created during Load and Save a DOC | Bug |
WORDSNET-19942 | Conversion from RTF cutting off-page and losing data | Bug |
WORDSNET-20845 | The document appears to be corrupted and cannot be loaded | Bug |
WORDSNET-20662 | Incorrect breaking of a vertically merged cell when first cell content does not fit | Bug |
WORDSNET-20847 | NullReferenceException when saving a document page as HTML | Bug |
WORDSNET-20848 | System.ArgumentException when import node from another document | Bug |
WORDSNET-20850 | System.ArgumentNullException throws when converting attached ODT document to TXT | Bug |
WORDSNET-20579 | Incorrect numbering during Word to PDF conversion | Bug |
WORDSNET-20804 | Footer text lost during open/save a DOCX | Bug |
WORDSNET-20630 | Textbox’s text does not move to next linked Textbox | Bug |
WORDSNET-20862 | Text position changed after DOCX to PDF conversion | Bug |
WORDSNET-20867 | System.InvalidCastException while loading RTF files | Bug |
WORDSNET-20872 | Incorret rendering of the legend items | Bug |
WORDSNET-20873 | Incorrect rendering of the data label markers | Bug |
WORDSNET-20869 | Embedded Excel have dif. bits after extraction | Bug |
WORDSNET-20674 | PDF Conversion causes double spacing in header and footer | Bug |
WORDSNET-20481 | Vertical Chinese Text in Table Cell Lost during Rendering | Bug |
WORDSNET-20883 | System.InvalidOperationException occurs upon DOC to RTF conversion | Bug |
WORDSNET-20810 | Condition with removeif tag failed with Aspose.Words 20.7 | Bug |
WORDSNET-20887 | DOCX to PDF conversion issue with David font rendering | Bug |
WORDSNET-20602 | Content Controls Lost during loading and saving a DOCX | Bug |
WORDSNET-20914 | Aspose.Words.FileCorruptedException occurs upon HTML to PDF Conversion | Bug |
WORDSNET-20918 | List item’s formatting is incorrect after DOCX->HTML->DOCX round-trip | Bug |
WORDSNET-20926 | System.NullReferenceException is thrown while saving RTF to PDF | Bug |
WORDSNET-20928 | Aspose.Words.FileCorruptedException occurs upon loading a DOCX | Bug |
WORDSNET-20932 | System.InvalidOperationException is thrown while saving DOC to DOCX | Bug |
WORDSNET-20929 | Document.UpdateFields does not update the TOC correctly | Bug |
WORDSNET-14743 | Content control is split into two once child document content is inserted | Bug |
WORDSNET-20957 | Stack Overflow observed during processing a DOC | Bug |
WORDSNET-20962 | Additional pages appear in output PDF | Bug |
WORDSNET-18318 | Export correct styles for list items using Node.ToString | Bug |
WORDSNET-20614 | Space between ?and ?Chinese charterers increased in PDF | Bug |
WORDSNET-20637 | System.ArgumentOutOfRangeException is thrown by LINQ Reporting engine | Bug |
WORDSNET-13509 | Incorrect breaking of vertically merged cell contents | Bug |
WORDSNET-14951 | Content Controls lost during open/save a DOCX | Bug |
WORDSNET-14742 | Content control is getting deleted while merging two document | Bug |
WORDSNET-18284 | Content of nested table is not rendered correctly in output PDF | Bug |
WORDSNET-18285 | Text of table’s cell does not render correctly in output PDF | Bug |
WORDSNET-5535 | Space characters take too little space in the rendered output | Bug |
WORDSNET-20849 | UpdatePageLayout throws System.Runtime.InteropServices.ExternalException | Bug |
WORDSNET-20194 | Layout API returns incorrect position for GroupShape and Shapes | Bug |
WORDSNET-3493 | Checkboxes are rendered incorrectly | Bug |
WORDSNET-4066 | Incorrect floating table position | Bug |
Public API and Backward Incompatible Changes
This section lists public API changes that were introduced in Aspose.Words 20.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.
Changed the behavior of the FormField.Font property
Related issue: WORDSNET-522 Changed the behavior of the ‘FormField.Font’ property. It is currently allowed to apply font formatting to the FormField as a whole. When new Font properties are set, they take effect for the entire FormField, including the field value.
Use Case. Explains how to apply font formatting to the FormField as a whole:
Document doc = new Document("in.doc");
doc.Range.FormFields[0].Font.Size = 20;
doc.Range.FormFields[0].Font.Color = Color.Red;
doc.Save("out.doc");
Deprecated find replace algorithm returned for compatibility reason
Related issue: WORDSNET-21018 The following member has been added to FindReplaceOptions class
/// <summary>
/// Gets or sets a boolean value indicating that old find/replace algorithm is used.
/// </summary>
/// <remarks>
/// Use this flag if you need exactly the same behavior as before advanced find/replace feature was introduced.
/// Note that old algorithm does not support advanced features such as replace with breaks, apply formatting and so on.
/// </remarks>
public bool LegacyMode { get; set; }
VbaReferenceCollection and related types are exposed publicly
Related issue: WORDSNET-13678
Implemented a new VbaReferenceCollection class:
/// <summary>
/// Represents a collection of <see cref="VbaReference"/> objects.
/// </summary>
public sealed class VbaReferenceCollection : IEnumerable<VbaReference>
{
/// <summary>
/// Removes the first occurrence of a specified VbaReference item from the collection.
/// </summary>
public void Remove(VbaReference item)
/// <summary>
/// Removes the VbaReference element at the specified index of the collection.
/// </summary>
public void RemoveAt(int index)
/// <summary>
/// Returns the number of VBA references in the collection.
/// </summary>
public int Count
}
Implemented a new VbaReference class:
/// <summary>
/// Implements a reference to an Automation type library or VBA project.
/// </summary>
public abstract class VbaReference
{
/// <summary>
/// Gets <see cref="VbaReferenceType"/> object that indicates the type of reference that a VbaReference object represents.
/// </summary>
public abstract VbaReferenceType Type { get; }
/// <summary>
/// Gets a string value containing the identifier of an Automation type library.
/// </summary>
/// <remarks>
/// Depending on reference type, the value of this property can be:
/// <list type="bullet">
/// <item>a LibidReference specified at 2.1.1.8 LibidReference of [MS-OVBA]:
/// >
/// <item>a ProjectReference specified at 2.1.1.12 ProjectReference of [MS-OVBA]:
/// >
/// </list>
/// </remarks>
public abstract string LibId { get; }
}
Implemented a new public enum VbaReferenceType:
/// <summary>
/// Allows to specify the type of a <see cref="VbaReference"/> object.
/// </summary>
public enum VbaReferenceType
Added a new public property into VbaProject class:
/// <summary>
/// Gets a collection of VBA project references.
/// </summary>
public VbaReferenceCollection References
Use Case. Explains how to remove some reference from the collection of references of VbaProject:
public void Main()
{
Document doc = new Document("test.doc");
// Find and remove the reference with some LibId path.
const string brokenPath = "brokenPath.dll";
VbaReferenceCollection references = doc.VbaProject.References;
for (int i = references.Count - 1; i >= 0; i--)
{
VbaReference reference = doc.VbaProject.References[i];
string path = GetLibIdPath(reference);
if (path == brokenPath)
references.RemoveAt(i);
}
doc.Save("NoBrokenRef.doc");
}
/// <summary>
/// Returns string representing LibId path of a specified reference.
/// </summary>
private static string GetLibIdPath(VbaReference reference)
{
switch (reference.Type)
{
case VbaReferenceType.Registered:
case VbaReferenceType.Original:
case VbaReferenceType.Control:
return GetLibIdReferencePath(reference.LibId);
case VbaReferenceType.Project:
return GetLibIdProjectPath(reference.LibId);
default:
throw new ArgumentOutOfRangeException();
}
}
/// <summary>
/// Returns path from a specified identifier of an Automation type library.
/// </summary>
/// <remarks>
/// Please see details for the syntax at [MS-OVBA], 2.1.1.8 LibidReference.
/// </remarks>
private static string GetLibIdReferencePath(string libIdReference)
{
if (libIdReference != null)
{
string[] refParts = libIdReference.Split('#');
if (refParts.Length > 3)
return refParts[3];
}
return "";
}
/// <summary>
/// Returns path from a specified identifier of an Automation type library.
/// </summary>
/// <remarks>
/// Please see details for the syntax at [MS-OVBA], 2.1.1.12 ProjectReference.
/// </remarks>
private static string GetLibIdProjectPath(string libIdProject)
{
return (libIdProject != null) ? libIdProject.Substring(3) : "";
}