Aspose.Words for C++ 19.12 Release Notes

Major Features

This is a regular monthly release, we continue to add features from Aspose.Words for .NET:

  • Conversion to PDF 1.7 standard is now supported.
  • User-installed fonts are now supported upon using SystemFontSource on Windows10.
  • New public properties of Bookmark are exposed.
  • OLE object data is exposed to public API.

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 cryptography features - it cannot verify, sign, encrypt or decrypt documents.
  • The current release does not support downloading remote resources from the Internet.
  • The current release does not support Metered license.
  • The current release does not support a multipage TIFF format.
  • The current release does not support LINQ and Reporting features.
  • The current release has limited support for database features - C++ does not have common API for DB like .NET System.Data.
  • The current release only supports Microsoft Visual C++ version 2015 or higher and only for the x64 platform.

Full List of Issues Covering all Changes in this Release

Key Summary Category
WORDSNET-18367 Mediaeval fonts: support for inline number forms New Feature
WORDSNET-17731 Support converting word documents to the PDF 1.7 standard New Feature
WORDSNET-11083 Support new PDF standard New Feature
WORDSNET-1860 Support attribute to do “List numbering should be restarted when simple mail merge is performed.” New Feature
WORDSNET-10593 Add support Web Extensions into the model New Feature
WORDSNET-18634 Provide support for adding dynamic WebExtension element nodes in Word Document New Feature
WORDSNET-19531 Add handling of user font folder on Win10 to SystemFontSource New Feature
WORDSNET-19238 Support access to related DataTable using relation name for LINQ Reporting Engine New Feature
WORDSNET-18897 Expose OLE object data to public API New Feature
WORDSNET-14286 The position of the text is changed after conversion from DOCX to DOC/PDF Enhancement
WORDSNET-12678 Improve table bookmarks Enhancement
WORDSNET-15814 Incorrect line wrapping in PDF output Enhancement
WORDSNET-18776 Table with the proportional font in Word document will not be converted correctly to PDF Enhancement
WORDSNET-14294 Shape’s position is changed after conversion from DOCX to DOC/PDF Enhancement
WORDSNET-19555 Font formatting Problem when converting Word to PDF Bug
WORDSNET-18454 Line chart inverted and X-Axis have more values in PDF Bug
WORDSNET-18914 Formatting issue when converting DOCX to PDF Bug
WORDSNET-19471 Gap between Table Borders missing in PDF Bug
WORDSNET-12922 Cell borders are merged making one big border for Rows in PDF Bug
WORDSNET-13504 System.ArgumentOutOfRangeException is thrown while saving each page to HtmlFixed Bug
WORDSNET-19460 DOCX to PDF conversion issue with content position Bug
WORDSNET-19464 Check if Aspose.Words is affected by vulnerability CVE-2019-5041 Bug
WORDSNET-16921 Aspose.Wwords balances footnotes improperly Bug
WORDSNET-17612 DOCX to HTML conversion issue BookmarkEnd node position Bug
WORDSNET-18058 Shape position in chart is changed in output PDF Bug
WORDSNET-18986 Range.Replace does not replace all occurrences of text Bug
WORDSNET-19478 Mime type is different when Document is saved using MS Word and Aspose.Words Bug
WORDSNET-19117 UpdatePageLayout Prevents a Table from Breaking across Pages in PDF Bug
WORDSNET-14764 Document.RenderToScale only saves document’s first page to image Bug
WORDSNET-18788 Y-axis label values are changed in output PDF Bug
WORDSNET-18789 The dashed line of chart does not render correctly in output PDF Bug
WORDSNET-18790 The X-axis of chart is changed in output PDF Bug
WORDSNET-19248 Footnotes issue after converting DOCX to PDF Bug
WORDSNET-19560 incorrect indent level of numbered list in appended document Bug
WORDSNET-18621 Tamil language not rendering correctly in PDF Bug
WORDSNET-19574 Aspose.Words.FileCorruptedException is thrown while importing DOC Bug
WORDSNET-19261 Content control are repeated after conversion from DOCX to PDF Bug
WORDSNET-16628 Contents are pushed down to the next page in output PDF Bug
WORDSNET-19480 ParagraphFormat.SpaceAfter validation issue Bug
WORDSNET-19481 DOC to PDF conversion issue with table border Bug
WORDSNET-19466 Arrow heads of a Prism6.Document embedded object not visible Bug
WORDSNET-18938 Contents are truncated after conversion from MHTML to PDF Bug
WORDSNET-19571 Aspose.Words.FileCorruptedException occurs upon loading a DOC Bug
WORDSNET-19532 Issues with output formatting when using KeepSourceFormatting and KeepDifferentStyles of ImportFormatMode enum Bug
WORDSNET-19565 From Center Shading Style lost when converting DOC to DOCX to DOC Bug
WORDSNET-18815 Opacity of text is lost when SVG is inserted into DOCX Bug
WORDSNET-18816 Content position are changed and overlapped after conversion from HTML to PDF Bug
WORDSNET-18632 Tamil Vijaya language not rendering correctly in PDF Bug
WORDSNET-19047 After conversion to PDF table moves to the next page Bug
WORDSNET-19161 Refactoring “paragraph rule” classes Bug
WORDSNET-18937 Contents are truncated after conversion from MHTML to PDF Bug
WORDSNET-19490 Document.Save throws System.InvalidOperationException Bug
WORDSNET-19188 Word to PDF grid lines rendering issues Bug
WORDSNET-19494 PDF Table header font color Issue Bug
WORDSNET-19497 AppendDocument System.InvalidOperationException Bug
WORDSNET-19412 Failure when Accepting all revisions Bug
WORDSNET-19411 DOCX to PDF conversion issue with text position Bug
WORDSNET-19502 Aspose.Words.FileCorruptedException occurs upon loading a DOCX Bug
WORDSNET-19506 DOCX to PDF missing image in header Bug
WORDSNET-19510 Styles are lost after conversion from WordML to DOCX Bug
WORDSNET-19505 Page breaks are removed if ReportBuildOptions.RemoveEmptyParagraphs is used Bug
WORDSNET-19419 RTF does not open in WordPad after conversion from HTML Bug
WORDSNET-19178 HTML to PDF or Word convert with border around document Bug
WORDSNET-19522 Math equations are changed after re-saving DOCX Bug
WORDSNET-18774 Text is overlapped after conversion from DOCX to PDF Bug
WORDSNET-19515 AppendDocument changes font size of TextBox Content Bug
WORDSNET-16483 DOCX to PDF conversion issue with text position Bug
WORDSNET-19237 NullReferenceException is thrown when evaluating a null-conditional operator on missing related DataRow Bug
WORDSNET-19536 Add the ability to apply 3D effects without 3D rotation Bug
WORDSNET-19608 Document.AcceptAllRevisions changes the list position Bug
WORDSNET-19169 Chart to PNG conversion issue with chart title Bug
WORDSNET-19597 Line spacing is incorrect in output PDF when font Arial is substituted to FreeSans Bug
WORDSNET-19542 Heading paragraph outline level issue Bug
WORDSNET-19543 Bullet list is lost after using Range.Replace with &p special meta-character Bug
WORDSNET-19547 Bookmark.Text returns empty value that is incorrect Bug
WORDSNET-19546 Incorrect encoding used while OlePackage is read Bug
WORDSNET-19551 Document.compare with TOC fails in 19.11 Bug
WORDSNET-19315 Paragraph is rendered on previous page in output PDF Bug
WORDSNET-19336 Aspose.Words.FileCorruptedException is thrown while loading mhtml Bug
WORDSNET-19357 Difference in Order between the now and old deprecated Replace methods Bug
WORDSNET-19367 Page break while converting DOC to HTML Bug
WORDSNET-18084 TOC field sequence separator does not display properly until manual field update Bug
WORDSNET-19424 Capital letters in HTML do not render correctly when ExportFontsAsBase64 is used Bug
WORDSNET-19302 DOCX to PDF conversion issue with Accessibility check Bug
WORDSNET-19435 Document.UpdateFields updates the table of content incorrectly Bug
WORDSNET-19440 Incorrect scaling of the horizontal date axis after conversion to PDF Bug
WORDSNET-19441 Incorret scaling of the vertical axis Bug
WORDSNET-19456 MailMerge.Execute does not format the date field according to date switches Bug
WORDSNET-19583 Bookmark.Text sets the text incorrectly Bug
WORDSNET-17337 Performance issue with Range.Replace method in 18.8 Bug
WORDSNET-14646 Content is moved to the next page upon converting Bug
WORDSNET-14675 Document.Save does not save the DOCX to TIFF images Bug
WORDSNET-19249 Harfbuzz causes an exception in x64 environment Bug
WORDSNET-18223 The list numbers are lost after comparing documents using Document.Compare Bug
WORDSNET-14466 Empty page gets added to the PDF when converting from DOCX Bug

Public API and Backward Incompatible Changes

This section lists public API changes that were introduced in Aspose.Words 19.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 ability to clone VbaProject and VbaModule

Related issue: WORDSNET-19556

Added a Clone() method for a VbaProject:

/// <summary>
/// Performs a copy of the <see cref="VbaProject"/>.
/// </summary>
/// <returns>The cloned VbaProject.</returns>
public VbaProject Clone()

Added a Clone() method for a VbaModule:

/// <summary>
/// Performs a copy of the <see cref="VbaModule"/>.
/// </summary>
/// <returns>The cloned VbaModule.</returns>
public VbaModule Clone()

Use Case 1:

Document sourceDoc = TestUtil.Open(@"source.docm");
Document destDoc = new Document();

// Clone the whole project.
destDoc.VbaProject = sourceDoc.VbaProject.Clone();
destDoc.Save("output.docm", );

Use Case 2:

Document sourceDoc = TestUtil.Open(@"source.docm");
Document destDoc = new Document();
destDoc.VbaProject = new VbaProject();

// Clone a single module.
VbaModule copyModule = sourceDoc.VbaProject.Modules["Module1"].Clone();
destDoc.VbaProject.Modules.Add(copyModule);
destDoc.Save("output.docm", );

Added ability to get access to OLE object raw data

WORDSNET-18897: added a feature to get access to OLE object raw data.

byte[] OleFormat.GetRawData();

Use Case:

// Load document with OLE object.
Document doc = new Document(filename);
Shape oleShape = (Shape)doc.GetChild(NodeType.Shape, 0, true);
byte[] oleRawData = shape.OleFormat.GetRawData();

Added a new FindReplaceOptions.UseLegacyOrder option

Related issue: WORDSNET-19357.

Some time ago, the Find/Replace method was redesigned in accordance with Word’s behavior. In the current behavior, text boxes are analyzed separately from traversal the contents of the document. However, sometimes it is required that the text find/replace occurs sequentially considering the text in the text boxes. To allow users to choose an appropriate behavior, the following option was introduced in FindReplaceOptions class:

/// <summary>
/// True indicates that a text search is performed sequentially from top to bottom considering the text boxes.
/// Default value is false.
/// </summary>
public bool UseLegacyOrder
{
    get; set;
}

Use Case: In the example, the text “2” is in the text box.

// Open the document.
    Document doc = Document(@"source.docx");
    FindReplaceOptions options = new FindReplaceOptions();
    options.ReplacingCallback = new ReplacingCallback();
    options.UseLegacyOrder = useLegacyOrder;
    doc.Range.Replace(new Regex(@"\[(.*?)\]"), "", options);
}
private class ReplacingCallback : IReplacingCallback
{
    ReplaceAction IReplacingCallback.Replacing(ReplacingArgs e)
    {
        Console.Write(e.Match.Value);
        return ReplaceAction.Replace;
    }
}

// The example displays the following output:

//    If useLegacyOrder is true: [1][2][3]

//    If useLegacyOrder is false: [1][3][2]

Added new RtfSaveOption.SaveImagesAsWmf

Related issue: WORDSNET-19419

Added the following new RtfSaveOption:

/// <summary>
/// When true all images will be saved as WMF.
/// </summary>
/// <remarks>
/// This option might help to avoid WordPad warning messages.
/// </remarks>
public bool SaveImagesAsWmf

Use Case:

Document doc = new Document(@"source.docx");
RtfSaveOptions saveOpts = new RtfSaveOptions();
saveOpts.SaveImagesAsWmf = true;
doc.Save("output.rtf", saveOpts);

Conversion to PDF 1.7 standard is now supported

Added by Denis Panov, last edited by Andrey Noskov on Dec 04, 2019 (view change) Task: WORDSNET-11083 - Support converting to PDF 1.7(Subtask - WORDSNET-19508)

Changes:

  • Implemented conversion Word documents to PDF 1.7.
  • Changed default output PDF format to PDF 1.7.

Description:

Added PDF 1.7 to PdfCompliance enum:

/// <summary>
/// Specifies the PDF standards compliance level.
/// </summary>
public enum PdfCompliance
{
    /// <summary>
    /// The output file will comply with the PDF 1.7 standard.
    /// </summary>
    Pdf17,
    
}

The property allows specifying PDF format for the output document. Example:

Document originalDoc = new Document(@"C:\PathToSource\Document.docx");
Saving.PdfSaveOptions pso = new Saving.PdfSaveOptions();
pso.Compliance = Saving.PdfCompliance.Pdf17;
originalDoc.Save(@"C:\PathToSource\Output.pdf", pso);

// or just convert without SaveOptions
Document originalDoc = new Document(@"C:\PathToSource\Document.docx");
originalDoc.Save(@"C:\PathToSource\Output.pdf");

New public properties of Bookmark are exposed

Issue WORDSNET-12678.

The following new public properties have been added into the Bookmark class:

/// <summary>
/// Returns <b>true</b> if this bookmark is a table column bookmark.
/// </summary>
public bool IsColumn
{
    get;
}
/// <summary>
/// Gets the zero-based index of the first column of the table column range associated with the bookmark.
/// </summary>
/// <remarks>
/// Returns <b>-1</b> if this bookmark is not a table column bookmark.
/// </remarks>
public int FirstColumn
{
    get;
}
/// <summary>
/// Gets the zero-based index of the last column of the table column range associated with the bookmark.
/// </summary>
/// <remarks>
/// Returns <b>-1</b> if this bookmark is not a table column bookmark.
/// </remarks>
public int LastColumn
{
    get;
}

User Case:

Document doc = new Document(fileName);
foreach (Bookmark bookmark in doc.Range.Bookmarks)
{
    Console.WriteLine("Bookmark: {0}{1}", bookmark.Name, bookmark.IsColumn ? " (Column)" : "");
    if (bookmark.IsColumn)
    {
        Row row = bookmark.BookmarkStart.GetAncestor(NodeType.Row) as Row;
        if (row != null && bookmark.FirstColumn < row.Cells.Count)
            Console.WriteLine(row.Cells[bookmark.FirstColumn].GetText().TrimEnd(ControlChar.CellChar));
    }
}

Issue: WORDSNET-19238

The following sections of the engine’s documentation were updated to describe the change:

User-installed fonts are now supported upon using SystemFontSource on Windows10

Issue WORDSNET-19531

On Windows 10 fonts may be installed either into system folder “%windir%\fonts” for all users or into user folder “%userprofile%\AppData\Local\Microsoft\Windows\Fonts” for the current user. Previously for SystemFontSource AW scanned only system-installed fonts. Now AW also scans user-installed fonts for SystemFontSource.