Мы рады объявить о выпуске GroupDocs.Watermark for Python v26.10, доступном с октября 2026. Этот выпуск обновляет базовый .NET‑движок с 26.6 до 26.9 и встроенную .NET runtime с 10.0.0 до 10.0.12. Он вводит поддержку пользовательских логгеров, усиливает проверку присвоения атрибутов и исправляет критические проблемы с обратными вызовами предварительного просмотра и обработкой потоков страниц. Кроме того, совместимость расширена до Python 3.5–3.14, а поддержка платформ уточнена с помощью строгих тегов wheel.

Что нового в этом выпуске

  • [Feature] Принимать объект Python или функцию в качестве WatermarkerSettings.logger (WATERMARKPYTHON-65)
  • [Enhancement] Обновить движок GroupDocs.Watermark с 26.6 до 26.9 (WATERMARKPYTHON-66)
  • [Enhancement] Обновить встроенную .NET runtime с 10.0.0 до 10.0.12 (WATERMARKPYTHON-67)
  • [Enhancement] Выбрасывать AttributeError, когда код присваивает атрибут, которого нет у класса (WATERMARKPYTHON-68)
  • [Fix] Невозможно использовать пакет на Python 3.5 – 3.7 (WATERMARKPYTHON-69)
  • [Fix] pip устанавливает пакет на Linux и macOS версиях, которые не могут его запустить (WATERMARKPYTHON-70)
  • [Fix] Обратные вызовы предварительного выпуска получают None вместо потока страницы (WATERMARKPYTHON-71)
  • [Fix] Предпросмотры страниц, записанные в io.BytesIO, пусты (WATERMARKPYTHON-72)
  • [Fix] Предпросмотры страниц электронных таблиц, записанные через обратный вызов выпуска, усечены (WATERMARKPYTHON-73)

Изменения публичного API

Обновление требует использования нового wheel (pip ≥ 20.3) и обработки нового AttributeError для опечаток в атрибутах; остальные сигнатуры API остаются без изменений.

Новые классы и члены

  • Color: конструктор; его ранее не было.
  • get() в 4 индексируемых классах — ReadOnlyListBase, SpreadsheetHeaderFooterCollection, SpreadsheetHeaderFooterSectionCollection, WordProcessingHeaderFooterCollection — как альтернатива x[key]; их свойство item удалено.

Новые возможности

Пользовательский логгер для WatermarkerSettings

WatermarkerSettings.logger теперь принимает объект Python или простую функцию. В версии 26.6 присвоение любого значения вызывало

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

Логгер может быть объектом, реализующим trace(message), warning(message) и error(message, exception), либо вызываемым fn(level, message, exception). Движок записывает trace при открытии файла и error (с текстом .NET‑исключения), когда не может загрузить файл; ошибки внутри логгера игнорируются.

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)

Строгое присвоение атрибутов

Присвоение опечатанного или .NET‑стильного свойства в обёртке водяного знака теперь вызывает AttributeError вместо тихого создания атрибута, доступного только в Python. Это предотвращает ситуацию, когда код считает, что изменил документ, хотя на самом деле не изменил.

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

Вызываемая ошибка:

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

Существующие корректные присвоения свойств продолжают работать без изменений.

Пример кода

Смотрите разделы Custom logger for WatermarkerSettings и Strict attribute assignment выше.

Как получить обновление

PyPI

Прямое скачивание

Скачайте wheel‑файлы для Windows, Linux и macOS со страницы GroupDocs.Watermark for Python via .NET 26.10.

Ресурсы