介绍
无论您处理的是合同、内部政策、技术规范还是营销文案,模式都是相同的:您会快速累积多个 .docx 版本,某个时刻需要查看它们之间到底有什么变化。Word 自带的 Compare 对话框适合偶尔手动检查,但在比较成为常规流程或需要在服务器端自动化时帮助不大。
GroupDocs.Comparison for .NET 让您可以在代码中运行比较,并以审阅者喜欢的格式生成结果。该库支持 Word 文档的两种输出模式:
- 修订模式 — 将差异写入 Word 修订(Track Changes)标记。审阅者打开文件,看到熟悉的 审阅 → 接受 / 拒绝 控件,并逐一处理更改。
- 高亮模式 — 插入、删除和修改的文本直接在文档正文中使用颜色高亮显示,阅读最终文本时一眼即可看出差异。
本文将通过可运行的 C# 示例逐步演示这两种方法,探讨 WordCompareOptions 类及其属性,并讨论何时使用哪种模式更合适。
前置条件
开始之前:
- .NET 6.0 或更高版本。
- GroupDocs.Comparison for .NET — 通过 NuGet 安装:
dotnet add package GroupDocs.Comparison
- 一个 许可证文件(
GroupDocs.Comparison.lic)。如果没有许可证,库将以评估模式运行,带有水印和页数限制。您可以请求一个用于测试的 临时许可证。 - 两个待比较的 Word 文件——我们将其称为
source.docx和target.docx。示例内容:
source.docx |
target.docx |
|---|
方法 1:修订(Track Changes)比较
何时使用: 审阅者需要在 Microsoft Word 中使用内置的 审阅 → 接受 / 拒绝 工具逐项接受或拒绝更改——例如在合同谈判或政策审批周期中。
using GroupDocs.Comparison;
using GroupDocs.Comparison.Options;
using (var comparer = new Comparer("source.docx"))
{
comparer.Add("target.docx");
var options = new WordCompareOptions
{
DetectStyleChanges = true,
DisplayMode = WordCompareOptions.ComparisonDisplayMode.Revisions
};
comparer.Compare("result_revision.docx", options);
}
修订(track changes)模式 下的生成文档:
内部工作原理:
ComparisonDisplayMode.Revisions告诉引擎输出原生 Word 修订标记。DetectStyleChanges = true使比较能够捕捉格式差异(粗体、字号、颜色)以及文本编辑。- 输出文件在 Microsoft Word 中打开时会自动显示 审阅 面板——每一次插入、删除和样式微调都会列出,用户可以接受或拒绝。
由于修订模式仅是附加修订元数据,而不需要重新渲染文档内容,它通常是两种模式中速度更快的。
方法 2:高亮模式比较
何时使用: 相关方希望获得一份干净的文档,直观显示更改但不需要逐条处理修订。例如经理打开最新版本的 Word 文档,快速扫描高亮的插入和删除,以了解更新的影响。
using GroupDocs.Comparison;
using GroupDocs.Comparison.Options;
using (var comparer = new Comparer("source.docx"))
{
comparer.Add("target.docx");
var options = new WordCompareOptions
{
DetectStyleChanges = true,
DisplayMode = WordCompareOptions.ComparisonDisplayMode.Highlight
};
comparer.Compare("result_highlighted.docx", options);
}
高亮模式 下的生成文档:
内部工作原理:
ComparisonDisplayMode.Highlight将差异渲染为内联颜色高亮——删除为红色,插入为绿色,样式更改为蓝色(默认颜色,可通过WordCompareOptions/CompareOptions及其关联的StyleSettings调整)。- 文档即可直接阅读或打印,无需额外步骤。
- 文件中不含任何修订元数据。
高亮模式在内部需要对实际文档内容进行修改并应用格式,因此对大型文件来说,性能差异可能相当明显。
探索 WordCompareOptions
上面的两个示例都使用了 WordCompareOptions——它继承自 CompareOptions 的通用设置,并为 Word 文档添加了特有属性。通过该类型您可以控制显示模式 (DisplayMode)、是否检测样式变化 (DetectStyleChanges)、修订作者名称 (RevisionAuthorName)、以及换行、书签等细节。
此外,基类 CompareOptions 还暴露了插入、删除和更改项的样式属性(InsertedItemStyle、DeletedItemStyle、ChangedItemStyle),以便在需要时微调高亮的颜色和格式。
下面是一个仅针对文本进行检查的修订模式配置示例:
var options = new WordCompareOptions
{
DisplayMode = WordCompareOptions.ComparisonDisplayMode.Revisions,
DetectStyleChanges = false,
RevisionAuthorName = "QA Bot",
CompareBookmarks = true
};
编程方式获取更改列表
无论您选择哪种输出模式(修订或高亮),都可以通过通用的 Comparer.GetChanges API 获取结构化的差异列表。该方法适用于 Word 以及所有其他受支持的格式。
using (var comparer = new Comparer("source.docx"))
{
comparer.Add("target.docx");
comparer.Compare("result_revision.docx");
var changes = comparer.GetChanges(); // returns ChangeInfo[]
}
这在您需要在自己的工作流中对更改进行后处理时非常有用——例如生成自定义的 HTML 报告、将差异输入审阅系统,或汇总编辑统计信息。更多细节请参阅官方 API 参考:Comparer.GetChanges。
处理受密码保护的文档
如果文档设置了密码,仍然可以比较:在创建 Comparer 时通过 LoadOptions 传入密码。该方式对 Word、PDF 以及其他受支持格式均适用。
using GroupDocs.Comparison;
using GroupDocs.Comparison.Options;
using (var comparer = new Comparer("source_protected.docx",
new LoadOptions { Password = "secret" }))
{
comparer.Add("target_protected.docx");
var options = new WordCompareOptions
{
DisplayMode = WordCompareOptions.ComparisonDisplayMode.Revisions
};
comparer.Compare("result_protected.docx", options);
}
免费试用
您可以从 官方发布页面 下载 GroupDocs.Comparison for .NET。若想进行无限制测试,可请求一个 临时许可证——无需信用卡。
常见问答
问:服务器上是否需要安装 Microsoft Word 或 Office?
答:不需要。GroupDocs.Comparison 是一个独立的 .NET 库,能够自行读取和写入 DOCX 文件。
问:除了 Word,我还能比较其他格式吗?
答:可以——库支持 PDF、Excel、PowerPoint、纯文本等多种格式。完整列表请参见 文档。
问:如果不设置许可证会怎样?
答:库会以评估模式运行。输出文档会带有水印,仅处理前几页。申请 临时许可证 可在测试期间解除这些限制。
问:我可以自定义高亮颜色吗?
答:默认颜色已满足大多数需求。如需高级样式控制,请查看 CompareOptions 上的 StyleSettings 属性。
结论
GroupDocs.Comparison for .NET 为您提供了两种从代码中对 Word 文档进行差异比较的简洁方案。修订模式直接融入团队已有的审阅工作流;高亮模式则为只需快速了解更改的用户提供即时的视觉摘要。WordCompareOptions 类让您可以细粒度地调节输出——从样式检测、作者标注到书签及文档属性比较。
根据实际场景选择最适合的模式,或同时生成两种结果,让不同受众自行决定使用哪种视图。