Введение
Независимо от того, работаете ли вы с договорами, внутренними политиками, техническими спецификациями или маркетинговыми материалами, ситуация одинаковая: вы быстро накапливаете несколько версий .docx и в какой‑то момент нужно увидеть, что именно изменилось между ними. Встроенный диалог Compare в Word подходит для случайной ручной проверки, но не особо помогает, когда сравнение становится частью регулярного процесса или должно быть автоматизировано на стороне сервера.
GroupDocs.Comparison for .NET позволяет выполнять сравнение из кода и получать результат в формате, предпочтительном для ваших рецензентов. Библиотека поддерживает два режима вывода для Word‑документов:
- Revision mode — различия записываются как разметка Word revision (track‑changes). Рецензенты открывают файл, видят знакомые элементы управления Review → Accept / Reject и просматривают изменения по одному.
- Highlight mode — вставленный, удалённый и изменённый текст отображается цветными выделениями непосредственно в теле документа, поэтому различия видны с первого взгляда во время чтения финального текста.
В этой статье мы пройдем оба подхода с работающими примерами на C#, изучим класс WordCompareOptions и его свойства, а также обсудим, когда каждый режим имеет больше смысла.
Предварительные требования
- .NET 6.0 или новее.
- GroupDocs.Comparison for .NET — install via NuGet:
dotnet add package GroupDocs.Comparison
- Файл лицензии (
GroupDocs.Comparison.lic). Без него библиотека работает в режиме оценки с водяными знаками и ограничениями по размеру. Вы можете запросить temporary license для тестирования. - Два Word‑файла для сравнения — мы будем называть их
source.docxиtarget.docx. Пример содержимого:
source.docx |
target.docx |
|---|
Метод 1: Сравнение с отслеживанием изменений
When to use: рецензентам необходимо принимать или отклонять каждое изменение по отдельности в 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);
}
Полученный документ в revision (track changes) mode:
Что происходит «под капотом»:
ComparisonDisplayMode.Revisionsсообщает движку генерировать нативную разметку Word track‑changes.DetectStyleChanges = trueзаставляет сравнение учитывать различия форматирования (жирный, размер шрифта, цвет) вместе с текстовыми правками.- Файл‑результат открывается в Microsoft Word с готовой панелью Review — каждая вставка, удаление и изменение стиля перечислены и могут быть приняты или отклонены.
Поскольку режим исправления не требует повторного рендеринга содержимого документа — он просто добавляет метаданные исправлений — он, как правило, быстрее из двух режимов.
Метод 2: Сравнение в режиме выделения
When to use: заинтересованные стороны хотят чистый документ, который ясно показывает, что изменилось, но им не нужно обрабатывать каждое отдельное исправление. Типичный сценарий — менеджер, открывающий последнюю версию в 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);
}
Полученный документ в highlight mode:
Что происходит «под капотом»:
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[]
}
Это полезно, когда необходимо последующая обработка изменений в вашем собственном процессе — например, построить пользовательский 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 со страницы официальных релизов. Для неограниченного тестирования запросите temporary license — без необходимости указания кредитной карты.
Часто задаваемые вопросы
Q: Нужно ли устанавливать Microsoft Word或 Office на сервер?
A: Нет. GroupDocs.Comparison — автономная .NET‑библиотека; она самостоятельно читает и записывает DOCX‑файлы.
Q: Могу ли я сравнивать документы в других форматах, кроме Word?
A: Да — библиотека поддерживает PDF, таблицы Excel, презентации, обычные текстовые файлы и многое другое. Полный список находится в documentation.
Q: Что происходит, если не установить лицензию?
A: Библиотека работает в режиме оценки. Выходные документы будут содержать водяной знак и обрабатываться только первые несколько страниц. temporary license снимает эти ограничения для тестирования.
Q: Могу ли я настроить цвета выделения?
A: Цвета по умолчанию подходят для большинства случаев. Для продвинутого управления стилями смотрите свойство StyleSettings в CompareOptions.
Заключение
GroupDocs.Comparison for .NET предоставляет два удобных способа сравнения Word‑документов из кода. Режим исправления напрямую интегрируется в рабочий процесс рецензирования, уже используемый вашей командой; режим выделения дает мгновённое визуальное резюме для людей, которым просто нужно увидеть изменения. Класс WordCompareOptions позволяет точно настроить вывод — от обнаружения стилей и указания автора до сравнения закладок и свойств документа.
Выберите режим, соответствующий вашему сценарию, либо сгенерируйте оба и дайте каждой аудитории возможность выбрать предпочтительный вид.