GroupDocs.Comparison for Python 26.5.0이 이제 제공됩니다. 이번 릴리스는 25.12 이후 최초의 public‑PyPI 배포이며, 순수 Python 래퍼, AI‑assistant 탐색을 위한 AGENTS.md 번들, 새로운 콘솔 스크립트, 그리고 문서 구조 전면 재구성을 포함합니다.

이번 릴리스의 주요 내용

카테고리 요약
COMPARISONPYTHON-34 Feature 순수 Python 래퍼 재구축 — public API가 이제 Python에서 완전히 introspectable하게 되었습니다.
COMPARISONPYTHON-35 Feature AI‑agent 탐색을 위해 AGENTS.md를 wheel 내부에 포함합니다.
COMPARISONPYTHON-36 Feature 새로운 문서 페이지: Agents and LLM Integration (MCP 서버, 번들된 AGENTS.md, LLM‑최적화 문서)
COMPARISONPYTHON-39 Feature 콘솔 스크립트 groupdocs-comparison이 wheel과 함께 설치됩니다 — compare, info, list-formats 서브커맨드 제공
COMPARISONPYTHON-38 Enhancement 문서 구조 재정비 — developer-guide/comparing-documents/comparison-basic/advanced-usage/comparison/을 통합; 로드·저장 플랫화

Public API 변경 사항

새롭게 노출된 최상위 클래스

이 클래스들은 25.12 내부에 존재했지만 Nuitka‑컴파일된 래퍼 때문에 Python introspection에서 숨겨져 있었습니다. 이제 직접 import할 수 있습니다:

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 정수값
style.font_color = 0xFF0000

# 혹은 Color 인스턴스 직접 전달
style.font_color = Color(178, 34, 34, 255)

Colorgroupdocs.comparison, groupdocs.comparison.options, groupdocs.pydrawing 세 경로 모두에서 import 가능하며, 세 경로는 동일한 클래스를 가리킵니다.

Callable‑기반 PreviewOptions

PreviewOptions 생성자는 CreatePageStream 대리자를 위한 Python callable을 받습니다. 콜백 시그니처는 (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  # 브리지에서 이미 스트림을 flush/close 했음

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)와 같이 단일 인자만 전달해도 (release 콜백 없이) 유효합니다.

좌표 속성에서 타입이 지정된 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 등)에서 동일하게 동작합니다.

옵션 생성자에서 속성‑이름 kwargs 지원

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)

setter 패턴(opts = ApplyChangeOptions(); opts.changes = changes)도 여전히 동작합니다. 알 수 없는 kwargs는 TypeError를 발생시킵니다.

새 overload‑suffix 메서드

.NET overload마다 Python에서 명시적이고 모호하지 않은 이름으로 호출할 수 있도록 overload‑suffix 메서드가 추가되었습니다. 예시:

  • 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 컨텍스트 매니저 대신 직접 dispose()를 호출하고 싶은 경우 사용할 수 있습니다. 권장 패턴은 여전히 다음과 같습니다:

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

Enum 표기법

모든 enum은 UPPERCASE Python 관례를 따릅니다. 주요 enum 예시:

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 형태를 보셨다면, 대문자 형태로 업데이트하십시오.

코드 예제

아래는 새롭게 노출된 최상위 클래스를 import하고 간단한 비교를 수행하는 최소 예제입니다:

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

wheel은 공개 PyPI에 배포됩니다: https://pypi.org/project/groupdocs-comparison-net/

직접 다운로드

직접 다운로드 링크는 제공되지 않으며, PyPI 또는 GroupDocs 웹사이트를 통해 패키지를 받으시기 바랍니다.

리소스