Digital Signature in pdf using Itextsharp and also with Electronic Signature
public static void signPdfFile(string sourceDocument, string destinationPath, Stream privateKeyStream, string keyPassword, string reason, string location){
Pkcs12Store pk12 = new Pkcs12Store(privateKeyStream, keyPassword.ToCharArray());
privateKeyStream.Dispose();
//then Iterate throught certificate entries to find the private key entry
string alias = null;
foreach (string tAlias in pk12.Aliases)
{
if (pk12.IsKeyEntry(tAlias))
{
alias = tAlias;
break;
}
}
var pk = pk12.GetKey(alias).Key;
// reader and stamper
PdfReader reader = new PdfReader(sourceDocument);
using (FileStream fout = new FileStream(destinationPath, FileMode.Create, FileAccess.ReadWrite))
{
using (PdfStamper stamper = PdfStamper.CreateSignature(reader, fout, '\0'))
{
// appearance
PdfSignatureAppearance appearance = stamper.SignatureAppearance;
//appearance.Image = new iTextSharp.text.pdf.PdfImage();
appearance.Reason = reason;
appearance.Location = location;
appearance.SetVisibleSignature(new iTextSharp.text.Rectangle(20, 10, 170, 60), 1, "Icsi-Vendor");//.IsInvisible();//
iTextSharp.text.Image watermark = iTextSharp.text.Image.GetInstance("D:\\src_pdf\\sign.jpg");
appearance.Image = watermark;
appearance.Image.ScaleToFit(70, 70);
//appearance.Image.Alignment=100;
appearance.Image.SetAbsolutePosition(100, 100);
appearance.GetAppearance().AddImage(watermark);
//digital signature
IExternalSignature es = new PrivateKeySignature(pk, "SHA-256");
MakeSignature.SignDetached(appearance, es, new Org.BouncyCastle.X509.X509Certificate[] { pk12.GetCertificate(alias).Certificate }, null, null, null, 0, CryptoStandard.CMS);
stamper.Close();
}
}
/* using (Stream inputPdfStream = new FileStream(sourceDocument, FileMode.Open, FileAccess.Read, FileShare.Read))
using (Stream inputImageStream = new FileStream("D:\\src_pdf\\sign.jpg", FileMode.Open, FileAccess.Read, FileShare.Read))
using (Stream outputPdfStream = new FileStream(destinationPath, FileMode.Create, FileAccess.Write, FileShare.None))
{
var reader1 = new PdfReader(inputPdfStream);
var stamper = new PdfStamper(reader1, outputPdfStream);
var pdfContentByte = stamper.GetOverContent(1);
Image image = Image.GetInstance(inputImageStream);
image.SetAbsolutePosition(100, 100);
pdfContentByte.AddImage(image);
stamper.Close();
}*/
/* using (Stream input = new FileStream(destinationPath, FileMode.Open, FileAccess.Read, FileShare.Read))
using (Stream output = new FileStream("D:\\tgt_pdf\\sample4.pdf", FileMode.Create, FileAccess.Write, FileShare.None))
{
PdfReader reader1 = new PdfReader(input);
PdfEncryptor.Encrypt(reader1, output, true, "secret", "secret", PdfWriter.ALLOW_PRINTING);
}*/
}