이번 릴리스의 새로운 내용

  • [Feature] 이미지 디지털 서명 지원 및 검증 (SIGNATURENET‑5528)
    PNG 및 JPG 이미지에 디지털 서명을 스테가노그래피 방식으로 삽입합니다. 비밀번호 보호 서명, 스트림/파일 처리 및 옵션 탐지 임계값이 있는 전체 검증을 지원합니다.

  • [Enhancement] 서명 작업을 위한 LINQ 쿼리 최적화 (SIGNATURENET‑5500)
    라이브러리 전반에 걸쳐 LINQ 로직을 재구성하여 메모리 할당을 줄이고 실행 속도를 향상시켰습니다. Search 및 Verify 메서드에 대해 조건식 기반 필터링을 추가하여 개발자가 비용이 많이 드는 처리 전에 서명을 사전 필터링할 수 있도록 합니다.

수정 및 개선 사항

  • [Bug Fix] Linux에서 DOC 형식 사용 시 GeneratePreview() 타입 초기화 예외 수정 (SIGNATURENET‑5555)
    Linux 환경에서 Microsoft Word 문서의 미리보기를 생성할 때 예외가 더 이상 발생하지 않습니다.

새로운 기능 사용 방법

이미지 서명 (스테가노그래피)

using GroupDocs.Signature;
using GroupDocs.Signature.Options;

string inputFile  = "image.png";
string outputFile = "signed_image.png";
string password   = "MySecurePassword123";

using (Signature signature = new Signature(inputFile))
{
    ImageDigitalSignOptions signOptions = new ImageDigitalSignOptions
    {
        Password = password
    };

    SignResult signResult = signature.Sign(outputFile, signOptions);

    if (signResult.Succeeded?.Count > 0)
    {
        Console.WriteLine("Image signed successfully!");
        Console.WriteLine($"Signatures added: {signResult.Succeeded.Count}");
    }
}

서명된 이미지 검증

using GroupDocs.Signature;
using GroupDocs.Signature.Options;

string signedFile = "signed_image.png";
string password   = "MySecurePassword123";

using (Signature signature = new Signature(signedFile))
{
    ImageDigitalVerifyOptions verifyOptions = new ImageDigitalVerifyOptions
    {
        Password = password,
        DetectionThresholdPercent = 75   // optional, 0‑100%
    };

    VerificationResult verifyResult = signature.Verify(verifyOptions);

    if (verifyResult.IsValid)
    {
        Console.WriteLine("Digital signature is valid!");
        Console.WriteLine($"Verified signatures: {verifyResult.Succeeded.Count}");
    }
    else
    {
        Console.WriteLine("Digital signature is invalid or not found.");
    }
}

전체 데이터 추출을 활용한 고급 검증

using (Signature signature = new Signature("signed_image.png"))
{
    ImageDigitalVerifyOptions verifyOptions = new ImageDigitalVerifyOptions
    {
        Password = "MySecurePassword123",
        UseFullDataExtraction = true,          // maximum accuracy
        DetectionThresholdPercent = 85
    };

    VerificationResult verifyResult = signature.Verify(verifyOptions);

    if (verifyResult.IsValid && verifyOptions.DetectedProbability.HasValue)
    {
        Console.WriteLine($"Signature detected with {verifyOptions.DetectedProbability.Value}% probability");
    }
}

조건식 기반 LINQ 최적화 검색

using GroupDocs.Signature;
using GroupDocs.Signature.Options;
using GroupDocs.Signature.Domain;

using (Signature signature = new Signature("document.pdf"))
{
    List<SearchOptions> searchOptions = new List<SearchOptions>
    {
        new TextSearchOptions()
    };

    // Filter only text signatures containing "Approved"
    SearchResult result = signature.Search(searchOptions,
        sig => sig is TextSignature txt && txt.Text.Contains("Approved"));

    foreach (BaseSignature sig in result.Signatures)
    {
        Console.WriteLine($"Found: {((TextSignature)sig).Text}");
    }
}

조건식 기반 LINQ 최적화 검증

using (Signature signature = new Signature("signed_document.pdf"))
{
    TextVerifyOptions verifyOptions = new TextVerifyOptions("John Smith");

    // Verify only signatures on page 1
    List<BaseSignature> result = signature.Verify(verifyOptions,
        sig => sig.PageNumber == 1);

    Console.WriteLine($"Found {result.Count} verified signatures on page 1");
}

업데이트 받는 방법

  • NuGet – 최신 GroupDocs.Signature 패키지로 업그레이드:

    dotnet add package GroupDocs.Signature --version 25.12
    
  • Direct Download – 공식 릴리스 페이지에서 .NET용 컴파일된 어셈블리를 다운로드:
    GroupDocs.Signature for .NET 25.12 DLLs

리소스