Мы рады объявить о выпуске GroupDocs.Comparison for Java 26.11, доступного с ноября 2026. Основная функция — сравнение изображений на основе OCR: изображения теперь можно сравнивать по распознанному в них тексту, а не по пикселям. Сравнение электронных таблиц претерпело крупное обновление — строки сопоставляются по содержимому, и сравнение больших листов занимает секунды вместо минут. PDF‑результаты теперь формируются из исходной страницы, так же как в GroupDocs.Comparison for .NET, а набор исправлений охватывает сравнение текста, Word, презентаций и предварительного просмотра HTML.

Что нового в этом выпуске

Ключ Краткое описание Категория
COMPARISONNET-4925, COMPARISONNET-4934 Изображения можно сравнивать по распознанному в них тексту (OCR), а не по пикселям Функция
COMPARISONJAVA-1798, COMPARISONNET-4940, COMPARISONNET-4945 Строки электронных таблиц сопоставляются по содержимому: вставленная или удалённая строка больше не помечает все последующие строки как изменённые Исправление
COMPARISONJAVA-1797, COMPARISONNET-4930 Сравнение электронных таблиц занимает секунды вместо минут; более быстрый дифф текста во всех форматах Исправление
COMPARISONJAVA-1796, COMPARISONNET-4946 XLSX‑результат: строки без собственной высоты остаются подогнанными к их содержимому Исправление
COMPARISONNET-4947 XLSX‑результат: неизменённые числа и даты сохраняют свой тип, а не превращаются в текст Исправление
COMPARISONNET-4944 StyleSettings.setHighlightColor заполняет фон изменённых ячеек таблицы Исправление
COMPARISONNET-4927, COMPARISONNET-4928, COMPARISONNET-4923 Текст: слова, перенесённые через разрывы строк, больше не отмечаются как удалённые и вновь вставленные Исправление
COMPARISONNET-4403, COMPARISONNET-4891 PDF‑результаты формируются из исходной страницы: компоненты на своих позициях, ячейки оборачиваются по собственному краю Обновление
COMPARISONNET-4931 Встроенный PDF‑результат показывает заменённую фразу целиком: сначала старые слова, затем новые Исправление
COMPARISONNET-4896 Встроенный PDF‑результат больше не переносит строку, сделанную сравнение немного длиннее, на следующую строку Исправление
COMPARISONNET-4763 PDF‑результат больше не рисует чёрную сетку поверх собственных границ таблицы Исправление
— PDF‑страницы, отрисованные через формы (таблицы, сохранённые как PDF), больше не считаются неизменёнными Исправление
— PDF: строки, состоящие только из пробелов, больше не отмечаются как изменения Исправление
— PDF: оглавление сохраняет номера страниц на своих строках Исправление
COMPARISONNET-4926 Word: столбец или строка таблицы, ставшие пустыми, остаются на месте вместо удаления и повторного вставления Исправление
COMPARISONNET-4880 Презентации: LoadOptions.setSkipExternalResources и setWhitelistedResources теперь применяются Исправление
COMPARISONNET-4935 Предпросмотр HTML: одновременные превью больше не перезаписывают страницы друг друга; запрашиваемые страницы учитываются Исправление
COMPARISONJAVA-1794, COMPARISONJAVA-1795 Обновлены библиотеки Aspose Обновление

Изменения поведения, которые следует проверить перед обновлением

  1. New dependency. Публикуемый POM объявляет новую зависимость, Aspose.OCR for Java, используемую только для сравнения OCR. Она добавляет ONNX Runtime с нативными библиотеками. Если вы не используете OCR, её можно исключить — все остальные сравнения работают без неё (см. Как получить обновление).
  2. Spreadsheet changes. При вставке или удалении строк сравнение электронных таблиц теперь сообщает о другом — и обычно гораздо меньшем — количестве изменений, потому что строки теперь сопоставляются по содержимому.
  3. PDF layout. PDF‑результаты формируются иначе: каждый компонент остаётся там, где он был на исходной странице.
  4. Order of replacements. В текстовых и встроенных PDF‑результатах заменённое слово или фраза теперь выводятся сначала старые, затем новые.
  5. Evaluation mode. В режиме оценки сравниваются только первые 2 страницы PDF, как в GroupDocs.Comparison for .NET.

Новая функция: сравнение изображений по распознанному тексту (OCR)

Изображение теперь можно сравнивать по тексту, который Aspose.OCR считывает из него, а не по пикселям. Это правильный выбор для сканов, фотографий и скриншотов документов, где один и тот же текст никогда не даёт одинаковых пикселей — страница, отсканированная заново с небольшим смещением или в другом качестве, больше не показывает различия повсюду.

try (Comparer comparer = new Comparer("source.png")) {
    comparer.add("target.png");

    OcrOptions ocr = new OcrOptions();
    ocr.setEnabled(true);
    ocr.setDisplayMode(OcrDisplayMode.SIDE_BY_SIDE);  // or TEXT

    CompareOptions options = new CompareOptions();
    options.setOcr(ocr);
    comparer.compare("result.png", options);

    for (ChangeInfo change : comparer.getChanges()) {
        OcrChangeInfo ocrChange = (OcrChangeInfo) change;
        System.out.println(change.getText() + ": confidence " + ocrChange.getConfidence()
                + ", " + ocrChange.getSourceBoxes().length + " box(es) on the source");
    }
}

Что можно настроить:

  • Display mode. SIDE_BY_SIDE (по умолчанию) показывает два изображения рядом с обведёнными изменёнными словами. TEXT показывает только распознанный текст с отмеченными в нём изменениями.
  • Change details. Каждое изменение представлено объектом OcrChangeInfo с областями, которые оно покрывает на обоих изображениях (getSourceBoxes(), getTargetBoxes()) и уровнем уверенности распознавания (getConfidence()). В режиме TEXT области пусты.
  • Language. setLanguage(OcrLanguage) выбирает язык или скрипт; по умолчанию — LATIN. Для других языков требуется модель распознавания, которая загружается при первом использовании. setDisableResourceDownloads(true) и setResourcesPath(String) ограничивают распознавание только моделями, уже находящимися на диске.

Aspose.OCR for Java должен быть в classpath. Это зависимость публикуемого POM, а не часть jar‑файла. Без неё сравнение OCR завершается с сообщением, указывающим на отсутствующую библиотеку.

Сравнение электронных таблиц

Строки сопоставляются по содержимому

Ранее строки сопоставлялись с строкой того же индекса в другой книге. При вставке или удалении строки каждая последующая строка отмечалась как переписанная. Например, книга из шести строк с одной удалённой строкой давала 91 изменение; теперь она даёт 8 — шесть ячеек удалённой строки, отмеченных на месте, и количество строк в сводном листе.

Теперь строки и столбцы выравниваются по содержимому их ячеек. Строки, одинаковые в обоих файлах, сопоставляются напрямую, а только то, что находится между ними, выравнивается. Количество изменений, сообщаемых для таких файлов, отличается от предыдущих версий.

Секунды вместо минут

Сравнение электронных таблиц могло занимать минуты даже для идентичных файлов: два одинаковых листа 200 × 20 занимали 2,5 минуты. Сейчас они выполняются менее чем за секунду (пару секунд для первого сравнения после запуска JVM), а лист 400 × 20 с одной удалённой строкой занимает около 7 секунд.

Дифф текста, лежащий в основе каждого сравнения, был переработан и возвращает тот же результат, что и раньше, только гораздо быстрее — это также ускоряет сравнение Word, PDF и текста. Идентичные строки и столбцы сопоставляются без подсчёта баллов, поэтому два одинаковых листа вовсе не выравниваются.

Высота строк, типы чисел и цвет выделения

  • Строки без собственной высоты теперь подгоняются под своё содержимое в результате, поэтому обёрнутые и ячейки крупного шрифта больше не обрезаются. Строки с явно заданной высотой сохраняют её.
  • Неизменённые числа и даты сохраняют свой тип, а не преобразуются в текст. Формульные ячейки всё ещё записываются со своими вычисленными значениями.
  • StyleSettings.setHighlightColor теперь заполняет фон изменённых ячеек:
StyleSettings deleted = new StyleSettings();
deleted.setHighlightColor(Color.PINK);

CompareOptions options = new CompareOptions();
options.setDeletedItemStyle(deleted);

PDF‑результаты

Макет из исходной страницы

PDF‑движок теперь формирует результаты так же, как GroupDocs.Comparison for .NET:

  • каждый компонент результата находится там, где он был на исходной странице; изображения размещаются по своим координатам, а векторная графика страницы переносится;
  • таблица рисует свою сетку, а текст каждой ячейки оборачивается по собственному краю, включая объединённые ячейки;
  • строки группируются в абзацы по расстоянию между базовыми линиями, а поля страницы берутся из самой страницы;
  • страницы, одинаковые в обоих документах, находятся где угодно в документе, а не только в начале, и повторно не сравниваются.

Результаты выглядят иначе, чем в предыдущих версиях. Удалённый контент отрисовывается там, где он находился на исходной странице; если в целевом документе в том же месте есть другой контент, они могут перекрываться.

Небольшие исправления

  • Replaced phrases. Замена нескольких слов отрисовывалась парами, поэтому «Richard McClintock», ставший «Vasily Pupkin», читалось как «Vasily Richard Pupkin McClintock». Встроенный результат теперь показывает сначала старую фразу, затем новую.
  • Lines made slightly longer. В встроенном результате строка, ставшая на слово длиннее после замены, больше не переносит последнее слово на отдельную строку ниже.
  • Table grids. Граница таблицы, цвет которой не удалось определить, больше не закрашивается чёрным поверх собственных границ источника.
  • Pages drawn through forms. Страницы, отрисованные полностью через формы (как таблица, сохранённая как PDF), ранее считались неизменёнными. Теперь формы тоже сравниваются, и их изменения фиксируются.
  • Blank lines. Строки, содержащие только пробелы, больше не отмечаются как изменения.
  • Tables of contents. Номер страницы изменённой строки оглавления остаётся на своей строке.

Другие исправления

Текст через разрывы строк

Редактирование, удлиняющее или укорачивающее строку текстового файла, перемещает слова через разрывы строк после неё. При построчном сравнении эти слова отмечались как удалённые из одной строки и вставленные в следующую. Теперь строки объединяются, что даёт меньше изменений, сравниваются как один блок и раскладываются обратно по строкам целевого файла. Замена отмечается сначала старой, затем новой, а HTML‑просмотр сравнения текста применяет принятые и отклонённые изменения так же, как и текстовый результат. Сравнение одного файла с несколькими целями всё ещё происходит построчно.

Word: опустевший столбец или строка таблицы

Когда столбец или строка таблицы стали пустыми, они отмечались как удалённые, а пустой — как вставленные, и последующие ячейки сдвигались. Теперь они остаются на месте, а их содержимое отмечается как удалённое.

Презентации: внешние ресурсы

LoadOptions.setSkipExternalResources и setWhitelistedResources, добавленные в 26.10, не влияли на презентации. Теперь они применяются к презентациям так же, как к Word и HTML‑документам, и результирующая презентация никогда не загружает внешние ресурсы. Картинка, не загрузившаяся, сравнивается как пустая картинка.

Предпросмотр HTML

Страницы превью HTML‑документа рендерились в фиксированные имена файлов во временной директории, поэтому два превью одновременно перезаписывали страницы друг друга, а запрошенные номера страниц игнорировались. Теперь страницы рендерятся в памяти, возвращаются только запрошенные, и они отрисовываются на белом фоне вместо прозрачного.

Обновлены библиотеки Aspose

Библиотека Было Сейчас
Aspose.BarCode 25.5 26.6
Aspose.CAD 24.6.1 26.8
Aspose.Cells 26.3 26.9
Aspose.Diagram 25.7 26.9
Aspose.Email 26.1 26.8
Aspose.PDF 26.2 26.8.1
Aspose.PSD 25.10 26.8
Aspose.Slides 26.2 26.9
Aspose.Words 26.3 26.8

Библиотеки упакованы в jar‑файл как и раньше. Aspose.OCR 26.10.0 — новый и поставляется как зависимость в POM.

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

Maven

Добавьте репозиторий GroupDocs и зависимость в ваш pom.xml:

<repositories>
    <repository>
        <id>groupdocs-artifacts-repository</id>
        <name>GroupDocs Artifacts Repository</name>
        <url>https://releases.groupdocs.com/java/repo/</url>
    </repository>
</repositories>

<dependencies>
    <dependency>
        <groupId>com.groupdocs</groupId>
        <artifactId>groupdocs-comparison</artifactId>
        <version>26.11</version>
    </dependency>
</dependencies>

Если вы не используете сравнение OCR, можете исключить Aspose.OCR и его нативные библиотеки:

<dependency>
    <groupId>com.groupdocs</groupId>
    <artifactId>groupdocs-comparison</artifactId>
    <version>26.11</version>
    <exclusions>
        <exclusion>
            <groupId>com.aspose</groupId>
            <artifactId>aspose-ocr</artifactId>
        </exclusion>
    </exclusions>
</dependency>

Прямое скачивание

Скачайте JAR с GroupDocs.Comparison for Java 26.11 download page.

Ресурсы