چه‌چیزهای جدید در GroupDocs.Signature for Python 26.1 (ژانویه 2026)

شناسه دسته‌بندی خلاصه
SIGNATURENET‑5528 قابلیت پشتیبانی و اعتبارسنجی امضای دیجیتال تصویری (قراردادن مخفی‌نگاری LSB برای PNG و JPG).
SIGNATURENET‑5445 قابلیت رندرینگ تطبیقی برای پیش‌نمایش‌های امضای بارکد و QR Code – کنترل صریح عرض/ارتفاع.
SIGNATURENET‑5479 قابلیت پشتیبانی از چرخش برای پیش‌نمایش‌های تصویر بارکد و QR Code.
SIGNATURENET‑5478 قابلیت افزودن پشتیبانی از فرمت‌های تصویر APNG و TGA برای امضای مبتنی بر تصویر.
SIGNATURENET‑5500 بهبود بهینه‌سازی جستجوی LINQ‑مانند برای جستجو و اعتبارسنجی امضا (فیلتر کردن پیش‌شرط).
SIGNATURENET‑5480 بهبود پشتیبانی از شفافیت پس‌زمینه برای پیش‌نمایش‌های بارکد/QR.
SIGNATURENET‑5477 بهبود پشتیبانی از تصویر پوششی برای امضای دیجیتال با رنگ پس‌زمینه (پرچم foreground‑image).
SIGNATURENET‑5422 بهبود حذف الگوریتم‌های رمزنگاری ناامن (RC2, DES, TripleDES و حالت‌های ضعیف AES).
SIGNATURENET‑5555 🐞 رفع‌اشکال رفع استثنای GeneratePreview() در زمان مقداردهی اولیه برای فایل‌های DOC در لینوکس.

در ادامه یک مرور فنی کوتاه از مهم‌ترین تغییرات آورده شده است.

1. امضای دیجیتال تصویری (استگانوگرافی)

  • امضاها در بیت‌های کم‌اهمیت پیکسل‌های PNG/JPG مخفی می‌شوند.
  • با رمزعبور محافظت می‌شود، با جریان (stream) سازگار است و برای هر اندازه تصویر ≥ 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")

2. رندرینگ تطبیقی برای پیش‌نمایش‌های بارکد و QR Code

توسعه‌دهندگان اکنون می‌توانند 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 تطبیقی

3. پشتیبانی از چرخش برای پیش‌نمایش‌های بارکد و 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)

بارکد چرخیده

4. پشتیبانی از فرمت تصویر جدید – APNG و TGA

فایل‌های APNG (PNG متحرک) و TGA (Targa) اکنون می‌توانند به عنوان امضای تصویری استفاده شوند، درج، پیش‌نمایش و اعتبارسنجی شوند همانند PNG/JPG.

5. شفافیت پس‌زمینه برای پیش‌نمایش‌های بارکد/QR

خاصیت transparency (۰ – ۱) را در گزینه‌های بارکد/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)

بارکد شفاف

6. پشتیبانی از تصویر پوششی برای امضای دیجیتال

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}")

تصویر پوششی

7. تقویت امنیت – حذف الگوریتم‌های ناامن

الگوریتم‌های RC2، DES، TripleDES و حالت‌های ضعیف AES از پشته رمزنگاری حذف شده‌اند. تنها الگوریتم‌های مدرن و تأیید شده توسط NIST در دسترس هستند و وضعیت امنیت پیش‌فرض اسناد امضاشده بهبود می‌یابد.

8. بهینه‌سازی جستجوی شبیه LINQ

اکنون search و verify امضا می‌توانند توابع پیششرط (predicate) دریافت کنند که امضاها را قبل از انجام پردازش سنگین فیلتر می‌کند. این کار مصرف حافظه را کاهش و سرعت عملیات دسته‌ای را افزایش می‌دهد.

جستجو با پیششرط

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")

9. رفع مشکل پیش‌نمایش DOC در لینوکس

اکنون GeneratePreview() دیگر هنگام پردازش فایل‌های Microsoft Word (.doc) در لینوکس استثنای TypeInitializerException تولید نمی‌کند و عملکرد پیش‌نمایش متقابل‌پلتفرم بازگردانده شد.


دستورالعمل‌های به‌روزرسانی

pip install --upgrade groupdocs-signature-net

نکته: نام بسته groupdocs-signature-net برای wrapper پایتون‑از‑راه‑.NET استفاده می‌شود.


منابع


به‌روزرسانی‌های آینده را دنبال کنید و برای نکات عملکردی و راهنمایی‌های بهترین روش‌ها نگاهی به وبلاگ رسمی داشته باشید.