Мы рады объявить о выпуске GroupDocs.Comparison for .NET 26.5, доступном с мая 2026 года.
Версия GroupDocs.Comparison 26.5 предоставляет улучшения точности рендеринга PDF, повышенную читаемость сравнения CSV и электронных таблиц, новые возможности API для работы с ревизиями и метаданными изменений в таблицах, а также обновлённую модель упаковки NuGet с поддержкой нескольких целевых платформ.

Исправления и улучшения

  • [Feature] Пакет NuGet с поддержкой нескольких платформ и раздельные пакеты по TFM. (COMPARISONNET-4770)
  • [Enhancement] Сравнение PDF: повышение точности рендеринга абзацев в режиме Inline. (COMPARISONNET-4751)
  • [Enhancement] Улучшение результатов сравнения PDF‑документов с таблицами. (COMPARISONNET-4763)
  • [Bug] Исправление ArgumentOutOfRangeException при сравнении PDF с оформленными таблицами. (COMPARISONNET-4762)
  • [Feature] Поддержка необязательного освобождения переданного потока в RevisionHandler. (COMPARISONNET-4773)
  • [Enhancement] Повышение читаемости результатов сравнения CSV с помощью текстовых маркеров. (COMPARISONNET-4769)
  • [Feature] Расширение ChangeInfo свойствами таблицы. (COMPARISONNET-4767)
  • [Bug] Метод Compare бросает исключение при выводе HTML. (COMPARISONNET-4764)

Основные возможности

Пакет NuGet с поддержкой нескольких платформ и раздельные пакеты по TFM

GroupDocs.Comparison перешёл на более продвинутую модель доставки пакетов NuGet. Основной пакет теперь ориентирован на net462;net6.0;net8.0;net10.0, заменяя прежние цели net462;netstandard2.1.

Кроме того, чтобы уменьшить размер загрузки, рядом с основным пакетом публикуются отдельные пакеты для каждой платформы. При установке платформенно‑специфичного пакета загружаются только бинарные файлы, соответствующие целевой платформе пользователя — лишние сборки не включаются.

Пакет Целевая платформа
GroupDocs.Comparison net462;net6.0;net8.0;net10.0 (все платформы)
GroupDocs.Comparison.net462 .NET Framework 4.6.2
GroupDocs.Comparison.net6 .NET 6.0
GroupDocs.Comparison.net8 .NET 8.0
GroupDocs.Comparison.net10 .NET 10.0

Примечание: .NET Standard 2.1 больше не поддерживается как отдельная цель. Проекты, ранее использовавшие netstandard2.1, должны перейти на одну из поддерживаемых выше TFMs.

Поддержка необязательного освобождения переданного потока в RevisionHandler

RevisionHandler теперь принимает параметр leaveOpen, который управляет тем, будет ли базовый поток освобождён при освобождении обработчика. Если leaveOpen установлен в true, поток остаётся открытым после освобождения RevisionHandler, позволяя вызывающему коду продолжать его использовать. Это удобно, когда жизненный цикл потока управляется извне.

using FileStream revisionFileStream = new FileStream("source.docx", FileMode.Open, FileAccess.ReadWrite);

using (RevisionHandler revisionHandler = new RevisionHandler(revisionFileStream, leaveOpen: true))
{
    List<RevisionInfo> revisionList = revisionHandler.GetRevisions();

    foreach (var rev in revisionList)
    {
        if (rev.Type == RevisionType.Deletion)
            rev.Action = RevisionAction.Accept;
    }

    ApplyRevisionOptions revisionChanges = new ApplyRevisionOptions { Changes = revisionList };
    revisionHandler.ApplyRevisionChanges(resultPath, revisionChanges);
}

Расширение ChangeInfo свойствами таблицы

К ChangeInfo добавлены три новых свойства, раскрывающих метаданные, специфичные для электронных таблиц, для каждого обнаруженного изменения. Эти свойства заполняются при сравнении файлов Excel (.xlsx) и CSV (.csv) и позволяют точно определить местоположение изменения в сетке таблицы:

  • Row — нулевой индекс строки изменённой ячейки.
  • Column — нулевой индекс столбца изменённой ячейки.
  • ColumnHeader — текст заголовка столбца, содержащего изменённую ячейку (если доступен).

Ниже показан пример сравнения двух CSV‑файлов и сериализации списка изменений — включая новые свойства таблицы — в JSON:

string source = "source.csv";
string target = "target.csv";
string outFilePathJson = "result.json";

using (var comparer = new Comparer(source))
{
    comparer.Add(target);
    var doc = comparer.Compare();
    var changes = doc.Changes;

    var json = changes.Select(c => new
    {
        id = c.Id,
        type = c.Type.ToString(),
        componentType = c.ComponentType,
        row = c.Row,
        column = c.Column,
        columnHeader = c.ColumnHeader,
        sourceText = c.SourceText,
        targetText = c.TargetText,
        text = c.Text
    });

    File.WriteAllText(outFilePathJson,
        JsonSerializer.Serialize(json, new JsonSerializerOptions { WriteIndented = true }));
}

Улучшения

Повышение читаемости результатов сравнения CSV с помощью текстовых маркеров

Вывод сравнения CSV теперь использует встроенные текстовые маркеры, позволяющие сразу увидеть вставленное и удалённое содержимое без необходимости просматривать их рядом:

  • Вставленный текст заключён в круглые скобки — например, (new value)
  • Удалённый текст заключён в квадратные скобки — например, [old value]

Как получить обновление

Получить последнюю версию можно через NuGet или загрузив её напрямую с сайта GroupDocs.

NuGet

GroupDocs.Comparison for .NET 26.5

Прямая загрузка

Скачайте сборки для .NET и .NET Framework со страницы GroupDocs.Comparison for .NET 26.5.

Узнать больше