ما هو الجديد في GroupDocs.Signature for Python 26.1 (يناير 2026)

ID الفئة الملخص
SIGNATURENET‑5528 ميزة دعم توقيع الصورة الرقمية والتحقق منه (إدراج LSB ستيجانوجرافي للملفات PNG & JPG).
SIGNATURENET‑5445 ميزة العرض التكيفي لمعاينات توقيع الباركود ورمز QR – التحكم الصريح في العرض/الارتفاع.
SIGNATURENET‑5479 ميزة دعم الدوران لمعاينات صور الباركود ورمز QR.
SIGNATURENET‑5478 ميزة إضافة معالجة صيغ الصور APNG و TGA للتوقيعات القائمة على الصورة.
SIGNATURENET‑5500 تحسين تحسين الاستعلام بأسلوب LINQ للبحث والتحقق من التوقيع (تصفية بواسطة الدالة المقررة).
SIGNATURENET‑5480 تحسين دعم شفافية الخلفية لمعاينات الباركود/QR.
SIGNATURENET‑5477 تحسين دعم صورة التراكب للتوقيعات الرقمية مع لون الخلفية (علامة صورة المقدمة).
SIGNATURENET‑5422 تحسين إزالة خوارزميات التشفير غير الآمنة (RC2, DES, TripleDES وأنماط AES الضعيفة).
SIGNATURENET‑5555 🐞 تصحيح خطأ تم إصلاح استثناء تهيئة النوع GeneratePreview() لملفات DOC على لينكس.

Below is a short technical walk‑through of the most impactful changes.

١. توقيع الصورة الرقمية (ستيجانوجرافيا)

  • التواقيع مخفية في البتات الأقل أهمية من بكسلات PNG/JPG.
  • محمي بكلمة مرور، متوافق مع التدفق، ويعمل مع أي حجم صورة ≥ 8 × 8 بكسل.

توقيع صورة

import groupdocs.signature as gs
import groupdocs.signature.options as gso

input_file  = "image.png"
output_file = "signed_image.png"
password    = "MySecurePassword123"

# Sign the image
with gs.Signature(input_file) as signature:
    sign_options = gso.ImageDigitalSignOptions()
    sign_options.password = password

    sign_result = signature.sign(output_file, sign_options)

    if sign_result.succeeded and len(sign_result.succeeded) > 0:
        print("Image signed successfully!")
        print(f"Signatures added: {len(sign_result.succeeded)}")

التحقق من صورة موقعة

import groupdocs.signature as gs
import groupdocs.signature.options as gso

signed_file = "signed_image.png"
password    = "MySecurePassword123"

with gs.Signature(signed_file) as signature:
    verify_options = gso.ImageDigitalVerifyOptions()
    verify_options.password = password
    verify_options.detection_threshold_percent = 75  # optional 0‑100%

    verify_result = signature.verify(verify_options)

    if verify_result.is_valid:
        print("Digital signature is valid!")
        print(f"Verified signatures: {len(verify_result.succeeded)}")
    else:
        print("Digital signature is invalid or not found.")

التحقق المتقدم (استخراج كامل للبيانات)

with gs.Signature("signed_image.png") as signature:
    verify_options = gso.ImageDigitalVerifyOptions()
    verify_options.password = "MySecurePassword123"
    verify_options.use_full_data_extraction = True
    verify_options.detection_threshold_percent = 85

    verify_result = signature.verify(verify_options)

    if verify_result.is_valid and verify_options.detected_probability is not None:
        print(f"Signature detected with {verify_options.detected_probability}% probability")

٢. العرض التكيفي لمعاينات الباركود ورمز QR

المطورون الآن يستطيعون تحديد width و height الدقيقين لإنشاء المعاينة، مما يزيل عدم الاتساق السابق في “الحجم التلقائي”.

import groupdocs.signature as gs
import groupdocs.signature.options as gso
import uuid

# QR code options
qr_sign_options = gso.QrCodeSignOptions("GROUP DOCS", gs.QrCodeTypes.QR)
qr_sign_options.width  = 250
qr_sign_options.height = 270
qr_sign_options.fore_color = gs.Color.red
qr_sign_options.code_text_alignment = gs.CodeTextAlignment.BELOW
qr_sign_options.text = "GROUP DOCS"

# Preview generation
preview_options = gso.PreviewSignatureOptions(
    qr_sign_options,
    create_signature_stream,   # user‑provided delegate
    release_signature_stream   # user‑provided delegate
)
preview_options.signature_id   = str(uuid.uuid4())
preview_options.preview_format = gso.PreviewSignatureOptions.PreviewFormats.PNG

gs.Signature.generate_signature_preview(preview_options)

معاينة QR التكيفية

٣. دعم الدوران لمعاينات الباركود ورمز QR

اضبط rotation_angle (بالدرجات) على خيارات الباركود/QR لتوليد معاينات مائلة.

import groupdocs.signature as gs
import groupdocs.signature.options as gso
import uuid

barcode_sign_options = gso.BarcodeSignOptions("GROUP DOCS", gs.BarcodeTypes.MaxiCode)
barcode_sign_options.width          = 400
barcode_sign_options.height         = 400
barcode_sign_options.fore_color     = gs.Color.red
barcode_sign_options.code_text_alignment = gs.CodeTextAlignment.BELOW
barcode_sign_options.text           = "GROUP DOCS"
barcode_sign_options.rotation_angle = 45   # rotate 45°

preview_options = gso.PreviewSignatureOptions(
    barcode_sign_options,
    create_signature_stream,
    release_signature_stream
)
preview_options.signature_id   = str(uuid.uuid4())
preview_options.preview_format = gso.PreviewSignatureOptions.PreviewFormats.PNG

gs.Signature.generate_signature_preview(preview_options)

الباركود المدور

٤. دعم صيغ صور جديدة – APNG & TGA

يمكن الآن استخدام ملفات APNG (PNG المتحركة) و TGA (Targa) كتوقيع صورة، وإدراجها، ومعاينتها، والتحقق منها تمامًا كما هو الحال مع PNG/JPG.

٥. شفافية الخلفية لمعاينات الباركود/QR

اضبط خاصية transparency (0 – 1) على خيارات الباركود/QR لإنشاء معاينات بخلفية شفافة.

barcode_sign_options = gso.BarcodeSignOptions("GROUP DOCS", gs.BarcodeTypes.Codabar)
barcode_sign_options.width  = 400
barcode_sign_options.height = 400
barcode_sign_options.fore_color = gs.Color.red
barcode_sign_options.code_text_alignment = gs.CodeTextAlignment.BELOW
barcode_sign_options.text = "GROUP DOCS"
barcode_sign_options.transparency = 0.5   # 50 % transparent background

preview_options = gso.PreviewSignatureOptions(
    barcode_sign_options,
    create_signature_stream,
    release_signature_stream
)
preview_options.signature_id = str(uuid.uuid4())
preview_options.preview_format = gso.PreviewSignatureOptions.PreviewFormats.PNG

gs.Signature.generate_signature_preview(preview_options)

باركود شفاف

٦. دعم صورة التراكب للتوقيعات الرقمية

PdfDigitalSignatureAppearance الآن يراعي صورة التراكب ونوع لون الخلفية دون حجب الصورة. التحكم في الطبقة يتم عبر SignatureCustomAppearance.IsForegroundImage.

import groupdocs.signature as gs
import groupdocs.signature.options as gso

signature_image_path = "signature.png"
certificate_path      = "JohnSmithCertificate.pfx"

input_pdf  = "SampleDocument.pdf"
output_pdf = "SignedDocument.pdf"

with gs.Signature(input_pdf) as signature:
    sign_options = gso.DigitalSignOptions(certificate_path)
    sign_options.password = "1234567890"
    sign_options.reason   = "Document approval"
    sign_options.contact  = "John Smith"
    sign_options.location = "Head Office"

    # Visible signature placement
    sign_options.visible = True
    sign_options.left    = 350
    sign_options.top     = 100
    sign_options.width   = 200
    sign_options.height  = 70
    sign_options.image_file_path = signature_image_path

    appearance = gso.PdfDigitalSignatureAppearance()
    appearance.foreground = gs.Color.from_argb(50, gs.Color.brown)
    appearance.font_family_name = "Times New Roman"
    appearance.font_size = 12
    appearance.background = gs.Color.from_argb(50, gs.Color.light_gray)
    appearance.is_foreground_image = True   # image on top of text

    sign_options.appearance = appearance

    sign_result = signature.sign(output_pdf, sign_options)

    print(f"\nDocument signed successfully with {len(sign_result.succeeded)} signature(s).")
    print(f"Signed file saved at: {output_pdf}")

صورة التراكب

٧. تعزيز الأمان – إزالة الخوارزميات غير الآمنة

تم إزالة RC2, DES, TripleDES وأنماط AES الضعيفة من طبقة التشفير. الآن تتوفر فقط الخوارزميات الحديثة المعتمدة من NIST، مما يحسن الوضع الأمني الافتراضي للمستندات الموقعة.

٨. تحسين الاستعلام بأسلوب LINQ

طريقة search و verify للتوقيع الآن تقبل دوال شرطية تصفي التواقيع قبل خطوات المعالجة الثقيلة. هذا يقلل من استهلاك الذاكرة ويُسرّع عمليات الدفعات.

بحث باستخدام شرط

import groupdocs.signature as gs
import groupdocs.signature.options as gso
import groupdocs.signature.domain as gsd

with gs.Signature("document.pdf") as signature:
    search_options = [gso.TextSearchOptions()]

    # Keep only text signatures that contain the word "Approved"
    result = signature.search(search_options,
        lambda sig: isinstance(sig, gsd.TextSignature) and "Approved" in sig.text)

    for sig in result.signatures:
        print(f"Found: {sig.text}")

تحقق باستخدام شرط

with gs.Signature("signed_document.pdf") as signature:
    verify_options = gso.TextVerifyOptions("John Smith")

    # Verify only signatures on page 1
    result = signature.verify(verify_options,
        lambda sig: sig.page_number == 1)

    print(f"Found {len(result)} verified signatures on page 1")

٩. إصلاح تعطل معاينة DOC على لينكس

GeneratePreview() لم يعد يرمي TypeInitializerException عند معالجة ملفات Microsoft Word (.doc) على لينكس، ما يعيد وظيفة المعاينة المتعددة المنصات.


تعليمات الترقية

pip install --upgrade groupdocs-signature-net

ملاحظة: يُستخدم اسم الحزمة groupdocs-signature-net للغلاف Python‑via‑.NET.


الموارد

ابقوا متابعين للإصدارات القادمة واحرصوا على مراجعة المدونة الرسمية للحصول على نصائح الأداء وأفضل الممارسات.