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 px 的圖像。

為圖像簽章

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)

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

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 包裝器的名稱。


資源


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