GroupDocs.Comparison for Python 26.5.0 теперь доступен. Это первый публичный релиз библиотеки в PyPI после 25.12 и он вводит чисто‑Python обёртку, включённый AGENTS.md для обнаружения AI‑ассистентов, новый консольный скрипт и масштабную реструктуризацию документации.

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

Ключ Категория Описание
COMPARISONPYTHON-34 Функция Перестройка чисто‑Python обёртки — публичный API теперь полностью интроспектируем из Python
COMPARISONPYTHON-35 Функция Включён AGENTS.md в wheel для обнаружения AI‑агентов
COMPARISONPYTHON-36 Функция Новая страница документации: Agents and LLM Integration (MCP server, bundled AGENTS.md, LLM‑optimized docs)
COMPARISONPYTHON-39 Функция Консольный скрипт groupdocs-comparison, установленный вместе с wheel — подкоманды compare, info, list-formats
COMPARISONPYTHON-38 Улучшение Реструктуризация документации — developer-guide/comparing-documents/ объединяет comparison-basic/ и advanced-usage/comparison/; загрузка и сохранение упрощены

Изменения публичного API

Обёртка 26.x была перестроена с новым генератором, который раскрывает более широкий публичный API и упрощает несколько имён членов. Большинство существующих скриптов, написанных под 25.12, работают без изменений на 26.5; изменения ниже сгруппированы по уровню совместимости.

Ново‑видимые классы верхнего уровня

Эти классы существовали во внутренних модулях 25.12, но были скрыты от интроспекции Python из‑за Nuitka‑скомпилированной обёртки. Теперь они импортируются напрямую:

from groupdocs.comparison.license import License, Metered
from groupdocs.comparison.options import (
    Color, PdfCompareOptions, WordCompareOptions, CalculateCoordinatesModeEnumeration,
    ChangeType, ComparisonDisplayMode, DetalisationLevel, FolderComparisonExtension,
    ImagesInheritance, MetadataType, PagesSetup, PaperSize, PasswordSaveOption,
    PreviewFormats, PreviewResolution,
)
from groupdocs.comparison.result import ComparisonAction, FileType, Rectangle

Новый класс Color

StyleSettings.font_color, .highlight_color, .shape_color и .boarder_color теперь принимают любые из следующих вариантов:

from groupdocs.comparison.options import Color

# Фабрика именованных цветов
style.font_color = Color.from_name("firebrick")

# Кортеж RGB / RGBA
style.font_color = (255, 0, 0)
style.font_color = (255, 0, 0, 128)

# Шестнадцатеричная строка
style.font_color = "#FF8800"
style.font_color = "#80FF8800"  # AARRGGBB

# Упакованный ARGB‑int
style.font_color = 0xFF0000

# Или непосредственно экземпляр Color
style.font_color = Color(178, 34, 34, 255)

Color импортируется из groupdocs.comparison, groupdocs.comparison.options и groupdocs.pydrawing — все три пути указывают на один и тот же класс.

PreviewOptions на основе вызываемого объекта

Конструктор PreviewOptions принимает вызываемый объект Python для делегата CreatePageStream. Сигнатура колбэка: (page_number) -> writable_stream:

from groupdocs.comparison.options import PreviewOptions, PreviewFormats

def create_page_stream(page_number):
    return open(f"page-{page_number}.png", "wb")

def release_page_stream(page_number):
    pass  # мост уже сбросил/закрыл поток

with Comparer("source.docx") as comparer:
    preview = PreviewOptions(create_page_stream, release_page_stream)
    preview.preview_format = PreviewFormats.PNG
    preview.page_numbers = [1, 2, 3]
    comparer.source.generate_preview(preview)

PreviewOptions(create_page_stream) (один аргумент, без колбэка освобождения) также допустим.

Типизированный Rectangle из координатных свойств

options = CompareOptions(calculate_coordinates=True)
with Comparer("source.docx") as comparer:
    comparer.add("target.docx")
    comparer.compare(options)
    for change in comparer.get_changes():
        b = change.box
        print(f"({b.x:.1f}, {b.y:.1f}) {b.width:.1f}x{b.height:.1f}")
# (488.96, 223.86) 71.09x36.80 — '…'

Исправление распространяется на весь продукт — применяется ко всем типовым свойствам во всех продуктах (Point, Size и т.д., а не только к Rectangle).

Параметры‑ключевые слова с именами свойств в конструкторах опций

opts = ApplyChangeOptions(changes=changes, save_original_state=True)
save = SaveOptions(password="secret")
load = LoadOptions(password="open-sesame")
comp = CompareOptions(detect_style_changes=True, sensitivity_of_comparison=85)

Шаблон сеттера по‑прежнему работает (opts = ApplyChangeOptions(); opts.changes = changes). Неизвестные kwargs вызывают TypeError.

Новые методы с суффиксом перегрузки

Набор методов с суффиксом перегрузки добавлен в публичную поверхность, чтобы каждый .NET‑перегруз был вызываем из Python под однозначным именем. Примеры:

  • Comparer.add_file(path), add_stream(stream), add_streams(streams), add_string(text)
  • Comparer.apply_changes_file(path, options), apply_changes_stream(stream, options), …
  • Comparer.compare_file(...), compare_stream(...), compare_streams(...), compare_string(...), compare_compare_options(...), compare_save_options(...)
  • Comparer.compare_directory_file(...), compare_directory_string(...)
  • Comparer.get_changes_change_type(...), get_changes_get_change_options(...)
  • License.set_license_file(...), set_license_stream(...), set_license_streams(...), set_license_string(...)
  • Metered.set_metered_key_file(...), set_metered_key_string(...)
  • Document.generate_preview_preview_options(...)
  • localization.SupportedLocales.is_locale_supported_culture_info(...), is_locale_supported_file(...), is_locale_supported_string(...)

Явный Comparer.dispose()

Доступен для вызывающих, которые предпочитают не использовать контекстный менеджер with. Рекомендуемый паттерн остаётся:

with Comparer("source.docx") as comparer:
    comparer.add("target.docx")
    comparer.compare("result.docx")

Регистры перечислений

Все перечисления используют ПРАВИЛЬНЫЙ ПИТОНСКИЙ СТИЛЬ ВЕРХНЕГО РЕГИСТРА. Распространённые перечисления:

from groupdocs.comparison.result import ComparisonAction, FileType
from groupdocs.comparison.options import (
    ChangeType, ComparisonDisplayMode, DetalisationLevel,
    FolderComparisonExtension, ImagesInheritance, MetadataType,
    PaperSize, PasswordSaveOption, PreviewFormats, PreviewResolution,
)
from groupdocs.comparison.words.revision import RevisionAction

ComparisonAction.ACCEPT, ComparisonAction.REJECT, ComparisonAction.NONE
RevisionAction.ACCEPT, RevisionAction.REJECT, RevisionAction.NONE
PreviewFormats.PNG, PreviewFormats.JPG
MetadataType.SOURCE, MetadataType.TARGET, MetadataType.FILE_AUTHOR
PasswordSaveOption.USER, PasswordSaveOption.SOURCE, PasswordSaveOption.TARGET

Если вы использовали документацию 25.12, где значения выглядели как .Accept/.Reject, обновите их до верхнего регистра.

Пример кода

Ниже минимальный пример, демонстрирующий импорт ново‑видимых классов верхнего уровня и простое сравнение:

from groupdocs.comparison import Comparer
from groupdocs.comparison.options import CompareOptions

options = CompareOptions(detect_style_changes=True)

with Comparer("source.docx") as comparer:
    comparer.add("target.docx")
    comparer.compare(options)
    for change in comparer.get_changes():
        print(f"Change type: {change.change_type}, Box: {change.box}")

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

PyPI

pip install groupdocs-comparison-net==26.5.0

Колесо опубликовано в публичном PyPI: https://pypi.org/project/groupdocs-comparison-net/

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

Прямые ссылки для скачивания не предоставляются; получайте пакет через PyPI или сайт GroupDocs.

Ресурсы