Wat is nieuw in GroupDocs.Signature voor Python 26.1 (januari 2026)

ID Categorie Samenvatting
SIGNATURENET‑5528 Feature Ondersteuning voor digitale handtekeningen op afbeeldingen en validatie (steganografische LSB‑inbedding voor PNG & JPG).
SIGNATURENET‑5445 Feature Adaptieve weergave voor Barcode‑ en QR‑Code‑handtekening‑voorbeelden – expliciete breedte/hoogte‑controle.
SIGNATURENET‑5479 Feature Rotatie‑ondersteuning voor Barcode‑ en QR‑Code‑voorbeeldbeelden.
SIGNATURENET‑5478 Feature Toevoegen van APNG‑ en TGA‑afbeeldingsformaatondersteuning voor op afbeeldingen gebaseerde handtekeningen.
SIGNATURENET‑5500 Enhancement LINQ‑achtige query‑optimalisatie voor handtekening zoeken & verifiëren (predicaat‑filtering).
SIGNATURENET‑5480 Enhancement Ondersteuning voor transparante achtergrond bij Barcode/QR‑voorbeelden.
SIGNATURENET‑5477 Enhancement Overlay‑afbeeldingsondersteuning voor digitale handtekeningen met achtergrondkleur (foreground‑image‑vlag).
SIGNATURENET‑5422 Enhancement Verwijdering van onveilige encryptie‑algoritmen (RC2, DES, TripleDES en zwakke AES‑modi).
SIGNATURENET‑5555 🐞 Bug Fix GeneratePreview()‑type‑initializer‑exception voor DOC‑bestanden op Linux verholpen.

Hieronder volgt een korte technische walkthrough van de meest impactvolle wijzigingen.

1. Digitale handtekening op afbeelding (steganografie)

  • Handtekeningen worden verborgen in de minst‑significante bits van PNG/JPG‑pixels.
  • Met wachtwoord beveiligd, stream‑compatibel, en werkt met elke afbeelding met een grootte ≥ 8 × 8 px.

Een afbeelding ondertekenen

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

Een ondertekende afbeelding verifiëren

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

Geavanceerde validatie (volledige data‑extractie)

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. Adaptieve weergave voor Barcode‑ & QR‑Code‑voorbeelden

Ontwikkelaars kunnen nu de exacte width en height opgeven voor het genereren van voorbeelden, waardoor de eerdere “auto‑size” inconsistenties verdwijnen.

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)

Adaptief QR‑voorbeeld

3. Rotatie‑ondersteuning voor Barcode‑ & QR‑voorbeelden

Stel rotation_angle (graden) in op barcode/QR‑opties om roterende voorbeelden te renderen.

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)

Geroteerde barcode

4. Nieuwe afbeeldingsformaatondersteuning – APNG & TGA

APNG (geanimeerde PNG) en TGA (Targa) bestanden kunnen nu als afbeeldings‑handtekeningen worden gebruikt, ingevoegd, voorgelicht en geverifieerd net als PNG/JPG.

5. Transparante achtergrond voor Barcode/QR‑voorbeelden

Stel de eigenschap transparency (0 – 1) in op barcode/QR‑opties om voorbeelden met een transparante canvas te genereren.

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)

Transparante barcode

6. Overlay‑afbeeldingsondersteuning voor digitale handtekeningen

PdfDigitalSignatureAppearance ondersteunt nu een overlay‑afbeelding en een achtergrondkleur zonder de afbeelding te verbergen. Laagwisseling regelen via 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}")

Overlay‑afbeelding

7. Beveiligingsverharding – verwijdering van onveilige algoritmen

RC2, DES, TripleDES en zwakke AES‑modi zijn verwijderd uit de cryptografische stack. Alleen moderne, door NIST goedgekeurde algoritmen zijn beschikbaar, wat de standaard‑beveiligingsstatus van ondertekende documenten verbetert.

8. LINQ‑achtige query‑optimalisatie

Handtekening‑search en verify accepteren nu predicate‑functies die handtekeningen voordat de zware verwerkingsstappen filteren. Dit vermindert het geheugenverbruik en versnelt batch‑operaties.

Zoeken met een 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}")

Verifiëren met een predicate

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. Linux‑DOC‑voorbeeldcrash opgelost

GeneratePreview() werpt niet langer een TypeInitializerException bij het verwerken van Microsoft Word (.doc) bestanden op Linux, waardoor cross‑platform voorbeeldfunctionaliteit is hersteld.


Upgrade‑instructies

pip install --upgrade groupdocs-signature-net

Opmerking: De pakketnaam groupdocs-signature-net wordt gebruikt voor de Python‑via‑.NET wrapper.


Resources


Blijf op de hoogte van aankomende releases en houd de officiële blog in de gaten voor prestatie‑tips en best‑practice‑gidsen.