- Home
- Forum
- ASP.NET Core - EJ 2
- How to multiple sign without PdfLoadedSignatureField and the last signature lock Pdf for no signing anymore?
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);
This is the multiple signed pdf.
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:
Regards,
Jeyalakshmi T
- 2 Replies
- 2 Participants
-
AA achokchai Auk
- Jul 31, 2024 11:11 AM UTC
- Aug 1, 2024 03:59 PM UTC