CompatibilityOptions

CompatibilityOptions class

Contains compatibility options (that is, the user preferences entered on the Compatibility tab of the Options dialog in Microsoft Word).

public class CompatibilityOptions

Properties

Name Description
AdjustLineHeightInTable { get; set; } Add Document Grid Line Pitch To Lines in Table Cells.
AlignTablesRowByRow { get; set; } Align Table Rows Independently.
AllowSpaceOfSameStyleInTable { get; set; } Allow Contextual Spacing of Paragraphs in Tables.
ApplyBreakingRules { get; set; } Use Legacy Ethiopic and Amharic Line Breaking Rules.
AutofitToFirstFixedWidthCell { get; set; } Allow Table Columns To Exceed Preferred Widths of Constituent Cells.
AutoSpaceLikeWord95 { get; set; } Emulate Word 95 Full-Width Character Spacing.
BalanceSingleByteDoubleByteWidth { get; set; } Balance Single Byte and Double Byte Characters.
CachedColBalance { get; set; } Use Cached Paragraph Information for Column Balancing.
ConvMailMergeEsc { get; set; } Treat Backslash Quotation Delimiter as Two Quotation Marks.
DisableOpenTypeFontFormattingFeatures { get; set; }
DisplayHangulFixedWidth { get; set; } Always Use Fixed Width for Hangul Characters.
DoNotAutofitConstrainedTables { get; set; } Do Not AutoFit Tables To Fit Next To Wrapped Objects.
DoNotBreakConstrainedForcedTable { get; set; } Don’t Break Table Rows Around Floating Tables.
DoNotBreakWrappedTables { get; set; } Do Not Allow Floating Tables To Break Across Pages.
DoNotExpandShiftReturn { get; set; } Don’t Justify Lines Ending in Soft Line Break.
DoNotLeaveBackslashAlone { get; set; } Convert Backslash To Yen Sign When Entered.
DoNotSnapToGridInCell { get; set; } Do Not Snap to Document Grid in Table Cells with Objects.
DoNotSuppressIndentation { get; set; } Do Not Ignore Floating Objects When Calculating Paragraph Indentation.
DoNotSuppressParagraphBorders { get; set; } Do Not Suppress Paragraph Borders Next To Frames.
DoNotUseEastAsianBreakRules { get; set; } Do Not Compress Compressible Characters When Using Document Grid.
DoNotUseHTMLParagraphAutoSpacing { get; set; } Use Fixed Paragraph Spacing for HTML Auto Setting.
DoNotUseIndentAsNumberingTabStop { get; set; } Ignore Hanging Indent When Creating Tab Stop After Numbering.
DoNotVertAlignCellWithSp { get; set; } Don’t Vertically Align Cells Containing Floating Objects.
DoNotVertAlignInTxbx { get; set; } Ignore Vertical Alignment in Textboxes.
DoNotWrapTextWithPunct { get; set; } Do Not Allow Hanging Punctuation With Character Grid.
FootnoteLayoutLikeWW8 { get; set; } Emulate Word 6.x/95/97 Footnote Placement.
ForgetLastTabAlignment { get; set; } Ignore Width of Last Tab Stop When Aligning Paragraph If It Is Not Left Aligned.
GrowAutofit { get; set; } Allow Tables to AutoFit Into Page Margins.
LayoutRawTableWidth { get; set; } Ignore Space Before Table When Deciding If Table Should Wrap Floating Object.
LayoutTableRowsApart { get; set; } Allow Table Rows to Wrap Inline Objects Independently.
LineWrapLikeWord6 { get; set; } Emulate Word 6.0 Line Wrapping for East Asian Text.
MWSmallCaps { get; set; } Emulate Word 5.x for the Macintosh Small Caps Formatting.
NoColumnBalance { get; set; } Do Not Balance Text Columns within a Section.
NoExtraLineSpacing { get; set; } Do Not Center Content on Lines With Exact Line Height.
NoLeading { get; set; } Do Not Add Leading Between Lines of Text.
NoSpaceRaiseLower { get; set; } Do Not Increase Line Height for Raised/Lowered Text.
NoTabHangInd { get; set; } Do Not Create Custom Tab Stop for Hanging Indent.
OverrideTableStyleFontSizeAndJustification { get; set; } Specifies how the style hierarchy of the document is evaluated.
PrintBodyTextBeforeHeader { get; set; } Print Body Text before Header/Footer Contents.
PrintColBlack { get; set; } Print Colors as Black And White without Dithering.
SelectFldWithFirstOrLastChar { get; set; } Select Field When First or Last Character Is Selected.
ShapeLayoutLikeWW8 { get; set; } Emulate Word 97 Text Wrapping Around Floating Objects.
ShowBreaksInFrames { get; set; } Display Page/Column Breaks Present in Frames.
SpaceForUL { get; set; } Add Additional Space Below Baseline For Underlined East Asian Text.
SpacingInWholePoints { get; set; } Only Expand/Condense Text By Whole Points.
SplitPgBreakAndParaMark { get; set; } Always Move Paragraph Mark to Page after a Page Break.
SubFontBySize { get; set; } Increase Priority Of Font Size During Font Substitution.
SuppressBottomSpacing { get; set; } Ignore Exact Line Height for Last Line on Page.
SuppressSpacingAtTopOfPage { get; set; } Ignore Minimum Line Height for First Line on Page.
SuppressSpBfAfterPgBrk { get; set; } Do Not Use Space Before On First Line After a Page Break.
SuppressTopSpacing { get; set; } Ignore Minimum and Exact Line Height for First Line on Page.
SuppressTopSpacingWP { get; set; } Emulate WordPerfect 5.x Line Spacing.
SwapBordersFacingPgs { get; set; } Swap Paragraph Borders on Odd Numbered Pages.
SwapInsideAndOutsideForMirrorIndentsAndRelativePositioning { get; set; }
TransparentMetafiles { get; set; } Specifies not to blank the area behind metafile pictures.
TruncateFontHeightsLikeWP6 { get; set; } Emulate WordPerfect 6.x Font Height Calculation.
UICompat97To2003 { get; set; } True to disable UI functionality which is not compatible with Word97-2003. Default value is false.
UlTrailSpace { get; set; } Underline All Trailing Spaces.
UnderlineTabInNumList { get; set; } Underline Following Character Following Numbering.
UseAltKinsokuLineBreakRules { get; set; } Use Alternate Set of East Asian Line Breaking Rules.
UseAnsiKerningPairs { get; set; } Use ANSI Kerning Pairs from Fonts.
UseFELayout { get; set; } Do Not Bypass East Asian/Complex Script Layout Code.
UseNormalStyleForList { get; set; } Do Not Automatically Apply List Paragraph Style To Bulleted/Numbered Text.
UsePrinterMetrics { get; set; } Use Printer Metrics To Display Documents.
UseSingleBorderforContiguousCells { get; set; } Use Simplified Rules For Table Border Conflicts.
UseWord2002TableStyleRules { get; set; } Emulate Word 2002 Table Style Rules.
UseWord2010TableStyleRules { get; set; }
UseWord97LineBreakRules { get; set; } Emulate Word 97 East Asian Line Breaking.
WPJustification { get; set; } Emulate WordPerfect 6.x Paragraph Justification.
WPSpaceWidth { get; set; } Specifies whether to set the width of a space as is done in WordPerfect 5.x.
WrapTrailSpaces { get; set; } Line Wrap Trailing Spaces.

Methods

Name Description
OptimizeFor(MsWordVersion) Allows to optimize the document contents as well as default Aspose.Words behavior to a particular versions of MS Word.

Examples

Shows how to vertically align the text contents of a text box.

Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);

Shape shape = builder.InsertShape(ShapeType.TextBox, 200, 200);

// Set the "VerticalAnchor" property to "TextBoxAnchor.Top" to
// align the text in this text box with the top side of the shape.
// Set the "VerticalAnchor" property to "TextBoxAnchor.Middle" to
// align the text in this text box to the center of the shape.
// Set the "VerticalAnchor" property to "TextBoxAnchor.Bottom" to
// align the text in this text box to the bottom of the shape.
shape.TextBox.VerticalAnchor = verticalAnchor;

builder.MoveTo(shape.FirstParagraph);
builder.Write("Hello world!");

// The vertical aligning of text inside text boxes is available from Microsoft Word 2007 onwards.
doc.CompatibilityOptions.OptimizeFor(MsWordVersion.Word2007);
doc.Save(ArtifactsDir + "Shape.VerticalAnchor.docx");

Shows how to set an OOXML compliance specification for a saved document to adhere to.

Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);

// If we configure compatibility options to comply with Microsoft Word 2003,
// inserting an image will define its shape using VML.
doc.CompatibilityOptions.OptimizeFor(MsWordVersion.Word2003);
builder.InsertImage(ImageDir + "Transparent background logo.png");

Assert.AreEqual(ShapeMarkupLanguage.Vml, ((Shape)doc.GetChild(NodeType.Shape, 0, true)).MarkupLanguage);

// The "ISO/IEC 29500:2008" OOXML standard does not support VML shapes.
// If we set the "Compliance" property of the SaveOptions object to "OoxmlCompliance.Iso29500_2008_Strict",
// any document we save while passing this object will have to follow that standard. 
OoxmlSaveOptions saveOptions = new OoxmlSaveOptions
{
    Compliance = OoxmlCompliance.Iso29500_2008_Strict,
    SaveFormat = SaveFormat.Docx
};

doc.Save(ArtifactsDir + "OoxmlSaveOptions.Iso29500Strict.docx", saveOptions);

// Our saved document defines the shape using DML to adhere to the "ISO/IEC 29500:2008" OOXML standard.
doc = new Document(ArtifactsDir + "OoxmlSaveOptions.Iso29500Strict.docx");

Assert.AreEqual(ShapeMarkupLanguage.Dml, ((Shape)doc.GetChild(NodeType.Shape, 0, true)).MarkupLanguage);

Shows how to optimize the document for different versions of Microsoft Word.

public void OptimizeFor()
{
    Document doc = new Document();

    // This object contains an extensive list of flags unique to each document
    // that allow us to facilitate backward compatibility with older versions of Microsoft Word.
    CompatibilityOptions options = doc.CompatibilityOptions;

    // Print the default settings for a blank document.
    Console.WriteLine("\nDefault optimization settings:");
    PrintCompatibilityOptions(options);

    // We can access these settings in Microsoft Word via "File" -> "Options" -> "Advanced" -> "Compatibility options for...".
    doc.Save(ArtifactsDir + "CompatibilityOptions.OptimizeFor.DefaultSettings.docx");

    // We can use the OptimizeFor method to ensure optimal compatibility with a specific Microsoft Word version.
    doc.CompatibilityOptions.OptimizeFor(MsWordVersion.Word2010);
    Console.WriteLine("\nOptimized for Word 2010:");
    PrintCompatibilityOptions(options);

    doc.CompatibilityOptions.OptimizeFor(MsWordVersion.Word2000);
    Console.WriteLine("\nOptimized for Word 2000:");
    PrintCompatibilityOptions(options);
}

/// <summary>
/// Groups all flags in a document's compatibility options object by state, then prints each group.
/// </summary>
private static void PrintCompatibilityOptions(CompatibilityOptions options)
{
    for (int i = 1; i >= 0; i--)
    {
        Console.WriteLine(Convert.ToBoolean(i) ? "\tEnabled options:" : "\tDisabled options:");
        SortedSet<string> optionNames = new SortedSet<string>();

        foreach (System.ComponentModel.PropertyDescriptor descriptor in System.ComponentModel.TypeDescriptor.GetProperties(options))
        {
            if (descriptor.PropertyType == Type.GetType("System.Boolean") && i == Convert.ToInt32(descriptor.GetValue(options)))
            {
                optionNames.Add(descriptor.Name);
            }
        }

        foreach (string s in optionNames)
        {
            Console.WriteLine($"\t\t{s}");
        }
    }
}

See Also