우리는 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 태그를 통해 명확히 정의되었습니다.
이번 릴리스의 새로운 기능
- [기능] 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를 기록하고, 파일을 로드할 수 없을 때는 ( .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() # 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 스타일의 속성을 할당하면 이제 조용히 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))
# The following line raises an error because the property name is wrong
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-net 26.10.0
- 설치 명령:
pip install groupdocs-watermark-net==26.10.0
직접 다운로드
Windows, Linux 및 macOS용 wheel을 GroupDocs.Watermark for Python via .NET 26.10 페이지에서 다운로드하십시오.