O que há de novo nesta versão

  • [Recurso] Suporte e validação de assinatura digital de imagem (SIGNATURENET‑5528)
    Introduz incorporação de assinaturas digitais baseada em esteganografia em imagens PNG e JPG. Suporta assinaturas protegidas por senha, manipulação de fluxo/arquivo, e verificação completa com limiares de detecção opcionais.

  • [Melhoria] Otimização de consultas LINQ para operações de assinatura (SIGNATURENET‑5500)
    Refatorou a lógica LINQ em toda a biblioteca para reduzir alocações de memória e melhorar a velocidade de execução. Adiciona filtragem baseada em predicado para os métodos Search e Verify, permitindo que desenvolvedores pré‑filtrarem assinaturas antes de processamento custoso.

Correções e aprimoramentos

  • [Correção de Bugs] Corrigida exceção do inicializador de tipo GeneratePreview() com formato DOC no Linux (SIGNATURENET‑5555)
    A exceção não é mais lançada ao gerar pré‑visualizações de documentos Microsoft Word em ambientes Linux.

Como usar os novos recursos

Assinando uma imagem (esteganografia)

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("Imagem assinada com sucesso!");
        Console.WriteLine($"Assinaturas adicionadas: {signResult.Succeeded.Count}");
    }
}

Verificando uma imagem assinada

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

    VerificationResult verifyResult = signature.Verify(verifyOptions);

    if (verifyResult.IsValid)
    {
        Console.WriteLine("Assinatura digital é válida!");
        Console.WriteLine($"Assinaturas verificadas: {verifyResult.Succeeded.Count}");
    }
    else
    {
        Console.WriteLine("Assinatura digital é inválida ou não encontrada.");
    }
}

Verificação avançada com extração completa de dados

using (Signature signature = new Signature("signed_image.png"))
{
    ImageDigitalVerifyOptions verifyOptions = new ImageDigitalVerifyOptions
    {
        Password = "MySecurePassword123",
        UseFullDataExtraction = true,          // precisão máxima
        DetectionThresholdPercent = 85
    };

    VerificationResult verifyResult = signature.Verify(verifyOptions);

    if (verifyResult.IsValid && verifyOptions.DetectedProbability.HasValue)
    {
        Console.WriteLine($"Assinatura detectada com probabilidade de {verifyOptions.DetectedProbability.Value}%");
    }
}

Busca otimizada com LINQ e predicado

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

    // Filtrar apenas assinaturas de texto contendo "Approved"
    SearchResult result = signature.Search(searchOptions,
        sig => sig is TextSignature txt && txt.Text.Contains("Approved"));

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

Verificação otimizada com LINQ e predicado

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

    // Verificar apenas assinaturas na página 1
    List<BaseSignature> result = signature.Verify(verifyOptions,
        sig => sig.PageNumber == 1);

    Console.WriteLine($"Encontradas {result.Count} assinaturas verificadas na página 1");
}

Como obter a atualização

  • NuGet – Atualize para a versão mais recente do pacote GroupDocs.Signature:
    dotnet add package GroupDocs.Signature --version 25.12
    
  • Download Direto – Baixe os assemblies compilados para .NET a partir da página oficial de lançamentos:
    GroupDocs.Signature for .NET 25.12 DLLs

Recursos