Browse our Products

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

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

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.