![]() |
Web Development »
ASP.NET »
General
Intermediate
License: The GNU Lesser General Public License
E-signing PDF documents with iTextSharpBy Alaa-eddine KADDOURIan example demonstrating how to sign PDF documents with iTextSharp library |
C#, .NET, WinXP, ASP.NET, Visual Studio, Dev
|
||||||||
|
Advanced Search Add to IE Search |
|
|
|
||||||||||||||||

In this article I will present a simple source code allowing you to digitally sign a PDF document and modify its Meta data.
I will use the excellent and free port of iText library : iTextSharp that can be downloaded here.
You'll need Visual Studio 2005 to be able to open and build the project
If you don�t know what are digital signatures or how does they work, you can go here or here or simply ask Google :)
iTextSharp provides a lot of interesting features to create and manipulate PDF documents, but in this article we will only use digital signature functions.
I will also use some function to manipulate pkcs#12 certificates, the only thing you need to know here is that our digital signature will use a private key extracted from a pkcs#12 certificate.
So the first thing you have to do is to install a certificate on your browser, if you don�t have one you can install demo certificate from here.
Then extract the pkcs#12 certificate as described bellow :
You are now ready to use the code provided in this article.
Using the signature example:
1 � compile and run the example
2 � browse to the PDF source file you want to sign
3 � browse and choose a destination pdf file
4 � add/modify the PDF meta data if you want
5 � browse to the certificate (the .pfx file) you just extracted and choose it
6 � give the password you used to extract the certificate
5 � add signature information if needed (reason, contact and location)
6 � click sign button
In the debug box you�ll see operaion�s progress
If everything goes well open your explorer and browse to location you entered for Target file, open this file with Adobe Acrobat reader, your document is signed! =)
In the source code provided with this article, I wrote library called PDFSigner, it�s a helper package that use iTextSharp and do everything you need for digital signatures.
It contains three classes
private void processCert()
{
string alias = null;
PKCS12Store pk12;
//First we'll read the certificate file
pk12 = new PKCS12Store(new FileStream(this.Path, FileMode.Open, FileAccess.Read), this.password.ToCharArray());
//then Iterate throught certificate entries to find the private key entry
IEnumerator i = pk12.aliases();
while (i.MoveNext())
{
alias = ((string)i.Current);
if (pk12.isKeyEntry(alias))
break;
}
this.akp = pk12.getKey(alias).getKey();
X509CertificateEntry[] ce = pk12.getCertificateChain(alias);
this.chain = new org.bouncycastle.x509.X509Certificate[ce.Length];
for (int k = 0; k < ce.Length; ++k)
chain[k] = ce[k].getCertificate();
}
This methode reads the certificate and iterate throught its entries to find the private key entry then extract it.
public void Sign(string SigReason, string SigContact, string SigLocation, bool visible)
{
PdfReader reader = new PdfReader(this.inputPDF);
//Activate MultiSignatures
PdfStamper st = PdfStamper.CreateSignature(reader, new FileStream(this.outputPDF, FileMode.Create, FileAccess.Write), '\0', null, true);
//To disable Multi signatures uncomment this line : every new signature will invalidate older ones !
//PdfStamper st = PdfStamper.CreateSignature(reader, new FileStream(this.outputPDF, FileMode.Create, FileAccess.Write), '\0');
st.MoreInfo = this.metadata.getMetaData();
st.XmpMetadata = this.metadata.getStreamedMetaData();
PdfSignatureAppearance sap = st.SignatureAppearance;
sap.SetCrypto(this.myCert.Akp, this.myCert.Chain, null, PdfSignatureAppearance.WINCER_SIGNED);
sap.Reason = SigReason;
sap.Contact = SigContact;
sap.Location = SigLocation;
if (visible)
sap.SetVisibleSignature(new iTextSharp.text.Rectangle(100, 100, 250, 150), 1, null);
st.Close();
}
this function reads the content of a given pdf , then it use the read data to create a new PDF using PDFStamper.Well, that�s all for now :) I hope that you found my first article useful � if you have any question or have any problem to build/run this example don�t hesitate to post a comment.
General
News
Question
Answer
Joke
Rant
Admin
|
PermaLink |
Privacy |
Terms of Use
Last Updated: 17 Jun 2006 Editor: |
Copyright 2006 by Alaa-eddine KADDOURI Everything else Copyright © CodeProject, 1999-2009 Web19 | Advertise on the Code Project |