Z przyjemnością ogłaszamy wydanie GroupDocs.Watermark for Python v26.10, dostępne od października 2026. To wydanie aktualizuje podstawowy silnik .NET z wersji 26.6 do 26.9 oraz wbudowane środowisko uruchomieniowe .NET z 10.0.0 do 10.0.12. Wprowadza wsparcie dla własnych loggerów, wymusza bardziej rygorystyczne przypisywanie atrybutów oraz naprawia krytyczne problemy z wywołaniami zwrotnymi podglądu i obsługą strumieni stron. Dodatkowo kompatybilność została rozszerzona do Pythona 3.5–3.14, a wsparcie platform zostało wyjaśnione poprzez ścisłe tagi wheel.

Co nowego w tym wydaniu

  • [Feature] Akceptuj obiekt Pythona lub funkcję jako WatermarkerSettings.logger (WATERMARKPYTHON-65)
  • [Enhancement] Zaktualizuj silnik GroupDocs.Watermark z 26.6 do 26.9 (WATERMARKPYTHON-66)
  • [Enhancement] Zaktualizuj wbudowane środowisko uruchomieniowe .NET z 10.0.0 do 10.0.12 (WATERMARKPYTHON-67)
  • [Enhancement] Rzuć AttributeError gdy kod przypisuje atrybut, którego klasa nie posiada (WATERMARKPYTHON-68)
  • [Fix] Nie można używać pakietu w Pythonie 3.5 – 3.7 (WATERMARKPYTHON-69)
  • [Fix] pip instaluje pakiet na wersjach Linux i macOS, które nie mogą go uruchomić (WATERMARKPYTHON-70)
  • [Fix] Wywołania zwrotne podglądu wydania otrzymują None zamiast strumienia strony (WATERMARKPYTHON-71)
  • [Fix] Podglądy stron zapisane do io.BytesIO są puste (WATERMARKPYTHON-72)
  • [Fix] Podglądy stron arkusza kalkulacyjnego zapisywane przez wywołanie zwrotne wydania są obcięte (WATERMARKPYTHON-73)

Zmiany w publicznym API

Aktualizacja wymaga użycia nowego wheel (pip ≥ 20.3) oraz obsługi nowego AttributeError dla błędnie napisanych atrybutów; pozostałe sygnatury API pozostają niezmienione.

Nowe klasy i członkowie

  • Color: konstruktor; wcześniej go nie było.
  • get() w 4 indeksowanych klasach — ReadOnlyListBase, SpreadsheetHeaderFooterCollection, SpreadsheetHeaderFooterSectionCollection, WordProcessingHeaderFooterCollection — jako alternatywa dla x[key]; ich właściwość item została usunięta.

Nowe funkcje

Własny logger dla WatermarkerSettings

WatermarkerSettings.logger teraz akceptuje obiekt Pythona lub zwykłą funkcję. W wersji 26.6 przypisanie dowolnej wartości powodowało

TypeError: _marshal_callback_or_handle: cannot wrap ... as GroupDocs.Watermark.Options.ILogger

Logger może być obiektem implementującym trace(message), warning(message) oraz error(message, exception), lub wywoływalnym fn(level, message, exception). Silnik zapisuje trace, gdy otwiera plik oraz error (z tekstem wyjątku .NET), gdy nie może go załadować; błędy wewnątrz loggera są ignorowane.

from groupdocs.watermark import Watermarker, WatermarkerSettings

class PrintLogger:
    def trace(self, message):
        print("trace:", message)

    def warning(self, message):
        print("warning:", message)

    def error(self, message, exception):
        print("error:", message, exception)

settings = WatermarkerSettings()
settings.logger = PrintLogger()  # object with the required methods
# or: settings.logger = lambda level, msg, exc: print(level, msg, exc)

with Watermarker("document.pdf", settings) as watermarker:
    print(watermarker.get_document_info().page_count)

Rygorystyczne przypisywanie atrybutów

Przypisanie błędnie napisanego lub w stylu .NET właściwości w obiekcie opakowującym watermark teraz rzuca AttributeError zamiast cicho tworzyć atrybut dostępny tylko w Pythonie. Zapobiega to sytuacji, w której kod sądzi, że zmienił dokument, a tak nie jest.

from groupdocs.watermark import Watermarker
from groupdocs.watermark.watermarks import TextWatermark, Font

with Watermarker("document.pdf") as wm:
    watermark = TextWatermark("CONFIDENTIAL", Font("Arial", 36))
    # The following line raises an error because the property name is wrong
    watermark.opacity_level = 0.5

Rzucony błąd to:

AttributeError: 'TextWatermark' object has no attribute 'opacity_level'; assigning it would not reach the .NET object. Did you mean: 'opacity'?

Istniejące poprawne przypisania właściwości nadal działają bez zmian.

Przykład kodu

Zobacz sekcje Własny logger dla WatermarkerSettings oraz Rygorystyczne przypisywanie atrybutów powyżej.

Jak uzyskać aktualizację

PyPI

Bezpośrednie pobranie

Pobierz pliki wheel dla Windows, Linux i macOS ze strony GroupDocs.Watermark for Python via .NET 26.10.

Zasoby