Co nowego w tej wersji

  • [Feature] Obsługa i weryfikacja cyfrowych podpisów w obrazach (SIGNATURENET‑5528)
    Wprowadza osadzanie cyfrowych podpisów w obrazach PNG i JPG przy użyciu steganografii. Obsługuje podpisy chronione hasłem, obsługę strumieni/plików oraz pełną weryfikację z opcjonalnymi progami wykrywania.

  • [Enhancement] Optymalizacja zapytań LINQ dla operacji podpisów (SIGNATURENET‑5500)
    Przepisano logikę LINQ w całej bibliotece, aby zmniejszyć alokacje pamięci i przyspieszyć wykonanie. Dodano filtrowanie oparte na predykacie dla metod Search i Verify, umożliwiając programistom wstępne odfiltrowanie podpisów przed kosztownym przetwarzaniem.

Poprawki i udoskonalenia

  • [Bug Fix] Naprawiono wyjątek inicjalizatora typu w GeneratePreview() przy formacie DOC w systemie Linux (SIGNATURENET‑5555)
    Wyjątek nie jest już zgłaszany podczas generowania podglądów dokumentów Microsoft Word w środowiskach Linux.

Jak używać nowych funkcji

Podpisywanie obrazu (steganografia)

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("Obraz pomyślnie podpisany!");
        Console.WriteLine($"Dodano podpisy: {signResult.Succeeded.Count}");
    }
}

Weryfikacja podpisanego obrazu

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   // opcjonalne, 0‑100%
    };

    VerificationResult verifyResult = signature.Verify(verifyOptions);

    if (verifyResult.IsValid)
    {
        Console.WriteLine("Cyfrowy podpis jest prawidłowy!");
        Console.WriteLine($"Zweryfikowane podpisy: {verifyResult.Succeeded.Count}");
    }
    else
    {
        Console.WriteLine("Cyfrowy podpis jest nieprawidłowy lub nie został znaleziony.");
    }
}

Zaawansowana weryfikacja z pełnym wyodrębnianiem danych

using (Signature signature = new Signature("signed_image.png"))
{
    ImageDigitalVerifyOptions verifyOptions = new ImageDigitalVerifyOptions
    {
        Password = "MySecurePassword123",
        UseFullDataExtraction = true,          // maksymalna dokładność
        DetectionThresholdPercent = 85
    };

    VerificationResult verifyResult = signature.Verify(verifyOptions);

    if (verifyResult.IsValid && verifyOptions.DetectedProbability.HasValue)
    {
        Console.WriteLine($"Podpis wykryty z prawdopodobieństwem {verifyOptions.DetectedProbability.Value}%");
    }
}

Wyszukiwanie zoptymalizowane LINQ z predykatem

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()
    };

    // Filtruj tylko podpisy tekstowe zawierające "Approved"
    SearchResult result = signature.Search(searchOptions,
        sig => sig is TextSignature txt && txt.Text.Contains("Approved"));

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

Weryfikacja zoptymalizowana LINQ z predykatem

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

    // Weryfikuj tylko podpisy na stronie 1
    List<BaseSignature> result = signature.Verify(verifyOptions,
        sig => sig.PageNumber == 1);

    Console.WriteLine($"Znaleziono {result.Count} zweryfikowanych podpisów na stronie 1");
}

Jak uzyskać aktualizację

  • NuGet – Zaktualizuj do najnowszego pakietu GroupDocs.Signature:
    dotnet add package GroupDocs.Signature --version 25.12
    
  • Direct Download – Pobierz skompilowane zestawy dla .NET z oficjalnej strony wydania:
    GroupDocs.Signature for .NET 25.12 DLLs

Zasoby