Novità di GroupDocs.Signature per Python 26.1 (gennaio 2026)
| ID | Categoria | Riepilogo |
|---|---|---|
| SIGNATURENET‑5528 | ✨ Funzionalità | Supporto e validazione della firma digitale immagine (incorporamento steganografico LSB per PNG & 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 anteprime delle firme Barcode e QR Code. |
| SIGNATURENET‑5478 | ✨ Funzionalità | Aggiunto il supporto ai formati immagine APNG e TGA per firme basate su immagine. |
| SIGNATURENET‑5500 | ⚡ Miglioramento | Ottimizzazione delle query in stile LINQ per ricerca e 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 di sovrapposizione per le firme digitali con colore di sfondo (flag foreground‑image). |
| SIGNATURENET‑5422 | ⚡ Miglioramento | Rimozione degli algoritmi di crittografia non sicuri (RC2, DES, TripleDES e modalità AES deboli). |
| SIGNATURENET‑5555 | 🐞 Correzione di bug | Risolto l’eccezione GeneratePreview() del type‑initializer per file DOC su Linux. |
Di seguito una breve panoramica tecnica delle modifiche più impattanti.
1. Firma digitale immagine (steganografia)
- Le firme sono nascoste nei bit meno significativi dei pixel PNG/JPG.
- Protette da password, compatibili con stream e funzionanti con qualsiasi dimensione immagine ≥ 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"
# Firma l'immagine
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("Immagine firmata correttamente!")
print(f"Firme aggiunte: {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 # opzionale 0‑100%
verify_result = signature.verify(verify_options)
if verify_result.is_valid:
print("La firma digitale è valida!")
print(f"Firme verificate: {len(verify_result.succeeded)}")
else:
print("La firma digitale non è valida o non è stata trovata.")
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"Firma rilevata con probabilità del {verify_options.detected_probability}%")
2. Rendering adattivo per anteprime Barcode & QR Code
Gli sviluppatori ora possono specificare width e height esatti per la generazione dell’anteprima, eliminando le incongruenze del precedente “auto‑size”.
import groupdocs.signature as gs
import groupdocs.signature.options as gso
import uuid
# Opzioni QR code
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"
# Generazione anteprima
preview_options = gso.PreviewSignatureOptions(
qr_sign_options,
create_signature_stream, # delegato fornito dall'utente
release_signature_stream # delegato fornito dall'utente
)
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 anteprime Barcode & QR
Imposta rotation_angle (gradi) sulle opzioni barcode/QR per renderizzare le 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 # ruota di 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. Nuovo supporto ai formati immagine – APNG & TGA
I file APNG (PNG animato) e TGA (Targa) possono ora essere usati come firme immagine, inseriti, visualizzati e verificati esattamente come PNG/JPG.
5. Trasparenza dello sfondo per anteprime Barcode/QR
Imposta la proprietà transparency (0 – 1) sulle opzioni barcode/QR per generare anteprime con canvas 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 # sfondo trasparente al 50 %
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 di sovrapposizione per firme digitali
PdfDigitalSignatureAppearance ora rispetta un’immagine di sovrapposizione e un colore di sfondo senza coprire l’immagine. Controlla il livello 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"
# Posizionamento firma visibile
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 # immagine in primo piano rispetto al testo
sign_options.appearance = appearance
sign_result = signature.sign(output_pdf, sign_options)
print(f"\nDocumento firmato correttamente con {len(sign_result.succeeded)} firma/e.")
print(f"File firmato salvato in: {output_pdf}")
7. Rafforzamento della sicurezza – rimozione di algoritmi non sicuri
RC2, DES, TripleDES e le modalità AES deboli sono state rimosse dallo stack crittografico. Sono disponibili solo algoritmi moderni approvati dal NIST, migliorando la postura di sicurezza predefinita dei documenti firmati.
8. Ottimizzazione delle query in stile LINQ
Le operazioni search e verify delle firme ora accettano funzioni predicato che filtrano le firme prima dei passaggi di elaborazione intensiva. Ciò riduce l’uso di memoria e velocizza le operazioni batch.
Ricerca con 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()]
# Mantieni solo le firme di testo che contengono la parola "Approved"
result = signature.search(search_options,
lambda sig: isinstance(sig, gsd.TextSignature) and "Approved" in sig.text)
for sig in result.signatures:
print(f"Trovata: {sig.text}")
Verifica con predicato
with gs.Signature("signed_document.pdf") as signature:
verify_options = gso.TextVerifyOptions("John Smith")
# Verifica solo le firme nella pagina 1
result = signature.verify(verify_options,
lambda sig: sig.page_number == 1)
print(f"Trovate {len(result)} firme verificate nella pagina 1")
9. Risolto crash della preview DOC su Linux
GeneratePreview() non solleva più una TypeInitializerException durante l’elaborazione di file Microsoft Word (.doc) su Linux, ripristinando la funzionalità di preview multipiattaforma.
Istruzioni per l’aggiornamento
pip install --upgrade groupdocs-signature-net
Nota: Il nome del pacchetto
groupdocs-signature-netè quello 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 & 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 best‑practice.