Updating Text signature with advanced options

GroupDocs.Signature provides TextSignature class to manipulate text signatures location, size and textual content over Update method of Signature class. This method returns UpdateResult object to analyze if signatures were successfully processed.

Please be aware that Update method modifies the same document that was passed to constructor of Signature class. The UpdateResult contains list of successfully updated signatures and ones that failed. The Text signature could be failed to update due to several reasons:

  • if signature object was initialized with constructor by incorrect signature identifier;
  • if signature object was not found;
  • there was an error occurred while updating signature in the document.

Here are the steps to update Text signature in the document with GroupDocs.Signature:

  • Create new instance of Signature class and pass source document path as a constructor parameter;
  • Instantiate TextSearchOptions object with desired properties;
  • Call Search method to obtain list of TextSignatures;
  • Select from list TextSignature object(s) that should be updated;
  • Call Signature object Update method and pass one or several signatures to it.
  • Analyze UpdateResult result to check whether signatures were updated or not.

Here are the alternative steps to update Text signature in the document with GroupDocs.Signature. This approach is based on saved signatures Id after Search or Sign methods.

  • Create new instance of Signature class and pass source document path as a constructor parameter;
  • Instantiate one or several TextSignature objects with signature Id(s) passed to constructor;
  • Call Signature class object Update method and pass one or several signatures to it;
  • Analyze UpdateResult result to check whether signatures were updated or not.

The following table describes changeable properties for Text signatures dependent on document type.

Document Type / Signature PropertyLeftTopWidthHeightTextIsSignature
Image(error)(error)(error)(error)(error)(error)
Spreadsheet(tick)(tick)(tick)(tick)(tick)(tick)
Pdf(tick)(tick)(tick)(tick)(tick)(tick)
Presentation(tick)(tick)(tick)(tick)(tick)(tick)
Word Processing(tick)(tick)(tick)(tick)(tick)(tick)

This example shows how to update Text signature that was found using Search method.

//
using (Signature signature = new Signature("sampleSigned.pdf"))
{
    TextSearchOptions options = new TextSearchOptions();
    // search for text signatures in document
    List<TextSignature> signatures = signature.Search<TextSignature>(options);
    // adjust signature properties
    foreach(TextSignature temp in signatures)
    {
        // apply some condition to adjust signature properties
        if(temp.Text == "Test1")
        {
            temp.Left = temp.Left + 10;
            temp.Text = "Test2";
        }
        temp.IsSignature = true;
    }
    // update all found signatures
    UpdateResult updateResult = signature.Update(signatures.ConvertAll(p => (BaseSignature)p));
    if (updateResult.Succeeded.Count == signatures.Count)
    {
        Console.WriteLine("All signatures were successfully updated!");
    }
    else
    {
        Console.WriteLine($"Successfully updated signatures : {updateResult.Succeeded.Count}");
        Console.WriteLine($"Not updated signatures : {updateResult.Failed.Count}");
    }
    Console.WriteLine("List of updated signatures:");
    foreach (BaseSignature temp in updateResult.Succeeded)
    {
        Console.WriteLine($"Signature# Id:{temp.SignatureId}, Location: {temp.Left}x{temp.Top}. Size: {temp.Width}x{temp.Height}");
    }
}

Update Text signature in document by known signature Identifier

This example shows how to update Text signature in the document by known signature Id (that was obtained by Search or Sign method previously) and analyze result.

// initialize Signature instance
using (Signature signature = new Signature(outputFilePath))
{
    // read from some data source signature Id value
    string[] signatureIdList = new string[]
    {
        "1dd21cf3-b904-4da9-9413-1ff1dab51974",
        "9e386726-a773-4971-b2fc-eaadfce65ffd"
    };
    // create list of Text Signature by known SignatureId
    List<BaseSignature> signatures = new List<BaseSignature>();
    signatureIdList.ToList().ForEach(p => signatures.Add(new TextSignature(p)));
    // update all found signatures
    UpdateResult updateResult = signature.Update(signatures);
    if (updateResult.Succeeded.Count == signatures.Count)
    {
        Console.WriteLine("\nAll signatures were successfully updated!");
    }
    else
    {
        Console.WriteLine($"Successfully updated signatures : {updateResult.Succeeded.Count}");
        Console.WriteLine($"Not updated signatures : {updateResult.Failed.Count}");
    }
    Console.WriteLine("List of updated signatures:");
    foreach (BaseSignature temp in updateResult.Succeeded)
    {
        Console.WriteLine($"Signature# Id:{temp.SignatureId}, Location: {temp.Left}x{temp.Top}. Size: {temp.Width}x{temp.Height}");
    }
}

More resources

GitHub Examples

You may easily run the code above and see the feature in action in our GitHub examples:

Free Online Apps

Along with the full-featured .NET library, we provide simple but powerful free online apps.

To sign PDF, Word, Excel, PowerPoint, and other documents you can use the online apps from the GroupDocs.Signature App Product Family.