私たちは GroupDocs.Watermark for Python v26.10 のリリースを発表できることを嬉しく思います。リリース日は 2026年10月 です。このリリースでは、基盤となる .NET エンジンを 26.6 から 26.9 に、埋め込み .NET ランタイムを 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 ランタイムを 10.0.0 から 10.0.12 に更新 (WATERMARKPYTHON-67)
  • [Enhancement] クラスに存在しない属性を代入したときに AttributeError を発生させる (WATERMARKPYTHON-68)
  • [Fix] Python 3.5 – 3.7 でパッケージが使用できない問題を修正 (WATERMARKPYTHON-69)
  • [Fix] Linux および macOS の実行できないバージョンで pip がパッケージをインストールしてしまう問題を修正 (WATERMARKPYTHON-70)
  • [Fix] プレビューリリースコールバックがページストリームの代わりに None を受け取っていた問題を修正 (WATERMARKPYTHON-71)
  • [Fix] io.BytesIO に書き込まれたページプレビューが空になる問題を修正 (WATERMARKPYTHON-72)
  • [Fix] リリースコールバック経由で書き込まれたスプレッドシートページプレビューが切り捨てられる問題を修正 (WATERMARKPYTHON-73)

公開 API の変更

アップグレードには新しい wheel(pip ≥ 20.3)の使用と、誤字のある属性に対する新しい AttributeError の処理が必要です。その他の API シグネチャは変更されていません。

新しいクラスとメンバー

  • Color: コンストラクタを追加(以前はなし)。
  • 4 つのインデックス付きクラス(ReadOnlyListBase、SpreadsheetHeaderFooterCollection、SpreadsheetHeaderFooterSectionCollection、WordProcessingHeaderFooterCollection)に get() を追加し、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 を、ロードに失敗した際に .NET 例外テキストを含む error を記録します。ロガー内部での失敗は無視されます。

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()  # 必要なメソッドを持つオブジェクト
# または: 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 スタイルのプロパティを代入しようとすると、Python のみの属性が静かに作成される代わりに AttributeError が発生します。これにより、実際にはドキュメントが変更されていないのに変更されたと誤認するコードを防止できます。

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

with Watermarker("document.pdf") as wm:
    watermark = TextWatermark("CONFIDENTIAL", Font("Arial", 36))
    # プロパティ名が間違っているためエラーが発生します
    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'?

正しいプロパティへの代入は従来通り問題なく動作します。

コード例

上記の WatermarkerSettings 用カスタムロガー と 属性代入の厳格化 のセクションをご参照ください。

アップデートの取得方法

PyPI

直接ダウンロード

GroupDocs.Watermark for Python via .NET 26.10 ページから Windows、Linux、macOS 用の wheel をダウンロードしてください。

リソース