GroupDocs.Comparison per Python 26.5.0 è ora disponibile. Questa è la prima release pubblica su PyPI della libreria dal 25.12 e introduce un wrapper pure‑Python, il file AGENTS.md per la scoperta di assistenti AI, un nuovo script console e una ristrutturazione estensiva della documentazione.
Novità di questa versione
| Chiave | Categoria | Riepilogo |
|---|---|---|
| COMPARISONPYTHON-34 | Feature | Ricostruzione del wrapper Pure-Python — l’API pubblica è ora completamente introspectable da Python |
| COMPARISONPYTHON-35 | Feature | Distribuisce AGENTS.md all’interno del wheel per la scoperta di agenti AI |
| COMPARISONPYTHON-36 | Feature | Nuova pagina di documentazione: Integrazione di Agenti e LLM (server MCP, AGENTS.md incluso, documenti ottimizzati per LLM) |
| COMPARISONPYTHON-39 | Feature | Script console groupdocs-comparison installato con il wheel — sotto‑comandi compare, info, list-formats |
| COMPARISONPYTHON-38 | Enhancement | Ristrutturazione della documentazione — developer-guide/comparing-documents/ consolida comparison-basic/ e advanced-usage/comparison/; caricamento e salvataggio semplificati |
Modifiche all’API pubblica
Il wrapper 26.x è stato ricostruito con un nuovo generatore che espone un’API pubblica più ampia e pulisce alcuni nomi di membri. La maggior parte degli script esistenti scritti per 25.12 funzionano inalterati su 26.5; le modifiche di seguito sono raggruppate per impatto di compatibilità.
Classi di livello superiore ora visibili
Queste classi esistevano negli internals di 25.12 ma erano nascoste all’introspezione Python dal wrapper compilato con Nuitka. Ora sono direttamente importabili:
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
Nuova classe Color
StyleSettings.font_color, .highlight_color, .shape_color e .boarder_color ora accettano uno dei seguenti:
from groupdocs.comparison.options import Color
# Named‑color factory
style.font_color = Color.from_name("firebrick")
# RGB / RGBA tuple
style.font_color = (255, 0, 0)
style.font_color = (255, 0, 0, 128)
# Hex string
style.font_color = "#FF8800"
style.font_color = "#80FF8800" # AARRGGBB
# Packed ARGB int
style.font_color = 0xFF0000
# Or a Color instance directly
style.font_color = Color(178, 34, 34, 255)
Color è importabile da groupdocs.comparison, groupdocs.comparison.options e groupdocs.pydrawing — tutti e tre i percorsi risolvono alla stessa classe.
PreviewOptions basato su callable
Il costruttore di PreviewOptions accetta un callable Python per il delegato CreatePageStream. La firma del 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 # the bridge has already flushed/closed the 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) (argomento singolo, senza callback di rilascio) è anch’esso valido.
Rectangle tipizzato dalle proprietà di coordinate
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 correzione è a livello di prodotto — si applica a ogni proprietà tipizzata in tutti i prodotti (Point, Size, ecc., non solo Rectangle).
Argomenti kwargs con nome proprietà nei costruttori delle opzioni
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)
Il pattern del setter funziona ancora (opts = ApplyChangeOptions(); opts.changes = changes). I kwargs sconosciuti sollevano TypeError.
Nuovi metodi con suffisso overload
È stato aggiunto un insieme di metodi con suffisso overload alla superficie pubblica così che ogni overload .NET sia invocabile da Python con un nome esplicito e non ambiguo. Esempi:
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() esplicito
Disponibile per chi preferisce non usare l’idioma del context‑manager with. Il pattern consigliato resta:
with Comparer("source.docx") as comparer:
comparer.add("target.docx")
comparer.compare("result.docx")
Casing degli enum
Tutti gli enum usano la convenzione UPPERCASE di Python. Enum comuni:
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 nella documentazione di 25.12 vedevi valori in stile .Accept/.Reject, aggiornali alla forma maiuscola.
Esempio di codice
Di seguito un esempio minimale che dimostra l’importazione delle classi di livello superiore ora visibili e l’esecuzione di un confronto semplice:
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}")
Come ottenere l’aggiornamento
PyPI
pip install groupdocs-comparison-net==26.5.0
Il wheel è pubblicato su PyPI pubblico: https://pypi.org/project/groupdocs-comparison-net/
Download diretto
Non sono forniti link di download diretto; ottieni il pacchetto tramite PyPI o il sito web di GroupDocs.
Risorse
- Pagina del progetto su PyPI: https://pypi.org/project/groupdocs-comparison-net/
- Documentazione Integrazione di Agenti e LLM: https://docs.groupdocs.com/comparison/python-net/agents-and-llm-integration/
- Repository di esempi: https://github.com/groupdocs-comparison/GroupDocs.Comparison-for-Python-via-.NET
- Forum per segnalare problemi: https://forum.groupdocs.com/c/comparison/
- Helpdesk di Supporto a Pagamento: https://helpdesk.groupdocs.com/