Nouveautés de GroupDocs.Signature pour Python 26.1 (janvier 2026)
| ID | Catégorie | Résumé |
|---|---|---|
| SIGNATURENET‑5528 | ✨ Fonctionnalité | Prise en charge et validation des signatures numériques d’image (intégration stéganographique du bit de poids faible pour PNG & JPG). |
| SIGNATURENET‑5445 | ✨ Fonctionnalité | Rendu adaptatif des aperçus de signatures Barcode et QR Code – contrôle explicite de la largeur/hauteur. |
| SIGNATURENET‑5479 | ✨ Fonctionnalité | Prise en charge de la rotation des images d’aperçu Barcode et QR Code. |
| SIGNATURENET‑5478 | ✨ Fonctionnalité | Ajout de la prise en charge des formats d’image APNG et TGA pour les signatures basées sur des images. |
| SIGNATURENET‑5500 | ⚡ Amélioration | Optimisation des requêtes de type LINQ pour la recherche et la vérification de signatures (filtrage par prédicat). |
| SIGNATURENET‑5480 | ⚡ Amélioration | Prise en charge de la transparence de l’arrière-plan pour les aperçus Barcode/QR. |
| SIGNATURENET‑5477 | ⚡ Amélioration | Prise en charge d’une image superposée pour les signatures numériques avec couleur d’arrière-plan (drapeau image‑premier‑plan). |
| SIGNATURENET‑5422 | ⚡ Amélioration | Suppression des algorithmes de chiffrement non sécurisés (RC2, DES, TripleDES et modes AES faibles). |
| SIGNATURENET‑5555 | 🐞 Correction de bogue | Correction de l’exception GeneratePreview() du type‑initialiseur pour les fichiers DOC sous Linux. |
Voici un bref aperçu technique des changements les plus impactants.
1. Signature numérique d’image (stéganographie)
- Les signatures sont cachées dans les bits de poids faible des pixels PNG/JPG.
- Protégées par mot de passe, compatibles avec les flux, et fonctionnent avec toute taille d’image ≥ 8 × 8 px.
Signer une 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)}")
Vérifier une image signée
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.")
Validation avancée (extraction complète des données)
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. Rendu adaptatif pour les aperçus Barcode et QR Code
Les développeurs peuvent désormais spécifier une width et une height exactes pour la génération d’aperçu, éliminant les incohérences de « taille automatique » précédentes.
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. Prise en charge de la rotation pour les aperçus Barcode et QR
Définissez rotation_angle (degrés) sur les options barcode/QR pour rendre des aperçus tournés.
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. Prise en charge de nouveaux formats d’image – APNG et TGA
Les fichiers APNG (PNG animé) et TGA (Targa) peuvent désormais être utilisés comme signatures d’image, insérés, prévisualisés et vérifiés exactement comme les PNG/JPG.
5. Transparence de l’arrière‑plan pour les aperçus Barcode/QR
Définissez la propriété transparency (0 – 1) sur les options barcode/QR pour générer des aperçus avec un canevas transparent.
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. Prise en charge d’une image superposée pour les signatures numériques
PdfDigitalSignatureAppearance accepte désormais une image superposée et une couleur d’arrière‑plan sans masquer l’image. Contrôlez le superposition 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}")
7. Renforcement de la sécurité – suppression des algorithmes non sécurisés
RC2, DES, TripleDES et les modes AES faibles ont été supprimés de la pile cryptographique. Seuls les algorithmes modernes, approuvés par le NIST, sont disponibles, améliorant la posture de sécurité par défaut des documents signés.
8. Optimisation de requêtes de type LINQ
Les méthodes search et verify des signatures acceptent désormais des fonctions prédicats qui filtrent les signatures avant les étapes de traitement intensif. Cela réduit l’utilisation de mémoire et accélère les opérations par lots.
Recherche avec un prédicat
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}")
Vérification avec un prédicat
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. Correction du plantage d’aperçu DOC sous Linux
GeneratePreview() ne lance plus de TypeInitializerException lors du traitement des fichiers Microsoft Word (.doc) sous Linux, restaurant la fonctionnalité d’aperçu multiplateforme.
Instructions de mise à jour
pip install --upgrade groupdocs-signature-net
Remarque : Le nom du paquet
groupdocs-signature-netest utilisé pour le wrapper Python‑via‑.NET.
Ressources
- Notes de version complètes : (link to the official release notes page, if available)
- Documentation: https://docs.groupdocs.com/signature/python/
- Communauté & Support : https://forum.groupdocs.com/c/signature/10
Restez à l’affût des prochaines versions et surveillez le blog officiel pour des conseils de performance et des guides de bonnes pratiques.