이번 릴리스의 새로운 내용

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

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

수정 및 개선 사항

  • [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

리소스