Що нового в GroupDocs.Signature for Python 26.1 (січень 2026)

ID Категорія Короткий опис
SIGNATURENET‑5528 Функція Підтримка цифрового підпису зображень та їх валідації (стеганографічне впровадження LSB для PNG та JPG).
SIGNATURENET‑5445 Функція Адаптивне рендеринг попередніх переглядів підписів штрих‑коду та QR‑коду – явне керування шириною/висотою.
SIGNATURENET‑5479 Функція Підтримка обертання зображень попереднього перегляду штрих‑коду та QR‑коду.
SIGNATURENET‑5478 Функція Додана обробка форматів зображень APNG та TGA для підписів на основі зображень.
SIGNATURENET‑5500 Удосконалення Оптимізація LINQ‑подібних запитів для пошуку та верифікації підписів (фільтрація предикатами).
SIGNATURENET‑5480 Удосконалення Підтримка прозорості фону для попередніх переглядів штрих‑коду/QR‑коду.
SIGNATURENET‑5477 Удосконалення Підтримка накладання зображення для цифрових підписів з кольором фону (прапорець foreground‑image).
SIGNATURENET‑5422 Удосконалення Видалення небезпечних алгоритмів шифрування (RC2, DES, TripleDES та слабкі режими AES).
SIGNATURENET‑5555 🐞 Виправлення помилки Виправлено виключення GeneratePreview() типу ініціалізатора для DOC‑файлів у Linux.

Нижче наведено короткий технічний огляд найсуттєвіших змін.

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‑коду

Тепер розробники можуть вказувати точні 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. Підтримка обертання попередніх переглядів штрих‑коду та QR‑коду

Встановіть rotation_angle (у градусах) у параметрах штрих‑коду/QR‑коду, щоб отримати обернені попередні перегляди.

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‑коду

Встановіть властивість transparency (0 – 1) у параметрах штрих‑коду/QR‑коду, щоб створювати попередні перегляди з прозорим полотном.

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‑подібних запитів

Пошук та верифікація підписів тепер приймають функції‑предикати, які фільтрують підписи до важких обробних етапів. Це знижує використання пам’яті та пришвидшує пакетні операції.

Пошук з предикатом

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. Виправлення падіння попереднього перегляду DOC у Linux

GeneratePreview() більше не генерує TypeInitializerException під час обробки файлів Microsoft Word (.doc) у Linux, відновлюючи крос‑платформену функціональність попереднього перегляду.


Інструкції щодо оновлення

pip install --upgrade groupdocs-signature-net

Примітка: Ім’я пакету groupdocs-signature-net використовується для обгортки Python‑через‑.NET.


Ресурси


Слідкуйте за майбутніми випусками та слідкуйте за офіційним блогом, щоб отримувати поради щодо продуктивності та кращих практик.