GroupDocs.Comparison dla Pythona 26.5.0 jest już dostępny. To pierwsze publiczne wydanie biblioteki na PyPI od wersji 25.12 i wprowadza czysty wrapper w Pythonie, dołączony plik AGENTS.md do wykrywania asystentów AI, nowy skrypt konsolowy oraz rozbudowaną restrukturyzację dokumentacji.
Co nowego w tej wersji
| Klucz | Kategoria | Podsumowanie |
|---|---|---|
| COMPARISONPYTHON-34 | Funkcja | Przebudowa czystego wrappera w Pythonie — publiczne API jest teraz w pełni introspektywne z poziomu Pythona |
| COMPARISONPYTHON-35 | Funkcja | Dołączenie AGENTS.md do koła (wheel) w celu wykrywania agentów AI |
| COMPARISONPYTHON-36 | Funkcja | Nowa strona dokumentacji: Agents and LLM Integration (serwer MCP, dołączony AGENTS.md, dokumentacja zoptymalizowana pod LLM) |
| COMPARISONPYTHON-39 | Funkcja | Skrypt konsolowy groupdocs-comparison instalowany razem z kołem — podkomendy compare, info, list-formats |
| COMPARISONPYTHON-38 | Ulepszenie | Restrukturyzacja dokumentacji — developer-guide/comparing-documents/ konsoliduje comparison-basic/ oraz advanced-usage/comparison/; ładowanie i zapisywanie spłaszczone |
Zmiany w publicznym API
Wrapper 26.x został przebudowany przy użyciu nowego generatora, który udostępnia szersze publiczne API i porządkuje niektóre nazwy członków. Większość istniejących skryptów napisanych pod 25.12 działa niezmieniona na 26.5; poniższe zmiany są pogrupowane według wpływu na kompatybilność.
Nowo widoczne klasy najwyższego poziomu
Te klasy istniały w wewnętrznej wersji 25.12, ale były ukryte przed introspekcją Pythona przez wrapper skompilowany przy użyciu Nuitka. Teraz są bezpośrednio importowalne:
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
Nowa klasa Color
StyleSettings.font_color, .highlight_color, .shape_color i .boarder_color akceptują teraz dowolny z następujących formatów:
from groupdocs.comparison.options import Color
# Fabryka kolorów nazwanych
style.font_color = Color.from_name("firebrick")
# Krotka RGB / RGBA
style.font_color = (255, 0, 0)
style.font_color = (255, 0, 0, 128)
# Ciąg szesnastkowy
style.font_color = "#FF8800"
style.font_color = "#80FF8800" # AARRGGBB
# Pakowany int ARGB
style.font_color = 0xFF0000
# Lub bezpośrednio instancja Color
style.font_color = Color(178, 34, 34, 255)
Color można importować z groupdocs.comparison, groupdocs.comparison.options oraz groupdocs.pydrawing — wszystkie trzy ścieżki odwołują się do tej samej klasy.
PreviewOptions oparte na wywoływalnych (callable)
Konstruktor PreviewOptions przyjmuje wywoływalny obiekt Pythona jako delegata CreatePageStream. Sygnatura wywołania to (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 # most już opróżnił/zamknął strumień
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) (jeden argument, bez wywołania zwrotnego) jest również prawidłowe.
Typowany Rectangle z właściwości współrzędnych
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 — '…'
Poprawka obowiązuje w całym produkcie — dotyczy każdej właściwości typowanej we wszystkich produktach (Point, Size itp., nie tylko Rectangle).
Argumenty nazwane (kwargs) w konstruktorach opcji
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)
Wzorzec settera nadal działa (opts = ApplyChangeOptions(); opts.changes = changes). Nieznane kwargs podnoszą TypeError.
Metody z dopiskiem overload
Do publicznego interfejsu dodano zestaw metod z dopiskiem overload, aby każdy overload .NET był wywoływalny z Pythona pod jednoznaczną nazwą. Przykłady:
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(...)
Jawne Comparer.dispose()
Dostępne dla wywołujących, którzy wolą nie używać idiomu menedżera kontekstu with. Rekomendowany wzorzec pozostaje:
with Comparer("source.docx") as comparer:
comparer.add("target.docx")
comparer.compare("result.docx")
Nazewnictwo enumów
Wszystkie enumy używają konwencji Pythona w wersji UPPERCASE. Przykładowe enumy:
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
Jeśli w dokumentacji 25.12 widniały wartości w stylu .Accept/.Reject, zaktualizuj je do wersji wielkimi liter.
Przykład kodu
Poniżej znajduje się minimalny przykład demonstrujący import nowo widocznych klas najwyższego poziomu oraz wykonanie prostej porównania:
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}")
Jak uzyskać aktualizację
PyPI
pip install groupdocs-comparison-net==26.5.0
Koło (wheel) jest publikowane w publicznym PyPI: https://pypi.org/project/groupdocs-comparison-net/
Bezpośrednie pobranie
Brak bezpośrednich linków do pobrania; pakiet należy uzyskać poprzez PyPI lub stronę internetową GroupDocs.
Zasoby
- Strona projektu na PyPI: https://pypi.org/project/groupdocs-comparison-net/
- Dokumentacja Agents and LLM Integration: https://docs.groupdocs.com/comparison/python-net/agents-and-llm-integration/
- Repozytorium przykładów: https://github.com/groupdocs-comparison/GroupDocs.Comparison-for-Python-via-.NET
- Forum zgłaszania problemów: https://forum.groupdocs.com/c/comparison/
- Płatny Helpdesk wsparcia: https://helpdesk.groupdocs.com/