نحن سعداء بالإعلان عن إصدار GroupDocs.Watermark for Python v26.10، المتاح اعتبارًا من أكتوبر 2026. يرقِّي هذا الإصدار محرك .NET الأساسي من 26.6 إلى 26.9 ويحدّث وقت تشغيل .NET المضمّن من 10.0.0 إلى 10.0.12. يُضيف دعمًا للمسجلات المخصصة، يفرض تعيينًا أكثر صرامة للسمات، ويُصلح مشكلات حرجة في استدعاءات معاينة الصفحات ومعالجة تدفق الصفحات. بالإضافة إلى ذلك، تم توسيع التوافق إلى Python 3.5–3.14، وتم توضيح دعم المنصات عبر وسوم العجلات الصارمة.
ما الجديد في هذا الإصدار
- [ميزة] قبول كائن بايثون أو دالة كـ
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 العامة
يتطلب الترقية استخدام العجلة الجديدة (pip ≥ 20.3) ومعالجة AttributeError الجديد للسمات المكتوبة بشكل خاطئ؛ بقية توقيعات API تبقى دون تغيير.
الفئات والأعضاء الجديدة
Color: مُنشئ؛ لم يكن له أي شيء.get()على 4 فئات مفهرسة —ReadOnlyListBase،SpreadsheetHeaderFooterCollection،SpreadsheetHeaderFooterSectionCollection،WordProcessingHeaderFooterCollection— كبديل لـx[key]؛ تم إزالة خاصيةitemالخاصة بها.
الميزات الجديدة
مسجل مخصص لـ WatermarkerSettings
WatermarkerSettings.logger الآن يقبل كائن بايثون أو دالة بسيطة. في الإصدار 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 عندما يفتح ملفًا وerror (مع نص استثناء .NET) عندما لا يستطيع تحميله؛ تُتجاهل الأخطاء داخل المسجل.
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 في غلاف العلامة المائية الآن يرفع 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'?
تستمر تعيينات الخصائص الصحيحة الموجودة في العمل دون تغيير.
مثال على الكود
انظر أقسام Custom logger for WatermarkerSettings و Strict attribute assignment أعلاه.
كيفية الحصول على التحديث
PyPI
- Package: groupdocs-watermark-net 26.10.0
- Install command:
pip install groupdocs-watermark-net==26.10.0
تحميل مباشر
حمّل العجلات لأنظمة Windows و Linux و macOS من صفحة GroupDocs.Watermark for Python via .NET 26.10 .