GroupDocs.Signature for Python 26.1 (2026 年 1 月) 的新功能

ID 類別 摘要
SIGNATURENET‑5528 功能 支援影像數位簽章並進行驗證(對 PNG 與 JPG 進行隱寫式 LSB 嵌入)。
SIGNATURENET‑5445 功能 條碼與 QR Code 簽章預覽的自適應呈現 – 可明確控制寬度/高度。
SIGNATURENET‑5479 功能 支援條碼與 QR Code 預覽圖的旋轉。
SIGNATURENET‑5478 功能 新增對 APNG 與 TGA 影像格式的支援,可用於影像式簽章。
SIGNATURENET‑5500 增強 以 LINQ 風格的查詢最佳化,用於簽章搜尋與驗證(謂詞過濾)。
SIGNATURENET‑5480 增強 在條碼/QR 預覽中支援背景透明度。
SIGNATURENET‑5477 增強 在數位簽章中支援疊加圖像與背景顏色(前景圖像旗標)。
SIGNATURENET‑5422 增強 移除不安全的加密演算法(RC2、DES、TripleDES 以及弱 AES 模式)。
SIGNATURENET‑5555 🐞 錯誤修復 修正 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. 條碼與 QR Code 預覽的自適應呈現

開發者現在可以為預覽產生指定精確的 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)

自適應 QR 預覽

3. 條碼與 QR 預覽的旋轉支援

在條碼/QR 選項上設定 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. 條碼/QR 預覽的背景透明度

在條碼/QR 選項上設定 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}")

Overlay image

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()]

    # 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}")

使用謂詞進行驗證

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. 修正 Linux 上 DOC 預覽崩潰問題

GeneratePreview() 在 Linux 上處理 Microsoft Word(.doc)檔案時不再拋出 TypeInitializerException,恢復跨平台的預覽功能。

升級說明

pip install --upgrade groupdocs-signature-net

注意: 套件名稱 groupdocs-signature-net 為 Python 透過 .NET 的包裝器使用。

資源

敬請關注即將推出的版本,並持續留意官方部落格以獲取效能技巧與最佳實踐指南。