您可以在 .NET 应用程序中以编程方式轻松比较两个或多个 Word 文档或比较同一个 Word 文件的多个版本的异同。在本文中,您将学习如何使用 C# 比较两个或多个 Word 文档并突出显示差异。
本文讨论/涵盖了以下主题:
- 用于比较 DOCX 文件的 C# API
- 使用 C# 比较两个或多个 Word 文档
- 在 C# 中使用 Stream 比较 Word 文档
- 使用 C# 获取更改的文本
- 使用 C# 比较文档属性
- 使用 C# 比较受密码保护的 Word 文档
- 使用 C# 比较 Word 文档中的书签
用于比较 DOCX 文件的 C# API
为了比较两个或多个 DOCX 文件,我将使用 GroupDocs.Comparison for .NET API。它比较两个或多个文档,并找出文档内容中单词、段落和字符的变化。因此,它会生成一个比较文档,突出显示差异并列出差异摘要。它还使您能够检测相似文档格式之间文本样式的变化和差异。 API 支持比较所有行业标准文档格式,例如 PDF、HTML、Word、Excel、PowerPoint、Outlook 电子邮件、Visio 图表、OpenDocument、AutoCAD 和图像。
您可以下载 API 的 DLL 或使用 NuGet 安装它。
Install-Package GroupDocs.Comparison
使用 C# 比较两个或多个 Word 文档
您可以按照下面给出的简单步骤以编程方式比较两个或多个 Word 文档:
以下代码示例展示了如何比较两个或多个 Word 文档并使用 C# 突出显示差异。
// 初始化比较器
Comparer comparer = new Comparer("C:\\Files\\source.docx");
// 添加目标文件进行比较
comparer.Add("C:\\Files\\target.docx");
// 比较并保存差异
comparer.Compare("C:\\Files\\result.docx");
生成的文档还在文档末尾包含一个摘要页面,该页面显示比较中发现的所有更改的摘要。
Comparer 类是使您能够控制和执行比较过程的主类。它提供了几种方法来比较两个或多个文档。此类的 Add() 方法,将文件添加到比较过程中。您可以使用 Add() 方法轻松地将多个文件添加到比较中,如下所示:
comparer.Add("target1.docx");
comparer.Add("target2.docx");
comparer.Add("target3.docx");
Comparer 类的 Compare() 方法比较源文档和目标文档。此方法突出显示差异并将结果保存到作为输入参数提供的文件路径中。
在 C# 中使用 Stream 比较 Word 文档
您可以按照以下步骤使用 FileStream 比较两个或多个 Word 文档:
- 读取 Stream 对象中的源文件
- 在另一个 Stream 对象中读取目标文件
- 使用源 Stream 对象创建 Comparer 类的实例
- 使用目标 Stream 对象调用 Add() 方法以添加到比较中
- 使用输出文件路径调用 Compare() 方法
以下代码示例展示了如何在 C# 中使用 FileStream 比较 Word 文档。
// 读取源文件和目标文件
using (Stream sourceStream = File.OpenRead("C:\\Files\\source.docx"))
using (Stream targetStream = File.OpenRead("C:\\Files\\target.docx"))
{
// 初始化比较器
using (Comparer comparer = new Comparer(sourceStream))
{
// 添加目标文件流进行比较
comparer.Add(targetStream);
// 比较并保存差异
comparer.Compare(File.Create("C:\\Files\\result.docx"));
}
}
使用 C# 获取更改的文本
您可以按照下面给出的简单步骤以编程方式获取在比较 Word 文档中发现的更改的文本:
- 使用源 DOCX 文件路径创建 Comparer 类的实例
- 使用目标 DOCX 文件调用 Add() 方法以添加到比较中
- 重复上述步骤添加更多文件进行比较
- 调用 Compare() 方法
- 调用GetChanges()方法获取变更详情
- 显示更改
以下代码示例显示了如何使用 C# 获取更改的文本。
// 初始化比较器
Comparer 相比r = new Comparer("C:\\Files\\source.docx");
// 添加目标文件进行比较
相比r.Add("C:\\Files\\target.docx");
// 相比
相比r.Compare();
// 获取更改
ChangeInfo[] changes = 相比r.GetChanges();
Console.WriteLine("Count of changes: " + changes.Length);
// 显示更改
foreach (ChangeInfo change in changes)
{
Console.WriteLine("Change Type: " + change.Type + ", Text: " + change.Text);
}
Count of changes: 10
Change Type: Inserted, Text:
Change Type: Inserted, Text: Company ‼ HYPERLINK "http://www.aspose.com/" ¶Aspose Pty Ltd§ Division GroupDocs
Change Type: Inserted, Text:
Change Type: Inserted, Text: Cool
Change Type: Deleted, Text: test
Change Type: Inserted, Text:
Change Type: Inserted, Text: signatures
Change Type: Inserted, Text:
Change Type: Deleted, Text: Customers
Change Type: Deleted, Text: GroupDocs is used by companies of all sizes across the globe, from large multinational firms to small freelance businesses. They come to us because they have a need for a simple, one-stop-shop, document management solution.
您可以通过调用 Comparer 类的 GetChanges() 方法来获取源文件和目标文件之间的更改列表。它返回 ChangeInfo 对象的列表。 ChangeInfo 类表示有关更改的信息,并提供各种属性来获取更改的详细信息,例如 Text、Type 等。
使用 C# 比较文档属性
您可以按照以下步骤以编程方式比较 Word 文档的内置、自定义属性和可变属性:
- 使用源 DOCX 文件路径创建 Comparer 类的实例
- 使用目标 DOCX 文件调用 Add() 方法以添加到比较中
- 重复上述步骤添加更多文件进行比较
- 创建 CompareOptions 的实例
- 将 CompareVariableProperty 设置为 true
- 将 CompareDocumentProperty 设置为 true
- 使用输出文件路径和 CompareOptions 调用 Compare() 方法
以下代码示例展示了如何使用 C# 比较文档属性。
// 初始化比较器
Comparer 相比r = new Comparer("C:\\Files\\source.docx");
// 添加目标文件进行比较
相比r.Add("C:\\Files\\target.docx");
// 定义比较选项
CompareOptions options = new CompareOptions();
options.CompareVariableProperty = true; // activate the comparison of variable properties
options.CompareDocumentProperty = true; // activate the comparison of built and custom properties
// 相比
相比r.Compare("C:\\Files\\result.docx", options);
您可以通过应用各种比较选项来增强比较过程。为此,CompareOptions 类允许设置各种比较选项以实现特定结果。该类的 CompareDocumentProperty 使您可以打开 Word 格式的内置和自定义属性的比较。 CompareVariableProperty 允许打开 Word 格式的变量属性的比较。
使用 C# 比较受密码保护的 Word 文档
您可以按照以下步骤以编程方式比较两个或多个受密码保护的 Word 文档:
- 创建 LoadOptions 类的实例
- 提供源文件的密码
- 使用源 DOCX 文件路径和 LoadOptions 创建 Comparer 类的实例
- 使用目标 DOCX 文件路径和带密码的 LoadOptions 实例调用 Add() 方法
- 重复上述步骤添加更多文件进行比较
- 使用输出文件路径调用 Compare() 方法
以下代码示例演示如何使用 C# 比较受密码保护的 Word 文档。
// 定义源文件的加载选项
LoadOptions sourceLoadOptions = new LoadOptions() { Password = "1234" };
// 初始化比较器
Comparer 相比r = new Comparer("C:\\Files\\source.docx", sourceLoadOptions);
// 添加目标文件进行比较
相比r.Add("C:\\Files\\target.docx", new LoadOptions() { Password = "5678" });
// 相比
相比r.Compare("C:\\Files\\result.docx");
LoadOptions 类使您能够在加载文档时指定其他选项。它提供了以下属性来指定:
- FontDirectories — 要加载的字体目录列表。
- LoadText — 表示传递的字符串是比较文本,而不是文件路径(仅用于文本比较)。
- 密码 — 文档的密码。
使用 C# 比较 Word 文档中的书签
您可以按照以下步骤以编程方式比较 Word 文档中可用的书签:
- 使用源 DOCX 文件路径创建 Comparer 类的实例
- 使用目标 DOCX 文件调用 Add() 方法以添加到比较中
- 重复上述步骤添加更多文件进行比较
- 创建 CompareOptions 的实例
- 将 CompareBookmarks 设置为 true
- 使用输出文件路径和 CompareOptions 调用 Compare() 方法
以下代码示例演示如何使用 C# 比较 Word 文档中的书签。
// 初始化比较器
Comparer 相比r = new Comparer("C:\\Files\\source.docx");
// 添加目标文件进行比较
相比r.Add("C:\\Files\\target.docx");
// 定义比较选项
CompareOptions 相比Options = new CompareOptions();
相比Options.CompareBookmarks = true; // 相比 bookmarks
// 相比
相比r.Compare("C:\\Files\\result.docx", 相比Options);
CompareBookmarks 属性允许您比较源文档和目标文档中可用的书签。
获得免费许可证
您可以通过请求 免费的临时许可证 来试用该 API,而不受评估限制。
结论
在本文中,您学习了如何使用 C# 比较两个或多个 Word 文档并突出显示差异。您还学习了如何获取突出显示的更改列表。此外,您还学习了如何以编程方式比较 Word 文档中的书签。此外,您还学习了如何使用 C# 比较受密码保护的 Word 文档。您可以使用 文档 了解有关 .NET API 的 GroupDocs.Comparison 的更多信息。如有任何歧义,请随时在 论坛 上与我们联系。