GroupDocs.Signature for Python 26.1(2026年1月)新功能
| ID | 类别 | 摘要 |
|---|---|---|
| SIGNATURENET‑5528 | ✨ Feature | 支持图像数字签名及其验证(PNG 与 JPG 的最低有效位(LSB)隐写)。 |
| SIGNATURENET‑5445 | ✨ Feature | 条形码和二维码签名预览的自适应渲染 – 可显式控制宽度/高度。 |
| SIGNATURENET‑5479 | ✨ Feature | 为条形码和二维码预览图像添加旋转支持。 |
| SIGNATURENET‑5478 | ✨ Feature | 为基于图像的签名新增 APNG 与 TGA 图像格式的处理。 |
| SIGNATURENET‑5500 | ⚡ Enhancement | LINQ 风格的查询优化,用于签名搜索和验证(谓词过滤)。 |
| SIGNATURENET‑5480 | ⚡ Enhancement | 条形码/二维码预览的背景透明度支持。 |
| SIGNATURENET‑5477 | ⚡ Enhancement | 为带背景颜色的数字签名添加覆盖图像支持(前景图像标志)。 |
| SIGNATURENET‑5422 | ⚡ Enhancement | 移除不安全的加密算法(RC2、DES、TripleDES 以及弱 AES 模式)。 |
| SIGNATURENET‑5555 | 🐞 Bug Fix | 修复了在 Linux 上对 DOC 文件调用 GeneratePreview() 时出现的类型初始化器异常。 |
下面是对最具影响力的更改进行的简短技术演练。
1. 图像数字签名(隐写)
- 签名隐藏在 PNG/JPG 像素的最低有效位中。
- 支持密码保护、流兼容,且适用于任何宽高 ≥ 8 × 8 像素的图像。
对图像进行签名
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)}")
验证已签名的图像
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.")
高级验证(完整数据提取)
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. 条形码 & 二维码预览的自适应渲染
开发者现在可以为预览生成指定精确的 width 与 height,消除了之前“自动大小”带来的不一致。
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. 条形码 & 二维码预览的旋转支持
在条形码/二维码选项上设置 rotation_angle(单位:度)即可渲染旋转后的预览。
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. 新增图像格式支持 – APNG & TGA
APNG(动画 PNG)和 TGA(Targa)文件现可作为 图像签名 使用,插入、预览和验证方式与 PNG/JPG 完全相同。
5. 条形码/二维码预览的背景透明度
在条形码/二维码选项上设置 transparency 属性(取值 0 – 1)即可生成带透明画布的预览。
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. 为数字签名添加覆盖图像支持
PdfDigitalSignatureAppearance 现在在保留背景颜色的同时也支持覆盖图像。通过 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. 安全加固 – 移除不安全的算法
已从加密栈中 移除 RC2、DES、TripleDES 以及弱 AES 模式。仅保留现代、符合 NIST 标准的算法,从而提升签署文档的默认安全姿态。
8. LINQ 风格的查询优化
签名 search 与 verify 现在接受 谓词函数,能够在执行耗时的处理步骤之前先过滤签名,从而降低内存占用并提升批量操作速度。
使用谓词进行搜索
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()]
# 仅保留文本签名中包含 “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}")
使用谓词进行验证
with gs.Signature("signed_document.pdf") as signature:
verify_options = gso.TextVerifyOptions("John Smith")
# 仅验证第 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 预览崩溃
GeneratePreview() 在 Linux 处理 Microsoft Word(.doc)文件时不再抛出 TypeInitializerException,恢复了跨平台的预览功能。
升级指南
pip install --upgrade groupdocs-signature-net
注意: 包名
groupdocs-signature-net用于 Python 通过 .NET 的包装器。
资源
- 完整发行说明:(如有,请链接到官方发行说明页面)
- 文档: https://docs.groupdocs.com/signature/python/
- 社区与支持: https://forum.groupdocs.com/c/signature/10
敬请期待后续发行,并关注官方博客获取性能技巧和最佳实践指南。