Aspose.Words for .NET 19.4 Release Notes
Major Features
- Added a new ImportFormatOptions class for more flexible control over importing tasks.
- Provide API to change how text is vertically aligned within the Text Box.
- Added a new ImportFormatOptions.KeepSourceNumbering option for use in import operations.
- Added a new ImportFormatOptions.IgnoreTextBoxes option for use in import operations.
- Added property PdfSaveOptions.AdditionalTextPositioning to control writing of additional text positioning operators in PDF.
- Implemented processing of fonts with “_GB2312” name suffixes (e.g. “KaiTi” font) when rendering metafiles.
- Improved calculation of extrema when rendering DrawingML charts.
- Improved vertical axis scaling of the chart with a manual layout of the plot area when rendering.
- Improved impact assessment of the chart title size on the vertical axis scaling when rendering.
- Improved vertical axis scaling when rendering DrawingML charts with the specified legend and the manual layout of the plot area.
- Fixed a bug that caused a violation of PDF A-1b compliance when writing large text position adjustment values.
- Fixed a bug with calculating extremums of the vertical axis when rendering DrawingML charts.
- Fixed a bug with exception when converting a radar chart with empty Y-values to PDF.
- Fixed a bug with rendering of transparent shapes with line caps specified.
- Fixed infinite loop when shape overlapping is computed.
- Improved shading rendering for condensed text.
- Improved overlapping logic for frames and tables.
- Improved Keep With Next rule handling for paragraph splits.
- Improved Keep Lines Together rule handling in presence of floaters.
Full List of Issues Covering all Changes in this Release
Key | Summary | Category |
---|---|---|
WORDSNET-14095 | Add a border to a DML shape | New Feature |
WORDSNET-18027 | DOCX to PDF - additional gaps between characters in the printed text | New Feature |
WORDSNET-17996 | Provide API to change how text is vertically aligned within the Text Box | New Feature |
WORDSNET-17534 | NodeImporter. ListFormat not imported | Bug |
WORDSNET-18107 | Document.Save method does not stop while saving DOCX to PDF | Bug |
WORDSNET-18130 | Vertical container bounds for shapes in compatibility mode | Bug |
WORDSNET-9890 | TextBox with vertical text in Header is not preserved in PDF | Bug |
WORDSNET-15523 | Image missing when converting .docx to .pdf | Bug |
WORDSNET-17951 | Font formatting of Empty Paragraph is not preserved after DOCX->HTML->DOCX conversion | Bug |
WORDSNET-18189 | DocumentBuilder.insertHtml inserts extra space just before line break | Bug |
WORDSNET-18231 | Aspose.Words.FileCorruptedException is thrown while loading DOC | Bug |
WORDSNET-18296 | System.NullReferenceException occurs upon converting DOC to PDF | Bug |
WORDSNET-17894 | Images with the absolute path but no scheme are not saved | Bug |
WORDSNET-18363 | The content of the comments can’t be highlighted in some cases | Bug |
WORDSNET-18263 | System.IndexOutOfRangeException is thrown while saving DOCX to HTML/PDF | Bug |
WORDSNET-17821 | Incorrect scaling of the second vertical axis after conversion to PDF | Bug |
WORDSNET-18065 | UpdateFields throws ‘Requested default value for an unknown attribute’ exception | Bug |
WORDSNET-18110 | Characters are overlapped after conversion from RTF to PDF | Bug |
WORDSNET-18143 | DOCX to HTML to DOC - “behind text” shape is positioned behind text because blank lines are removed | Bug |
WORDSNET-18230 | DOCX to PDF conversion issue with Chinese text rendering | Bug |
WORDSNET-18159 | ShapeRenderer crashes when rendering Emoji on macOS | Bug |
WORDSNET-17961 | Replacement of text produces duplicated text lines | Bug |
WORDSNET-14740 | AW does not split a paragraph to satisfy “keep with next” rule | Bug |
WORDSNET-18016 | Aspose.Words.FileCorruptedException is thrown while loading HTML | Bug |
WORDSNET-18220 | Incorrect shape position on conversion to fixed page formats | Bug |
WORDSNET-18281 | Update Aspose.TestBenchmark to the latest BenchmarkDotNet library | Bug |
WORDSNET-17255 | Page field returns incorrect value (wrong document layout) | Bug |
WORDSNET-18115 | DOCX to PDF - content moved to next page | Bug |
WORDSNET-18390 | The first page is missing when saving ODT file | Bug |
WORDSNET-18136 | Style property for items starting with 10 is absent when we include the font | Bug |
WORDSNET-14974 | The slope of Drawing Line is incorrect after conversion | Bug |
WORDSNET-10664 | MSWord2013 can split a table row due to “Keep with next” option | Bug |
WORDSNET-11824 | Paragraph rules are not applied to paragraphs inside cells | Bug |
WORDSNET-13063 | The paragraph does' t apply “keep lines together” rule | Bug |
WORDSNET-18266 | System.OverflowException is thrown while loading MHTML | Bug |
WORDSNET-17868 | The range of Y-Axis of the chart is changed in output PDF | Bug |
WORDSNET-17862 | Text overlapping in rendered PDF | Bug |
WORDSNET-17901 | The vertical axis gets the incorrect interval scaling in PDF output | Bug |
WORDSNET-18198 | The textbox is improperly aligned after HTML round trip | Bug |
WORDSNET-18005 | Document.Save throws System.NullReferenceException at Ubuntu | Bug |
WORDSNET-18205 | The equation is converted to the image in DOCX output | Bug |
WORDSNET-18086 | Add support for .ICO files with PNG images inside | Bug |
WORDSNET-18197 | InsertImage throws System.NullReferenceException when SVG is inserted into Document | Bug |
WORDSNET-18319 | Aspose.Words.FileCorruptedException is thrown while loading DOCX | Bug |
WORDSNET-17526 | Process hangs during DOCX to PDF conversion | Bug |
WORDSNET-17939 | Strange code in DmlChartPlaneCartesian3D class | Bug |
WORDSNET-17952 | Document.UpdateFields throws System.NotSupportedException | Bug |
WORDSNET-18215 | “width” of HTML cells specified in percents is ignored if “min-width” is also present | Bug |
WORDSNET-18274 | UpdateFields() method does not finish | Bug |
WORDSNET-14397 | Inserting documents does not preserve numbering | Bug |
WORDSNET-18265 | NodeImporter.ImportNode throws exception after UpdatePageLayout | Bug |
WORDSNET-17544 | Table borders in fixed-page HTML disappear in Chrome at lower zoom levels | Bug |
WORDSNET-18095 | Table Cell Line Spacing lost when converting to PDF | Bug |
WORDSNET-17866 | Incorrect rendering of Axis labels after converting to PDF | Bug |
WORDSNET-18320 | Aspose.Words.FileCorruptedException is thrown while loading DOCX | Bug |
WORDSNET-18279 | Header and Footer are lost after re-saving DOC | Bug |
WORDSNET-17083 | InsertDocument inserts a white space at the start of the content | Bug |
WORDSNET-17504 | The section break is lost after DOCX>HTML>DOCX conversion | Bug |
WORDSNET-18392 | PDF A-1b compliance validation issues | Bug |
WORDSNET-11660 | Table objects in MS Word are not shown in PDF rendition | Bug |
WORDSNET-18202 | Problems with NodeImporter using ImportFormatMode KeepSourceFormatting | Bug |
Public API and Backward Incompatible Changes
This section lists public API changes that were introduced in Aspose.Words 19.4. 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 new ImportFormatOptions class for more flexible control over importing tasks
Related issue: WORDSNET-14397 has now been resolved.
Added a new ImportFormatOptions class with only a single public property SmartStyleBehavior:
/// <summary>
/// Allows to specify various import options to format output.
/// </summary>
public class ImportFormatOptions
{
/// <summary>
/// Smart style behavior.
/// Default value is <c>false</c>.
/// </summary>
public bool SmartStyleBehavior
}
This option starts working when styles clashes upon importing.
When this option is enabled, a source style will be expanded into direct attributes inside a destination document, if KeepSourceFormatting importing mode is used.
When this option is disabled, a source style will be expanded only if it is numbered. Existing destination attributes will not be overridden, including lists.
For a moment this option can be used only with a new public method of a DocumentBuilder class:
/// <summary>
/// Inserts a document at the cursor position.
/// </summary>
public Node InsertDocument(Document srcDoc, ImportFormatMode importFormatMode, ImportFormatOptions options)
UseCase:
Document srcDoc = new Document("source.docx");
Document dstDoc = new Document("destination.docx");
DocumentBuilder builder = new DocumentBuilder(dstDoc);
builder.MoveToDocumentEnd();
builder.InsertBreak(BreakType.PageBreak);
ImportFormatOptions options = new ImportFormatOptions();
options.SmartStyleBehavior = true;
builder.InsertDocument(srcDoc, ImportFormatMode.UseDestinationStyles, options);
Changes in font resolving while loading HTML (SVG) document
Related issue: WORDSNET-17383 has now been resolved:
Previously while loading HTML (SVG) document font families resolved by font names were found on the system.
If font family wasn’t found on the system original font family kept in the model.
This led to a situation when resolved font name depended on the local system.
For example, if ‘UnknownFont1’ is absent on the system the following font family declaration resolved as ‘Arial’ (‘Arial’ is name for ‘san-serif’ generic font name.)
<p style='font-family:UnknownFont1, sans-serif;'>This is a paragraph.</p>
Now the customer can use font settings before loading the document (add substitution rule, specify fonts folder and etc).
The following example shows how to add font substitution rule while loading the document.
FontSettings fontSettings = new FontSettings();
TableSubstitutionRule substitutionRule = fontSettings.SubstitutionSettings.TableSubstitution;
// If "UnknownFont1" font family is not available then substitute it by "Comic Sans MS".
substitutionRule.AddSubstitutes("UnknownFont1", new string[] { "Comic Sans MS" });
LoadOptions lo = new LoadOptions();
lo.FontSettings = fontSettings;
Document doc = new Document(MyDir + "myfile.html", lo);
The resulting model will contain ‘UnknownFont1’ as resolved font name for a paragraph from example.
API to change how text is vertically aligned within the Text Box
Related issue: WORDSNET-17996 has now been resolved.
Added new property for specifying vertical anchor of shape’s textbox.
/// <summary>
/// Specifies the vertical alignment of the text within a shape.
/// </summary>
/// <remarks>
/// <p>The default value is <see cref="TextBoxAnchor.Top"/>.</p>
/// </remarks>
public TextBoxAnchor VerticalAnchor
{
get;
set;
}
The property allows to specify text anchor within the shape (Top, Middle, Bottom).
Document doc = new Document(fileName);
Shape shape = doc.FirstSection.Body.Shapes[0];
shape.TextBox.VerticalAnchor = TextBoxAnchor.Middle;
Saving warnings will be thrown for unsupported formats (WordML) and for incompatible Word versions above 2007 (DOC, DOT).
Added public property PdfSaveOptions.AdditionalTextPositioning
Related issue: WORDSNET-18027 has now been resolved.
The following new property has been added into the PdfSaveOptions class:
/// <summary>
/// A flag specifying whether to write additional text positioning operators or not.
/// </summary>
/// <remarks>
/// <para>
/// If <c>true</c>, additional text positioning operators are written to the output PDF. This may help to overcome
/// issues with inaccurate text positioning with some printers. The downside is the increased PDF document size.
/// </para>
/// <para>The default value is <c>false</c>.</para>
/// </remarks>
public bool AdditionalTextPositioning
{
get { return mAdditionalTextPositioning; }
set { mAdditionalTextPositioning = value; }
}
Added a new ImportFormatOptions.KeepSourceNumbering option for use in import operations
Related issue: WORDSNET-17534 has now been resolved.
When import nodes between different documents there can be a situation when source document has lists with the same identifiers that were already used in a destination document. Word in such case always uses formatting from the destination lists.
To allow users to choose an appropriate behavior, the following option was introduced in ImportFormatOptions class:
/// <summary>
/// Gets or sets a boolean value that specifies how the numbering will be imported when it clashes in source and destination documents.
/// The default value is <c>false</c>.
/// </summary>
public bool KeepSourceNumbering
Also, a new public method that accepts the new KeepSourceNumbering option was introduced as the following:
/// <summary>
/// Initializes a new instance of the <see cref="NodeImporter"/> class.
/// </summary>
/// <param name="srcDoc">The source document.</param>
/// <param name="dstDoc">The destination document that will be the owner of imported nodes.</param>
/// <param name="importFormatMode">Specifies how to merge style formatting that clashes.</param>
/// <param name="importFormatOptions">Specifies various options to format imported node.</param>
public NodeImporter(DocumentBase srcDoc, DocumentBase dstDoc, ImportFormatMode importFormatMode, ImportFormatOptions importFormatOptions)
UseCase:
Document srcDoc = TestUtil.Open(@"source.docx");
Document dstDoc = TestUtil.Open(@"destination.docx");
ImportFormatOptions importFormatOptions = new ImportFormatOptions();
// Keep source list formatting when importing numbered paragraphs.
importFormatOptions.KeepSourceNumbering = true;
NodeImporter importer = new NodeImporter(srcDoc, dstDoc, ImportFormatMode.KeepSourceFormatting, importFormatOptions);
ParagraphCollection srcParas = srcDoc.FirstSection.Body.Paragraphs;
foreach (Paragraph srcPara in srcParas)
{
Node importedNode = importer.ImportNode(srcPara, false);
dstDoc.FirstSection.Body.AppendChild(importedNode);
}
dstDoc.Save("output.docx");
Added a new ImportFormatOptions.IgnoreTextBoxes option for use in import operations
Related issue: WORDSNET-18202 has now been resolved.
When import a text box between different documents, the formatting of the destination document is applied to it. This corresponds to the behavior of Word. To allow users to choose an appropriate behavior, the following option was introduced in ImportFormatOptions class:
/// <summary>
/// Gets or sets a boolean value that indicates whether to ignore formatting in the text boxes of
/// the source destination during the import.
/// Default value is <c>true</c>.
/// </summary>
public bool IgnoreTextBoxes
UseCase:
Document srcDoc = TestUtil.Open(@"source.docx");
Document dstDoc = TestUtil.Open(@"destination.docx");
ImportFormatOptions importFormatOptions = new ImportFormatOptions();
// Keep the source text boxes formatting when importing.
importFormatOptions.IgnoreTextBoxes = false;
NodeImporter importer = new NodeImporter(srcDoc, dstDoc, ImportFormatMode.KeepSourceFormatting, importFormatOptions);
ParagraphCollection srcParas = srcDoc.FirstSection.Body.Paragraphs;
foreach (Paragraph srcPara in srcParas)
{
Node importedNode = importer.ImportNode(srcPara, true);
dstDoc.FirstSection.Body.AppendChild(importedNode);
}
dstDoc.Save("output.docx");