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

Що нового у цьому випуску

  • [Функція] Приймати Python‑об’єкт або функцію як WatermarkerSettings.logger (WATERMARKPYTHON-65)
  • [Удосконалення] Оновити движок GroupDocs.Watermark з 26.6 до 26.9 (WATERMARKPYTHON-66)
  • [Удосконалення] Оновити вбудоване середовище виконання .NET з 10.0.0 до 10.0.12 (WATERMARKPYTHON-67)
  • [Удосконалення] Піднімати AttributeError, коли код присвоює атрибут, якого клас не має (WATERMARKPYTHON-68)
  • [Виправлення] Неможливо використовувати пакет у Python 3.5 – 3.7 (WATERMARKPYTHON-69)
  • [Виправлення] pip встановлює пакет на Linux та macOS версіях, які не можуть його запускати (WATERMARKPYTHON-70)
  • [Виправлення] Колбеки попереднього перегляду отримують None замість потоку сторінки (WATERMARKPYTHON-71)
  • [Виправлення] Попередні перегляди сторінок, записані у io.BytesIO, порожні (WATERMARKPYTHON-72)
  • [Виправлення] Попередні перегляди сторінок електронних таблиць, записані через колбек випуску, обрізані (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‑подібної властивості у обгортці watermark тепер піднімає AttributeError замість тихого створення лише Python‑атрибуту. Це запобігає ситуації, коли код вважає, що змінив документ, хоча насправді не змінив.

Підняте виключення:

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

Існуючі правильні присвоєння властивостей продовжують працювати без змін.

Приклад коду

Дивіться розділи Користувацький логер для WatermarkerSettings та Суворе призначення атрибутів вище.

Як отримати оновлення

PyPI

Пряме завантаження

Завантажте wheel‑файли для Windows, Linux та macOS зі сторінки GroupDocs.Watermark for Python via .NET 26.10.

Ресурси