Введение
Независимо от того, работаете ли вы с контрактами, внутренними политиками, техническими спецификациями или маркетинговыми материалами, схема одинакова: вы быстро накапливаете несколько версий .docx и в какой‑то момент нужно увидеть, что именно изменилось между ними. Встроенный диалог Compare в Word подходит для случайных ручных проверок, но мало помогает, когда сравнение становится частью регулярного процесса или должно быть автоматизировано на стороне сервера.
GroupDocs.Comparison for .NET позволяет выполнять сравнение из кода и получать результат в том формате, который предпочитают ваши рецензенты. Библиотека поддерживает два режима вывода сравнения для документов Word:
- Режим правок — различия записываются как разметка правок Word (track‑changes). Рецензенты открывают файл, видят привычные элементы управления Review → Accept / Reject и работают с изменениями по одному.
- Режим подсветки — вставленный, удалённый и изменённый текст отображается цветными подсветками непосредственно в теле документа, поэтому различия видны сразу при чтении финального текста.
В этой статье мы пройдем оба подхода с работающими примерами на C#, изучим класс WordCompareOptions и его свойства, а также обсудим, когда каждый из режимов имеет больше смыслa.
Необходимые условия
Перед началом:
- .NET 6.0 или новее.
- GroupDocs.Comparison for .NET — установить через NuGet:
dotnet add package GroupDocs.Comparison
- Файл лицензии (
GroupDocs.Comparison.lic). Без него библиотека работает в режиме оценки с водяными знаками и ограничениями по размеру. Вы можете запросить temporary license для тестирования. - Два Word‑файла для сравнения — назовём их
source.docxиtarget.docx. Пример содержимого:
source.docx |
target.docx |
|---|
Метод 1: Сравнение с отслеживанием правок
Когда использовать: рецензентам нужно принимать или отклонять каждое изменение индивидуально в Microsoft Word, используя встроенные инструменты Review → Accept / Reject — например, при переговоры по контракту или циклах утверждения политик.
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 track‑changes.DetectStyleChanges = trueзаставляет сравнение учитывать различия форматирования (жирный шрифт, размер, цвет) наряду с текстовыми правками.- Выходной файл открывается в Microsoft Word с готовой панелью Review — каждая вставка, удаление и изменение стиля перечислены и могут быть приняты или отклонены.
Поскольку режим правок не требует повторного рендеринга содержимого документа — он просто добавляет метаданные правок — он, как правило, быстрее второго режима.
Метод 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).- Документ готов к чтению или печати без дополнительных шагов.
- В файл не добавляются метаданные track‑changes.
Режим подсветки требует больше внутренних вычислений, потому что необходимо изменять фактическое содержимое документа и применять форматирование. Для больших файлов вы можете заметить значительную разницу в производительности по сравнению с режимом правок.
Исследование 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
};
Получение изменений программно
Независимо от выбранного режима вывода (правки или подсветка), всегда можно получить структурированный список обнаруженных различий через общий API Comparer.GetChanges. Этот метод работает для Word и всех остальных поддерживаемых форматов.
using (var comparer = new Comparer("source.docx"))
{
comparer.Add("target.docx");
comparer.Compare("result_revision.docx");
var changes = comparer.GetChanges(); // returns ChangeInfo[]
}
Это полезно, когда требуется пост‑обработка изменений в собственном workflow — например, построить кастомный HTML‑отчёт, передать различия в систему ревью или собрать статистику по правкам. См. официальную справку API для подробностей: Comparer.GetChanges.
Работа с документами, защищёнными паролем
Если документы защищены паролем, их всё равно можно сравнивать: пароль передаётся через LoadOptions при создании Comparer. Такой же подход работает для 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 со official releases page. Для неограниченного тестирования запросите temporary license — кредитная карта не требуется.
Часто задаваемые вопросы
В: Нужно ли устанавливать Microsoft Word или Office на сервер?
О: Нет. GroupDocs.Comparison — автономная .NET‑библиотека; она читает и записывает DOCX‑файлы самостоятельно.
В: Можно ли сравнивать документы в других форматах, кроме Word?
О: Да — библиотека поддерживает PDF, таблицы Excel, презентации, обычные текстовые файлы и многое другое. Полный список см. в documentation.
В: Что происходит, если я не укажу лицензию?
О: Библиотека работает в режиме оценки. Выходные документы будут содержать водяной знак, а обрабатываться будут только первые несколько страниц. Temporary license снимает эти ограничения для тестирования.
В: Можно ли настроить цвета подсветки?
О: Цвета по умолчанию подходят для большинства сценариев. Для более продвинутой настройки проверьте свойство StyleSettings в CompareOptions.
Заключение
GroupDocs.Comparison for .NET предоставляет два удобных способа сравнения Word‑документов из кода. Режим правок вписывается напрямую в уже существующий процесс рецензирования вашей команды; режим подсветки предоставляет мгновённое визуальное резюме для тех, кто просто хочет увидеть изменения. Класс WordCompareOptions позволяет тонко настраивать вывод — от обнаружения стилей и указания автора до сравнения закладок и свойств документа.
Выберите режим, соответствующий вашему сценарию, либо генерируйте оба и позволяйте каждой аудитории выбрать предпочтительный вид.