เรามีความยินดีที่จะแจ้งการปล่อย GroupDocs.Watermark for Python v26.10 ซึ่งพร้อมให้ใช้งานตั้งแต่ ตุลาคม 2026. การปล่อยนี้อัปเกรดเอนจิน .NET พื้นฐานจากเวอร์ชัน 26.6 เป็น 26.9 และอัปเดต runtime .NET ที่ฝังอยู่จาก 10.0.0 เป็น 10.0.12. มันนำการสนับสนุนสำหรับ logger แบบกำหนดเอง, บังคับการกำหนดแอตทริบิวต์ที่เข้มงวดมากขึ้น, และแก้ไขปัญหาสำคัญเกี่ยวกับ callback ของ preview และการจัดการ stream ของหน้า. นอกจากนี้ ความเข้ากันได้ได้ขยายไปยัง Python 3.5–3.14, และการสนับสนุนแพลตฟอร์มได้รับการชัดเจนผ่านแท็ก wheel ที่เข้มงวด.

สิ่งใหม่ในรุ่นนี้

  • [ฟีเจอร์] รับอ็อบเจ็กต์หรือฟังก์ชัน Python เป็น WatermarkerSettings.logger (WATERMARKPYTHON-65)
  • [การปรับปรุง] อัปเดตเอนจิน GroupDocs.Watermark จาก 26.6 เป็น 26.9 (WATERMARKPYTHON-66)
  • [การปรับปรุง] อัปเดต runtime .NET ที่ฝังอยู่จาก 10.0.0 เป็น 10.0.12 (WATERMARKPYTHON-67)
  • [การปรับปรุง] ทำให้เกิด AttributeError เมื่อโค้ดกำหนดแอตทริบิวต์ที่คลาสไม่มี (WATERMARKPYTHON-68)
  • [แก้ไข] ไม่สามารถใช้แพคเกจบน Python 3.5 – 3.7 (WATERMARKPYTHON-69)
  • [แก้ไข] pip ติดตั้งแพคเกจบน Linux และ macOS เวอร์ชันที่ไม่สามารถรันได้ (WATERMARKPYTHON-70)
  • [แก้ไข] Callback ของ preview release รับค่า None แทน stream ของหน้า (WATERMARKPYTHON-71)
  • [แก้ไข] Preview ของหน้าเขียนลงใน io.BytesIO แล้วเป็นค่าว่าง (WATERMARKPYTHON-72)
  • [แก้ไข] Preview ของหน้า Spreadsheet ที่เขียนผ่าน release callback ถูกตัดขาด (WATERMARKPYTHON-73)

การเปลี่ยนแปลง Public API

การอัปเกรดต้องใช้ wheel ใหม่ (pip ≥ 20.3) และจัดการกับ AttributeError ใหม่สำหรับแอตทริบิวต์ที่พิมพ์ผิด; ลายเซ็น API อื่น ๆ ยังคงไม่เปลี่ยนแปลง.

คลาสและสมาชิกใหม่

  • Color: ตัวสร้าง; ก่อนหน้านี้ไม่มี.
  • get() บน 4 คลาสที่มีการจัดทำดัชนี — ReadOnlyListBase, SpreadsheetHeaderFooterCollection, SpreadsheetHeaderFooterSectionCollection, WordProcessingHeaderFooterCollection — เป็นทางเลือกแทน x[key]; คุณสมบัติ item ของพวกมันถูกลบออก.

ฟีเจอร์ใหม่

Logger แบบกำหนดเองสำหรับ WatermarkerSettings

WatermarkerSettings.logger ตอนนี้รับอ็อบเจ็กต์ Python หรือฟังก์ชันธรรมดา. ในเวอร์ชัน 26.6 การกำหนดค่าใด ๆ ทำให้เกิดข้อผิดพลาด

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

Logger สามารถเป็นอ็อบเจ็กต์ที่มีเมธอด trace(message), warning(message) และ error(message, exception), หรือเป็น callable fn(level, message, exception). เอนจินจะบันทึก trace เมื่อเปิดไฟล์และ error (พร้อมข้อความข้อยกเว้นของ .NET) เมื่อไม่สามารถโหลดไฟล์; ความล้มเหลวภายใน logger จะถูกละเว้น.

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 บน wrapper ของ watermark ตอนนี้จะทำให้เกิด AttributeError แทนการสร้างแอตทริบิวต์เฉพาะ Python อย่างเงียบ ๆ. สิ่งนี้ป้องกันไม่ให้โค้ดคิดว่ามันได้เปลี่ยนแปลงเอกสารเมื่อจริง ๆ แล้วไม่ได้.

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'?

การกำหนดคุณสมบัติที่ถูกต้องที่มีอยู่แล้วยังคงทำงานโดยไม่มีการเปลี่ยนแปลง.

ตัวอย่างโค้ด

ดูส่วน Custom logger for WatermarkerSettings และ Strict attribute assignment ด้านบน.

วิธีรับอัปเดต

PyPI

ดาวน์โหลดโดยตรง

ดาวน์โหลดไฟล์ wheel สำหรับ Windows, Linux และ macOS จากหน้า GroupDocs.Watermark for Python via .NET 26.10 .

แหล่งข้อมูล