Co je nového v GroupDocs.Signature for Python 26.1 (leden 2026)

ID Kategorie Shrnutí
SIGNATURENET‑5528 Funkce Podpora a ověřování digitálního podpisu obrázku (steganografické vkládání LSB pro PNG a JPG).
SIGNATURENET‑5445 Funkce Adaptivní vykreslování náhledů podpisů čárových kódů a QR kódů – explicitní řízení šířky/výšky.
SIGNATURENET‑5479 Funkce Podpora otáčení náhledových obrázků čárových kódů a QR kódů.
SIGNATURENET‑5478 Funkce Přidána podpora formátů obrázků APNG a TGA pro obrázkové podpisy.
SIGNATURENET‑5500 Vylepšení Optimalizace dotazů ve stylu LINQ pro vyhledávání a ověřování podpisů (filtrování predikáty).
SIGNATURENET‑5480 Vylepšení Podpora průhlednosti pozadí pro náhledy čárových kódů/QR.
SIGNATURENET‑5477 Vylepšení Podpora překryvného obrázku pro digitální podpisy s barvou pozadí (příznak foreground‑image).
SIGNATURENET‑5422 Vylepšení Odstranění nebezpečných šifrovacích algoritmů (RC2, DES, TripleDES a slabých režimů AES).
SIGNATURENET‑5555 🐞 Oprava chyby Opravená výjimka GeneratePreview() typu inicializátoru pro soubory DOC na Linuxu.

Níže je stručné technické průvodce nejvýznamnějšími změnami.

1. Digitální podpis obrázku (steganografie)

  • Podpisy jsou skryty v nejméně významných bitech pixelů PNG/JPG.
  • Chráněno heslem, kompatibilní se streamem a funguje s libovolnou velikostí obrázku ≥ 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)}")

Ověření podepsaného obrázku

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

Pokročilé ověření (plné extrahování dat)

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. Adaptivní vykreslování náhledů čárových kódů a QR kódů

Vývojáři nyní mohou zadat přesnou width a height pro generování náhledů, čímž se odstraňují dřívější nesrovnalosti „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. Podpora otáčení náhledů čárových kódů a QR kódů

Nastavte rotation_angle (stupně) v možnostech čárového kódu/QR pro vykreslení otočených náhledů.

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. Nová podpora formátů obrázků – APNG a TGA

Soubory APNG (animovaný PNG) a TGA (Targa) lze nyní používat jako obrázkové podpisy, vkládat je, zobrazovat náhledy a ověřovat přesně jako PNG/JPG.

5. Průhlednost pozadí pro náhledy čárových kódů/QR

Nastavte vlastnost transparency (0 – 1) v možnostech čárového kódu/QR pro generování náhledů s průhledným plátnem.

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. Podpora překryvného obrázku pro digitální podpisy

PdfDigitalSignatureAppearance nyní respektuje překryvný obrázek a barvu pozadí, aniž by obrázek zakryl. Vrstvení lze kontrolovat pomocí 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. Zpevnění zabezpečení – odstranění nebezpečných algoritmů

RC2, DES, TripleDES a slabé režimy AES byly odstraněny z kryptografického zásobníku. K dispozici jsou pouze moderní, NIST‑schválené algoritmy, což zlepšuje výchozí bezpečnostní úroveň podepsaných dokumentů.

8. Optimalizace dotazů ve stylu LINQ

Vyhledávání a ověřování podpisů nyní přijímají predikátové funkce, které filtrují podpisy před náročnými zpracovatelskými kroky. To snižuje spotřebu paměti a urychluje dávkové operace.

Vyhledávání s predikátem

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

Ověření s predikátem

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. Opravený pád náhledu DOC na Linuxu

GeneratePreview() již nevyvolává TypeInitializerException při zpracování souborů Microsoft Word (.doc) na Linuxu, čímž se obnoví multiplatformní funkčnost náhledů.

Pokyny k aktualizaci

pip install --upgrade groupdocs-signature-net

Poznámka: Název balíčku groupdocs-signature-net se používá pro obálku Python‑via‑.NET.

Zdroje

Seďte naladěni na nadcházející verze a mějte oči na oficiálním blogu pro tipy na výkon a průvodce osvědčenými postupy.