Aspose.word for .net 23.4.0.0 兼容模式自动转换为非兼容模式

我有一份word文档,使用office2016打开后title会显示[兼容]模式,一般需要手动切换为非兼容模式,正常使用。
如果通过aspose.word for .net 23.4.0.0 自动切换为非兼容模式

@zchong

请问您希望通过Aspose.Words for .NET 23.4.0.0实现什么样的自动转换?是希望在加载文档时自动转换为非兼容模式吗?

需要支持自动转换的功能,目前通过另存之类的方法都不可以

@zchong 例如,您可以使用 doc.getCompatibilityOptions().optimizeFor(MsWordVersion.WORD_2010);来处理兼容性问题。 默认情况下,Aspose.Words 使用基于 MS Word 2019 显示的文档。

以下链接可能有用:

我的版本是aspose for .net ,刚查找无getCompatibilityOptions 方法,且链接也是java版本对应的,是否有其他方式。

@zchong 很抱歉提供了错误信息。 以下是 .NET 代码: doc.CompatibilityOptions.OptimizeFor(MsWordVersion.Word2010);`和链接CompatibilityOptions Class | Aspose.Words for .NET

当我不确定是否为兼容模式的文档时,如果采用这么方式是否存在隐藏问题。

我的诉求是需要检查文档里面的样式信息,兼容模式读取样式信息有时候是错误的,页码也是乱的,或者根本读取不到。

@zchong 能否请您提供您正在使用的文件和代码,以帮助我们重现该问题? 我们将进行调查并为您提供更多信息。

您看下这个图片,同一个文档,兼容模式和非兼容模式展示 样式不一样,多了一个蓝色底的图片

@zchong 不幸的是,没有文件,很难分析这个问题。作为一种变体,您可以尝试使用以下代码加载文档:

LoadOptions options = new LoadOptions();
options.LanguagePreferences.DefaultEditingLanguage = EditingLanguage.ChinesePRC;
Document doc = new Document("input.docx", options);

@zchong 此外,docx 文件中的 settings.xml 包含以下兼容文件信息:

<w:compatSetting w:name="compatibilityMode" w:uri="http://schemas.microsoft.com/office/word" w:val="14"/>

您可以检查该值,并在兼容性设置中选择最佳的 MS Word 版本。 如果没有帮助,可能是 Aspose.Words 中的问题。

测试文档.docx (26.7 KB)
您可以查看下这份文档,当使用兼容模式的时候,文档表格内不存在类似蓝底的图片。 转换兼容模式后就出现了。

@zchong 感谢您提供的文件。 我还以为是关于 Aspose.Words 的问题。

本文件有

<w:compatSetting w:name="compatibilityMode" w:uri="http://schemas.microsoft.com/office/word" w:val="14"/>

这意味着它最兼容 Word 2010。 2010 和 2019 或更高版本在显示内容方面有很大区别。 但如果表格行列位置相同,两个版本都会出现相同的蓝线。

我认为没有问题,只是MS Word版本之间的计算和显示内容不同。

我用2016打开的,两种模式显示效果完全不一样

@zchong 正如我在上一篇文章中所说,转换后不可能得到相同的结果。 您可以调整表格的大小,尝试得到相似的结果。 下面是我修改后的转换文档。 虽然看起来和之前的不一样,但已经尽可能相似了:

converted.docx (30.1 KB)

这串xml属性有没有示例代码可以直接读取呢,帮忙提供下吧

顺便帮忙看下有没有办法获取制作当前文档的版本号,是2010、2016还是什么。
为什么会出现这种兼容模式呢。

@zchong Aspose.Words 没有获取此参数的特定代码。 您可以尝试使用 DocumentFormat.OpenXml 库来获取该值,然后用它来定义一些选项:

using (WordprocessingDocument wordDoc = WordprocessingDocument.Open("input.docx", false))
{
    DocumentSettingsPart settingsPart = wordDoc.MainDocumentPart.DocumentSettingsPart;
    Settings settings = settingsPart.Settings;

    var compatibility = settings.GetFirstChild<Compatibility>();
    var compatSetting = compatibility.GetFirstChild<CompatibilitySetting>();
    if (compatSetting != null)
    {
        Console.WriteLine("Compatibility Mode Found:");
        Console.WriteLine($"Name: {compatSetting.Name}");
        Console.WriteLine($"Value: {compatSetting.Val}");
    }
    else
    {
        Console.WriteLine("Compatibility Mode setting not found.");
    }
}

如果手动操作,需要将 .docx 改为 .zip,然后解压文件,在"{文件名}\word "文件夹中找到 settings.xml。

像文档里面的这种是代表的制作当前文档的版本信息吗,我本机实际安装的16,为什么显示15呢