GroupDocs.Comparison for Python 26.5.0 está agora disponível. Esta é a primeira liberação pública‑PyPI da biblioteca desde 25.12 e introduz um wrapper puro‑Python, o arquivo AGENTS.md incluído para descoberta de assistente de IA, um novo script de console e uma reestruturação extensa da documentação.

Novidades nesta versão

Chave Categoria Resumo
COMPARISONPYTHON-34 Recurso Recompilação do wrapper puro‑Python — a API pública agora é totalmente introspectável a partir do Python
COMPARISONPYTHON-35 Recurso Inclui AGENTS.md dentro do wheel para descoberta de agente de IA
COMPARISONPYTHON-36 Recurso Nova página de documentação: Integração de Agentes e LLM (servidor MCP, AGENTS.md incluído, docs otimizados para LLM)
COMPARISONPYTHON-39 Recurso Script de console groupdocs-comparison instalado com o wheel — subcomandos compare, info, list-formats
COMPARISONPYTHON-38 Aprimoramento Reestruturação da documentação — developer-guide/comparing-documents/ consolida comparison-basic/ e advanced-usage/comparison/; carregamento e salvamento achatados

Alterações na API pública

O wrapper 26.x foi recompilado com um novo gerador que expõe uma API pública mais ampla e limpa alguns nomes de membros. A maioria dos scripts existentes escritos para 25.12 funciona sem alterações em 26.5; as mudanças abaixo estão agrupadas por impacto de compatibilidade.

Classes de nível superior recém‑visíveis

Essas classes existiam nos internos de 25.12, mas estavam ocultas da introspecção Python pelo wrapper compilado com Nuitka. Agora elas podem ser importadas diretamente:

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

Nova classe Color

StyleSettings.font_color, .highlight_color, .shape_color e .boarder_color agora aceitam qualquer um dos seguintes:

from groupdocs.comparison.options import Color

# Fábrica de cores nomeadas
style.font_color = Color.from_name("firebrick")

# Tupla RGB / RGBA
style.font_color = (255, 0, 0)
style.font_color = (255, 0, 0, 128)

# String hexadecimal
style.font_color = "#FF8800"
style.font_color = "#80FF8800"  # AARRGGBB

# Inteiro ARGB compactado
style.font_color = 0xFF0000

# Ou uma instância de Color diretamente
style.font_color = Color(178, 34, 34, 255)

Color pode ser importado de groupdocs.comparison, groupdocs.comparison.options e groupdocs.pydrawing — os três caminhos resolvem para a mesma classe.

PreviewOptions baseado em chamada

O construtor PreviewOptions aceita um callable Python para o delegate CreatePageStream. A assinatura do callback é (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  # a ponte já descarregou/fechou o stream

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) (apenas um argumento, sem callback de liberação) também é válido.

Rectangle tipado a partir de propriedades de coordenadas

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 — '…'

A correção é em todo o produto — aplica‑se a todas as propriedades tipadas em todos os produtos (Point, Size, etc., não apenas Rectangle).

Argumentos nomeados de propriedades nos construtores de opções

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)

O padrão de setter ainda funciona (opts = ApplyChangeOptions(); opts.changes = changes). Argumentos desconhecidos levantam TypeError.

Novos métodos com sufixo de sobrecarga

Um conjunto de métodos com sufixo de sobrecarga foi adicionado à superfície pública para que cada sobrecarga .NET seja chamável a partir do Python por um nome explícito e não ambíguo. Exemplos:

  • 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() explícito

Disponível para quem prefere não usar o gerenciador de contexto with. O padrão recomendado continua sendo:

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

Casing de enum

Todos os enums usam a convenção UPPERCASE do Python. Enums comuns:

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

Se você consultava a documentação de 25.12 que mostrava valores no estilo .Accept/.Reject, atualize‑os para a forma em maiúsculas.

Exemplo de código

Abaixo está um exemplo mínimo que demonstra a importação das classes de nível superior recém‑visíveis e a execução de uma comparação simples:

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}")

Como obter a atualização

PyPI

pip install groupdocs-comparison-net==26.5.0

O wheel está publicado no PyPI público: https://pypi.org/project/groupdocs-comparison-net/

Download direto

Nenhum link de download direto é fornecido; obtenha o pacote via PyPI ou pelo site da GroupDocs.

Recursos