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. 条形码 & 二维码预览的自适应渲染

开发者现在可以为预览生成指定精确的 widthheight,消除了之前“自动大小”带来的不一致。

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 风格的查询优化

签名 searchverify 现在接受 谓词函数,能够在执行耗时的处理步骤之前先过滤签名,从而降低内存占用并提升批量操作速度。

使用谓词进行搜索

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 的包装器。


资源


敬请期待后续发行,并关注官方博客获取性能技巧和最佳实践指南。