Nos complace anunciar el lanzamiento de GroupDocs.Watermark for Python v26.10, disponible a partir de octubre de 2026. Esta versión actualiza el motor subyacente de .NET de 26.6 a 26.9 y el tiempo de ejecución incrustado de .NET de 10.0.0 a 10.0.12. Introduce soporte para registradores personalizados, impone una asignación de atributos más estricta y corrige problemas críticos con los callbacks de vista previa y el manejo de flujos de página. Además, la compatibilidad se extiende a Python 3.5–3.14, y el soporte de plataforma se clarifica mediante etiquetas de rueda estrictas.
Novedades en esta versión
- [Feature] Aceptar un objeto o función de Python como
WatermarkerSettings.logger(WATERMARKPYTHON-65) - [Enhancement] Actualizar el motor de GroupDocs.Watermark de 26.6 a 26.9 (WATERMARKPYTHON-66)
- [Enhancement] Actualizar el tiempo de ejecución incrustado de .NET de 10.0.0 a 10.0.12 (WATERMARKPYTHON-67)
- [Enhancement] Generar
AttributeErrorcuando el código asigna un atributo que la clase no posee (WATERMARKPYTHON-68) - [Fix] No se puede usar el paquete en Python 3.5 – 3.7 (WATERMARKPYTHON-69)
- [Fix] pip instala el paquete en versiones de Linux y macOS que no pueden ejecutarlo (WATERMARKPYTHON-70)
- [Fix] Los callbacks de lanzamiento de vista previa reciben
Noneen lugar del flujo de página (WATERMARKPYTHON-71) - [Fix] Las vistas previas de página escritas a
io.BytesIOestán vacías (WATERMARKPYTHON-72) - [Fix] Las vistas previas de página de hoja de cálculo escritas a través de un callback de lanzamiento se truncan (WATERMARKPYTHON-73)
Cambios en la API pública
Actualizar requiere usar la nueva rueda (pip ≥ 20.3) y manejar el nuevo AttributeError para atributos con errores tipográficos; las demás firmas de la API permanecen sin cambios.
Nuevas clases y miembros
Color: un constructor; antes no lo tenía.get()en 4 clases indexadas —ReadOnlyListBase,SpreadsheetHeaderFooterCollection,SpreadsheetHeaderFooterSectionCollection,WordProcessingHeaderFooterCollection— como alternativa ax[key]; su propiedaditemse elimina.
Nuevas características
Registrador personalizado para WatermarkerSettings
WatermarkerSettings.logger ahora acepta un objeto de Python o una función simple. En la versión 26.6 asignar cualquier valor generaba
TypeError: _marshal_callback_or_handle: cannot wrap ... as GroupDocs.Watermark.Options.ILogger
El registrador puede ser un objeto que implemente trace(message), warning(message) y error(message, exception), o una función llamable fn(level, message, exception). El motor registra un trace cuando abre un archivo y un error (con el texto de la excepción de .NET) cuando no puede cargarlo; los fallos dentro del registrador se ignoran.
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)
Asignación estricta de atributos
Asignar una propiedad con error tipográfico o al estilo .NET en un contenedor de marca de agua ahora genera un AttributeError en lugar de crear silenciosamente un atributo solo de Python. Esto evita que el código crea que ha modificado el documento cuando no lo ha hecho.
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
El error generado es:
AttributeError: 'TextWatermark' object has no attribute 'opacity_level'; assigning it would not reach the .NET object. Did you mean: 'opacity'?
Las asignaciones correctas de propiedades existentes continúan funcionando sin cambios.
Ejemplo de código
Vea las secciones Registrador personalizado para WatermarkerSettings y Asignación estricta de atributos arriba.
Cómo obtener la actualización
PyPI
- Paquete: groupdocs-watermark-net 26.10.0
- Comando de instalación:
pip install groupdocs-watermark-net==26.10.0
Descarga directa
Descargue las ruedas para Windows, Linux y macOS desde la página GroupDocs.Watermark for Python via .NET 26.10.