GroupDocs.Comparison para Python 26.5.0 ya está disponible. Esta es la primera versión pública en PyPI de la biblioteca desde 25.12 y presenta un contenedor pure‑Python, incluye AGENTS.md para el descubrimiento de agentes de IA, un nuevo script de consola y una reestructuración extensa de la documentación.
Novedades en esta versión
| Key | Category | Summary |
|---|---|---|
| COMPARISONPYTHON-34 | Funcionalidad | Reconstrucción del contenedor pure‑Python — la API pública ahora es totalmente introspectable desde Python |
| COMPARISONPYTHON-35 | Funcionalidad | Incluye AGENTS.md dentro del wheel para el descubrimiento de agentes de IA |
| COMPARISONPYTHON-36 | Funcionalidad | Nueva página de documentación: Integración de Agentes y LLM (servidor MCP, AGENTS.md incluido, documentación optimizada para LLM) |
| COMPARISONPYTHON-39 | Funcionalidad | Script de consola groupdocs-comparison instalado con el wheel — subcomandos compare, info, list-formats |
| COMPARISONPYTHON-38 | Mejora | Reestructuración de la documentación — developer-guide/comparing-documents/ consolida comparison-basic/ y advanced-usage/comparison/; carga y guardado simplificados |
Cambios en la API pública
El contenedor 26.x se reconstruyó con un nuevo generador que expone una API pública más amplia y limpia algunos nombres de miembros. La mayoría de los scripts existentes escritos contra 25.12 se ejecutan sin cambios en 26.5; los cambios a continuación están agrupados por impacto de compatibilidad.
Clases de nivel superior recién visibles
Estas clases existían en los internos de 25.12 pero estaban ocultas a la introspección de Python por el contenedor compilado con Nuitka. Ahora son importables directamente:
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
Nueva clase Color
StyleSettings.font_color, .highlight_color, .shape_color y .boarder_color ahora aceptan cualquiera de los siguientes valores:
from groupdocs.comparison.options import Color
# Fábrica de colores con nombre
style.font_color = Color.from_name("firebrick")
# Tupla RGB / RGBA
style.font_color = (255, 0, 0)
style.font_color = (255, 0, 0, 128)
# Cadena hexadecimal
style.font_color = "#FF8800"
style.font_color = "#80FF8800" # AARRGGBB
# Entero ARGB empaquetado
style.font_color = 0xFF0000
# O una instancia de Color directamente
style.font_color = Color(178, 34, 34, 255)
Color es importable desde groupdocs.comparison, groupdocs.comparison.options y groupdocs.pydrawing — los tres caminos resuelven a la misma clase.
PreviewOptions basado en callable
El constructor de PreviewOptions acepta un callable de Python para el delegado CreatePageStream. La firma del callback es (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 # el puente ya ha vaciado/cerrado el 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) (un solo argumento, sin callback de liberación) también es válido.
Rectangle tipado a partir de propiedades 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 — '…'
La corrección es a nivel de producto — se aplica a cada propiedad tipada en todos los productos (Point, Size, etc., no solo Rectangle).
Parámetros con nombre en los constructores de opciones
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)
El patrón de setters sigue funcionando (opts = ApplyChangeOptions(); opts.changes = changes). Los kwargs desconocidos generan TypeError.
Nuevos métodos con sufijo de sobrecarga
Se ha añadido un conjunto de métodos con sufijo de sobrecarga a la superficie pública para que cada sobrecarga de .NET sea invocable desde Python mediante un nombre explícito y no ambiguo. Ejemplos:
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
Disponible para los llamadores que prefieran no usar la sintaxis del gestor de contexto with. El patrón recomendado sigue siendo:
with Comparer("source.docx") as comparer:
comparer.add("target.docx")
comparer.compare("result.docx")
Casing de enums
Todos los enums usan la convención UPPERCASE de Python. Enums comunes:
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
Si estabas consultando la documentación de 25.12 que mostraba valores estilo .Accept/.Reject, actualízalos a la forma en mayúsculas.
Ejemplo de código
A continuación se muestra un ejemplo mínimo que demuestra la importación de las clases de nivel superior recién visibles y la realización de una comparación sencilla:
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}")
Cómo obtener la actualización
PyPI
pip install groupdocs-comparison-net==26.5.0
El wheel está publicado en PyPI público: https://pypi.org/project/groupdocs-comparison-net/
Descarga directa
No se proporcionan enlaces de descarga directa; obtén el paquete a través de PyPI o del sitio web de GroupDocs.
Recursos
- Página del proyecto en PyPI: https://pypi.org/project/groupdocs-comparison-net/
- Documentación de Integración de Agentes y LLM: https://docs.groupdocs.com/comparison/python-net/agents-and-llm-integration/
- Repositorio de ejemplos: https://github.com/groupdocs-comparison/GroupDocs.Comparison-for-Python-via-.NET
- Foro de reporte de incidencias: https://forum.groupdocs.com/c/comparison/
- Helpdesk de Soporte Pago: https://helpdesk.groupdocs.com/