Що нового у 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 пікселів.

Підписування зображення

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)

Адаптивний QR‑перегляд

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

Пошук 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()]

    # 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.

Ресурси

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