Novità di GroupDocs.Signature per Python 26.1 (gennaio 2026)
| ID | Categoria | Sommario |
|---|---|---|
| SIGNATURENET‑5528 | ✨ Funzionalità | Supporto e convalida della firma digitale su immagine (incorporamento steganografico LSB per PNG e JPG). |
| SIGNATURENET‑5445 | ✨ Funzionalità | Rendering adattivo per le anteprime delle firme Barcode e QR Code – controllo esplicito di larghezza/altezza. |
| SIGNATURENET‑5479 | ✨ Funzionalità | Supporto alla rotazione per le immagini di anteprima Barcode e QR Code. |
| SIGNATURENET‑5478 | ✨ Funzionalità | Aggiunto il supporto ai formati immagine APNG e TGA per le firme basate su immagine. |
| SIGNATURENET‑5500 | ⚡ Miglioramento | Ottimizzazione delle query in stile LINQ per la ricerca e la verifica delle firme (filtraggio tramite predicati). |
| SIGNATURENET‑5480 | ⚡ Miglioramento | Supporto alla trasparenza dello sfondo per le anteprime Barcode/QR. |
| SIGNATURENET‑5477 | ⚡ Miglioramento | Supporto all’immagine sovrapposta per le firme digitali con colore di sfondo (flag foreground‑image). |
| SIGNATURENET‑5422 | ⚡ Miglioramento | Rimozione di algoritmi di cifratura non sicuri (RC2, DES, TripleDES e modalità AES deboli). |
| SIGNATURENET‑5555 | 🐞 Correzione bug | Risolto l’eccezione type‑initializer di GeneratePreview() per i file DOC su Linux. |
Di seguito è riportata una breve panoramica tecnica delle modifiche più impattanti.
1. Firma digitale su immagine (steganografia)
- Le firme sono nascoste nei bit meno significativi dei pixel PNG/JPG.
- Protetta da password, compatibile con gli stream e funziona con qualsiasi immagine di dimensione ≥ 8 × 8 px.
Firma di un’immagine
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)}")
Verifica di un’immagine firmata
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.")
Validazione avanzata (estrazione completa dei dati)
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. Rendering adattivo per le anteprime Barcode e QR Code
Gli sviluppatori ora possono specificare esattamente width e height per la generazione dell’anteprima, eliminando le precedenti incoerenze del “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. Supporto alla rotazione per le anteprime Barcode e QR
Imposta rotation_angle (gradi) nelle opzioni barcode/QR per generare anteprime ruotate.
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. Supporto ai nuovi formati immagine – APNG e TGA
I file APNG (PNG animato) e TGA (Targa) possono ora essere usati come firme immagine, inseriti, visualizzati in anteprima e verificati esattamente come PNG/JPG.
5. Trasparenza dello sfondo per le anteprime Barcode/QR
Imposta la proprietà transparency (0 – 1) nelle opzioni barcode/QR per generare anteprime con una tela trasparente.
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. Supporto all’immagine sovrapposta per le firme digitali
PdfDigitalSignatureAppearance ora rispetta un’immagine sovrapposta e un colore di sfondo senza oscurare l’immagine. Controlla il layering tramite 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. Rafforzamento della sicurezza – rimozione di algoritmi non sicuri
RC2, DES, TripleDES e modalità AES deboli sono stati rimossi dallo stack crittografico. Sono disponibili solo algoritmi moderni, approvati da NIST, migliorando la postura di sicurezza predefinita dei documenti firmati.
8. Ottimizzazione delle query in stile LINQ
Le operazioni di search e verify delle firme ora accettano funzioni predicato che filtrano le firme prima dei passaggi di elaborazione intensiva. Questo riduce l’uso di memoria e velocizza le operazioni batch.
Ricerca con un predicato
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}")
Verifica con un predicato
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. Risolto il crash dell’anteprima DOC su Linux
GeneratePreview() non genera più una TypeInitializerException durante l’elaborazione di file Microsoft Word (.doc) su Linux, ripristinando la funzionalità di anteprima multipiattaforma.
Istruzioni per l’aggiornamento
pip install --upgrade groupdocs-signature-net
Nota: Il nome del pacchetto
groupdocs-signature-netè usato per il wrapper Python‑via‑.NET.
Risorse
- Note di rilascio complete: (link alla pagina ufficiale delle note di rilascio, se disponibile)
- Documentazione: https://docs.groupdocs.com/signature/python/
- Community e Supporto: https://forum.groupdocs.com/c/signature/10
Rimanete sintonizzati per i prossimi rilasci e tenete d’occhio il blog ufficiale per consigli sulle prestazioni e guide alle migliori pratiche.