How to multiple sign without PdfLoadedSignatureField and the last signature lock Pdf for no signing anymore?

I can multiple signing. I would like to lock Pdf file at the last signing.

At "https://www.syncfusion.com/forums/176901/digital-signature-multiple-signatures-then-lock-document-issue-in-signing-and-validation", use "signature.IsLocked = true;". it don't work for me.  

This is my Pdf after multiple signing :


PdfLoadedDocument document = new PdfLoadedDocument("source.pdf");

PdfCertificate certificate = new PdfCertificate(@"D:\Certificate.p12", "password@1");

PdfSignature signature = new PdfSignature(document, document.Pages[0], certificate, "DigitalSignature1");

signature.DocumentPermissions = PdfCertificationFlags.AllowComments | PdfCertificationFlags.AllowFormFill

    | PdfCertificationFlags.ForbidChanges;

signature.Settings.CryptographicStandard = CryptographicStandard.CADES;

signature.Settings.DigestAlgorithm = DigestAlgorithm.SHA512;

MemoryStream stream = new MemoryStream();

signature.TimeStampServer = new TimeStampServer(new Uri("http://timestamp.testing.com"));

PdfImage image = PdfImage.FromFile(@"D:\signature.png");

if (!signature.TimeStampServer.IsValid)

{ Console.WriteLine("Time Stamp Server's invalided!"); }

else

{

    signature.Bounds = new RectangleF(40, 40, 350, 100);

    signature.ContactInfo = "[email protected]";

    signature.LocationInfo = "Honolulu, Hawaii";

    signature.Reason = "I am author of this document.";

    PdfStandardFont font = new PdfStandardFont(PdfFontFamily.Helvetica, 15);

    signature.Appearance.Normal.Graphics.DrawRectangle(PdfPens.Black, PdfBrushes.White, new System.Drawing.RectangleF(50, 0, 300, 100));

    signature.Appearance.Normal.Graphics.DrawImage(image, 0, 0, 100, 100);

    signature.Appearance.Normal.Graphics.DrawString("Digitally Signed by Syncfusion", font, PdfBrushes.Black, 120, 17);

    signature.Appearance.Normal.Graphics.DrawString("Reason: Testing signature", font, PdfBrushes.Black, 120, 39);

    signature.Appearance.Normal.Graphics.DrawString("Location: USA", font, PdfBrushes.Black, 120, 60);

    X509Certificate2 x5092 = new X509Certificate2(@"D:\CA.cer");

    signature.CreateLongTermValidity(new List<X509Certificate2> { x5092 });

}

document.Save(stream);

document.Close(true);

PdfLoadedDocument document2 = new PdfLoadedDocument(stream);

PdfCertificate certificate2 = new PdfCertificate(@"D:\Certificate2.p12", "password@2");

PdfSignature signature2 = new PdfSignature(document2, document2.Pages[0], certificate2, "DigitalSignature2");

signature2.DocumentPermissions = PdfCertificationFlags.AllowComments | PdfCertificationFlags.AllowFormFill

    | PdfCertificationFlags.ForbidChanges;

signature2.Settings.CryptographicStandard = CryptographicStandard.CADES;

signature2.Settings.DigestAlgorithm = DigestAlgorithm.SHA512;

signature2.TimeStampServer = new TimeStampServer(new Uri("http://timestamp.testing.com"));

if (!signature2.TimeStampServer.IsValid)

{ Console.WriteLine("Time Stamp Server's invalided!"); }

else

{

    signature2.Bounds = new RectangleF(40, 200, 350, 100);

    signature2.ContactInfo = "[email protected]";

    signature2.LocationInfo = "Honolulu, Hawaii";

    signature2.Reason = "I am author of this document.";

    PdfStandardFont font = new PdfStandardFont(PdfFontFamily.Helvetica, 15);

    signature2.Appearance.Normal.Graphics.DrawRectangle(PdfPens.Black, PdfBrushes.White, new System.Drawing.RectangleF(50, 0, 300, 100));

    signature2.Appearance.Normal.Graphics.DrawImage(image, 0, 0, 100, 100);

    signature2.Appearance.Normal.Graphics.DrawString("2Digitally Signed by Syncfusion", font, PdfBrushes.Black, 120, 17);

    signature2.Appearance.Normal.Graphics.DrawString("2Reason: Testing signature", font, PdfBrushes.Black, 120, 39);

    signature2.Appearance.Normal.Graphics.DrawString("2Location: USA", font, PdfBrushes.Black, 120, 60);

    X509Certificate2 x5092 = new X509Certificate2(@"D:\CA.cer");

    signature2.CreateLongTermValidity(new List<X509Certificate2> { x5092 });

}

document2.Save("MultipleSignature.pdf");

document2.Close(true);


2 Replies

AA achokchai Auk July 31, 2024 11:12 AM UTC

This is the multiple signed pdf.


Untitled2.png



JT Jeyalakshmi Thangamarippandian Syncfusion Team August 1, 2024 03:59 PM UTC

Hi achokchai,

Once the signature is locked, the PDF document is not digitally signed. We have created a sample, and we have attached it for your reference. Kindly try this on your end and let us know if you need any further assistance.

Code snippet:

PdfDocument document = new PdfDocument();

PdfPage page = document.Pages.Add();

//Adds certificate to the first signature field

FileStream fileStreamcert1 = new FileStream("../../../pdf.pfx", FileMode.Open, FileAccess.Read);

PdfCertificate certificate = new PdfCertificate(fileStreamcert1, "password123");

 

PdfSignature signature = new PdfSignature(document, page, certificate, "Signature");

signature.Bounds = new RectangleF(100, 0, 100, 100);

 

MemoryStream memoryStream = new MemoryStream();

document.Save(memoryStream);

File.WriteAllBytes("SignOutput.pdf", memoryStream.ToArray());

 

PdfLoadedDocument signedDocument = new PdfLoadedDocument(memoryStream);

 

PdfLoadedPage page1 = signedDocument.Pages[0] as PdfLoadedPage;

 

 

PdfSignature signature2 = new PdfSignature(signedDocument, page1, certificate, "Signature2");

signature2.Bounds = new RectangleF(50, 0, 100, 100);

//Saves the PDF document

 

MemoryStream stream = new MemoryStream();

 

   signedDocument.Save(stream); 

 

    File.WriteAllBytes("SignOutput2.pdf", stream.ToArray());

 

   signedDocument.Close(true);

  

 

signedDocument = new PdfLoadedDocument(stream);

 

page1 = signedDocument.Pages[0] as PdfLoadedPage;

 

 

signature2 = new PdfSignature(signedDocument, page1, certificate, "Signature3");

signature2.Bounds = new RectangleF(100, 0, 100, 100);

signature2.IsLocked = true;

 

MemoryStream stream2 = new MemoryStream();

 

signedDocument.Save(stream2);

 

File.WriteAllBytes("SignOutput3.pdf", stream2.ToArray());

signedDocument.Close(true);

// Close the document

 

document.Close(true);

 

Output: 

image

Regards,

Jeyalakshmi T


Loader.
Up arrow icon