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