GroupDocs.Signature for Python 26.1 (2026년 1월)에서 새로워진 점

ID 카테고리 요약
SIGNATURENET‑5528 기능 PNG 및 JPG에 대한 스테가노그래픽 LSB 삽입을 통한 이미지 디지털 서명 지원 및 검증.
SIGNATURENET‑5445 기능 바코드 및 QR 코드 서명 미리보기에 대한 적응형 렌더링 – 명시적인 너비/높이 제어.
SIGNATURENET‑5479 기능 바코드 및 QR 코드 미리보기 이미지에 대한 회전 지원.
SIGNATURENET‑5478 기능 이미지 기반 서명에 대한 APNG 및 TGA 이미지 포맷 처리를 추가.
SIGNATURENET‑5500 향상 서명 검색 및 검증을 위한 LINQ 스타일 쿼리 최적화(프레디케이트 필터링).
SIGNATURENET‑5480 향상 바코드/QR 미리보기에 대한 배경 투명도 지원.
SIGNATURENET‑5477 향상 배경 색상이 적용된 디지털 서명에 대해 오버레이 이미지 지원(전경 이미지 플래그).
SIGNATURENET‑5422 향상 보안에 취약한 암호화 알고리즘(RC2, DES, TripleDES 및 약한 AES 모드) 제거.
SIGNATURENET‑5555 🐞 버그 수정 GeneratePreview()이 Linux에서 DOC 파일 처리 시 발생하던 타입 초기자 예외를 수정.

아래는 가장 영향력 있는 변경 사항에 대한 간략한 기술적 walkthrough입니다.

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 코드 미리보기를 위한 적응형 렌더링

개발자는 이제 미리보기 생성 시 정확한 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}")

오버레이 이미지

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‑via‑.NET 래퍼에 사용됩니다.

리소스

향후 릴리스를 기대해 주시고, 공식 블로그에서 성능 팁 및 모범 사례 가이드를 확인해 주세요.