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
- Página do projeto no PyPI: https://pypi.org/project/groupdocs-comparison-net/
- Documentação de Integração de Agentes e LLM: https://docs.groupdocs.com/comparison/python-net/agents-and-llm-integration/
- Repositório de exemplos: https://github.com/groupdocs-comparison/GroupDocs.Comparison-for-Python-via-.NET
- Fórum de reporte de issues: https://forum.groupdocs.com/c/comparison/
- Helpdesk de Suporte Pago: https://helpdesk.groupdocs.com/