מה חדש ב- GroupDocs.Signature for Python 26.1 (January 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 שיפור תמיכה בתמונה משולבת לחתימות דיגיטליות עם צבע רקע (דגל foreground‑image).
SIGNATURENET‑5422 שיפור הסרת אלגוריתמי הצפנה בלתי בטוחים (RC2, DES, TripleDES ומצבי AES חלשים).
SIGNATURENET‑5555 🐞 תיקון באג תוקן חריג GeneratePreview() בעת יצירת תצוגה מקדימה של קבצי DOC בלינוקס.

להלן סיור טכני קצר של השינויים המשמעותיים ביותר.

1. חתימה דיגיטלית של תמונה (סטגנוגרפיה)

  • החתימות מוסתרות בביטיים הפחות משמעותיים של פיקסלי PNG/JPG.
  • מוגנות בסיסמה, תואמות למזרנים, ועובדות עם כל גודל תמונה ≥ 8 × 8 px.

Signing an image

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

Verifying a signed image

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

Advanced validation (full data extraction)

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

המפתחים כעת יכולים לציין width ו‑height מדויקים ליצירת תצוגה מקדימה, ובכך להיפטר מהחוסר התאום של ה‑“auto‑size” הקודם.

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)

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

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

כעת ניתן להעביר פונקציות תנאי (predicate) ל‑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()]

    # שמור רק על חתימות טקסט שמכילות את המילה "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")

    # אמת רק חתימות בעמוד 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() אינו זורק עוד TypeInitializerException בעת עיבוד קבצים מסוג Microsoft Word (.doc) בלינוקס, ומשיב את הפונקציונליות החוצת‑פלטפורמות של תצוגה מקדימה.


הוראות עדכון

pip install --upgrade groupdocs-signature-net

הערה: שם החבילה groupdocs-signature-net משמש לעטיפת Python‑via‑.NET.


משאבים

הישארו מעודכנים לגבי גרסאות עתידיות והקפידו לעקוב אחרי הבלוג הרשמי לקבלת טיפים לביצועים והנחיות של מיטב השיטות.