Estamos felizes em anunciar o lançamento do GroupDocs.Watermark for Python v26.10, disponível a partir de outubro de 2026. Esta versão atualiza o mecanismo subjacente do .NET de 26.6 para 26.9 e o runtime .NET incorporado de 10.0.0 para 10.0.12. Ela introduz suporte a registradores personalizados, impõe atribuição de atributos mais rigorosa e corrige problemas críticos com callbacks de pré‑visualização e manipulação de streams de página. Além disso, a compatibilidade foi estendida para Python 3.5–3.14, e o suporte a plataformas foi esclarecido por meio de tags de wheel estritas.

O que há de novo nesta versão

  • [Feature] Aceitar um objeto ou função Python como WatermarkerSettings.logger (WATERMARKPYTHON-65)
  • [Enhancement] Atualizar o mecanismo GroupDocs.Watermark de 26.6 para 26.9 (WATERMARKPYTHON-66)
  • [Enhancement] Atualizar o runtime .NET incorporado de 10.0.0 para 10.0.12 (WATERMARKPYTHON-67)
  • [Enhancement] Levantar AttributeError quando o código atribui um atributo que a classe não possui (WATERMARKPYTHON-68)
  • [Fix] Não é possível usar o pacote no Python 3.5 – 3.7 (WATERMARKPYTHON-69)
  • [Fix] pip instala o pacote em versões Linux e macOS que não podem executá‑lo (WATERMARKPYTHON-70)
  • [Fix] Callbacks de liberação de pré‑visualização recebem None em vez do stream da página (WATERMARKPYTHON-71)
  • [Fix] Pré‑visualizações de página gravadas em io.BytesIO ficam vazias (WATERMARKPYTHON-72)
  • [Fix] Pré‑visualizações de planilha gravadas por meio de um callback de liberação são truncadas (WATERMARKPYTHON-73)

Alterações na API pública

A atualização requer o uso da nova wheel (pip ≥ 20.3) e o tratamento do novo AttributeError para atributos digitados incorretamente; as demais assinaturas da API permanecem inalteradas.

Novas classes e membros

  • Color: um construtor; antes não existia.
  • get() em 4 classes indexadas — ReadOnlyListBase, SpreadsheetHeaderFooterCollection, SpreadsheetHeaderFooterSectionCollection, WordProcessingHeaderFooterCollection — como alternativa a x[key]; a propriedade item foi removida.

Novos recursos

Registrador personalizado para WatermarkerSettings

WatermarkerSettings.logger agora aceita um objeto Python ou uma função simples. No 26.6, atribuir qualquer valor gerava

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

O registrador pode ser um objeto que implemente trace(message), warning(message) e error(message, exception), ou uma função chamável fn(level, message, exception). O mecanismo registra um trace ao abrir um arquivo e um error (com o texto da exceção .NET) quando não consegue carregá‑lo; falhas dentro do registrador são ignoradas.

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()  # objeto com os métodos necessários
# ou: settings.logger = lambda level, msg, exc: print(level, msg, exc)

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

Atribuição estrita de atributos

Atribuir uma propriedade digitada incorretamente ou no estilo .NET em um wrapper de marca d’água agora levanta um AttributeError em vez de criar silenciosamente um atributo apenas em Python. Isso impede que o código acredite que o documento foi alterado quando, na verdade, não foi.

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

with Watermarker("document.pdf") as wm:
    watermark = TextWatermark("CONFIDENTIAL", Font("Arial", 36))
    # A linha a seguir gera um erro porque o nome da propriedade está errado
    watermark.opacity_level = 0.5

O erro levantado é:

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

Atribuições corretas de propriedades existentes continuam funcionando normalmente.

Exemplo de código

Consulte as seções Registrador personalizado para WatermarkerSettings e Atribuição estrita de atributos acima.

Como obter a atualização

PyPI

Download direto

Baixe as wheels para Windows, Linux e macOS na página GroupDocs.Watermark for Python via .NET 26.10.

Recursos