Ми раді оголосити про випуск 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 | Порівняння електронних таблиць займає секунди замість хвилин; швидший diff тексту у всіх форматах | Виправлення |
| 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 | Оновлення |
Зміни в поведінці, які слід перевірити перед оновленням
- Нова залежність. У опублікованому POM оголошено нову залежність, Aspose.OCR for Java, яка використовується лише для OCR‑порівняння. Вона додає ONNX Runtime з нативними бібліотеками. Якщо ви не використовуєте OCR, її можна виключити — інші типи порівняння працюватимуть без неї (див. Як отримати оновлення).
- Зміни в електронних таблицях. При вставці або видаленні рядків порівняння електронних таблиць повідомляє інші — і, зазвичай, значно менше — зміни, оскільки рядки тепер зіставляються за вмістом.
- PDF‑макет. PDF‑результати розташовуються інакше: кожен компонент залишається там, де був на вихідній сторінці.
- Порядок замін. У текстових та вбудованих PDF‑результатах замінене слово або фраза тепер спочатку показує старе, потім нове.
- Режим оцінки. У режимі оцінки порівнюються лише перші 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");
}
}
Що ви можете налаштувати:
- Режим відображення.
SIDE_BY_SIDE(за замовчуванням) показує два зображення поруч, а змінені слова обведені.TEXTпоказує лише розпізнаний текст із позначеними в ньому змінами. - Деталі змін. Кожна зміна представлена об’єктом
OcrChangeInfoз коробками, які вона охоплює на обох зображеннях (getSourceBoxes(),getTargetBoxes()) та рівнем впевненості розпізнавання (getConfidence()). У режиміTEXTкоробки порожні. - Мова.
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 секунд.
Алгоритм diff слів, що стоїть за кожним порівнянням, був переписаний і повертає той самий результат, лише значно швидше — тому виграють також порівняння 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:
- кожен компонент результату стоїть там, де був на вихідній сторінці; зображення розташовуються за своїми координатами, а векторна графіка сторінки переноситься;
- таблиця малює свою сітку, а текст кожної клітинки переноситься на власному краю, включаючи об’єднані клітинки;
- рядки групуються в абзаци за відстанню між базовими лініями, а поля сторінки беруться з самої сторінки;
- сторінки, які однакові в обох документах, можуть бути знайдені в будь‑якому місці документа, а не лише на початку, і не порівнюються повторно.
Результати виглядають інакше, ніж у попередніх версіях. Видалений вміст малюється там, де він був на вихідній сторінці; якщо в цій позиції у цільовому документі є інший вміст, вони можуть накладатися один на одного.
Невеликі виправлення
- Замінені фрази. Заміну кількох слів малювали по одній парі, тому «Richard McClintock», що стало «Vasily Pupkin», читалося як «Vasily Richard Pupkin McClintock». Тепер вбудований результат показує спочатку стару фразу, потім нову.
- Рядки, що стали трохи довшими. У вбудованому результаті рядок, який став на одне слово довшим, більше не переносить останнє слово на окремий рядок.
- Сітки таблиць. Межа таблиці, колір якої не вдалося визначити, більше не малюється чорним над власними межами таблиці.
- Сторінки, намальовані через форми. Сторінки, які малювали все через форми (наприклад, електронна таблиця, збережена як PDF), раніше вважалися незмінними. Тепер форми також порівнюються, і їх зміни повідомляються.
- Порожні рядки. Рядки, що містять лише пробіли, більше не позначаються як зміни.
- Зміст. Номер сторінки зміненого рядка змісту залишається у своєму рядку.
Інші виправлення
Текст через розриви рядків
Редагування, яке подовжує або скорочує рядок текстового файлу, пересуває слова через розриви рядків після нього. При порівнянні рядок за рядком ці слова позначалися як видалені з одного рядка і вставлені в наступний. Тепер рядки об’єднуються, що дає менше змін, порівнюються як один блок і розташовуються назад у рядках цільового файлу. Заміну повідомляють спочатку стару, потім нову, а 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.