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
AttributeErrorquando 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
Noneem vez do stream da página (WATERMARKPYTHON-71) - [Fix] Pré‑visualizações de página gravadas em
io.BytesIOficam 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 ax[key]; a propriedadeitemfoi 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
- Pacote: groupdocs-watermark-net 26.10.0
- Comando de instalação:
pip install groupdocs-watermark-net==26.10.0
Download direto
Baixe as wheels para Windows, Linux e macOS na página GroupDocs.Watermark for Python via .NET 26.10.