Esempio n. 1
0
        /// <summary>
        /// Sign (fill) named field in the document soft way (using existing stamper)
        /// </summary>
        /// <param name="stamper">PdfStamper</param>
        /// <param name="fieldName">Field to be signed</param>
        /// <param name="reason">Sign reason</param>
        /// <param name="location">Sign location</param>
        /// <param name="graphics">Sign graphic</param>
        /// <param name="certFile">PFX certificate</param>
        /// <param name="certPassword">password of certificate</param>
        /// <param name="renderingMode">SignatureRender renderingMode</param>
        /// <param name="certificationLevel">PdfSignatureAppearance Certification Level</param>
        /// <returns>Successfull or not</returns>
        public static bool SignField(ref PdfStamper stamper,
                                     string fieldName,
                                     string reason,
                                     string location,
                                     Bitmap graphics,
                                     string certFile,
                                     string certPassword,
                                     PdfSignatureAppearance.SignatureRender renderingMode = PdfSignatureAppearance.SignatureRender.GraphicAndDescription,
                                     int certificationLevel = PdfSignatureAppearance.CERTIFIED_NO_CHANGES_ALLOWED)
        {
            bool result = false;

            try
            {
                if (stamper.Reader.AcroFields.Fields.ContainsKey(fieldName))
                {
                    PdfSignatureAppearance psa = GetPSA(fieldName, stamper, graphics, reason, location, renderingMode, certificationLevel);

                    Pkcs12Store store = new Pkcs12Store(new FileStream(certFile, FileMode.Open), certPassword.ToCharArray());
                    string      alias = "";
                    ICollection <X509Certificate> chain = new List <X509Certificate>();

                    foreach (string al in store.Aliases)
                    {
                        if (store.IsKeyEntry(al) && store.GetKey(al).Key.IsPrivate)
                        {
                            alias = al;
                            break;
                        }
                    }
                    AsymmetricKeyEntry ake = store.GetKey(alias);

                    foreach (X509CertificateEntry c in store.GetCertificateChain(alias))
                    {
                        chain.Add(c.Certificate);
                    }

                    RsaPrivateCrtKeyParameters parameters = ake.Key as RsaPrivateCrtKeyParameters;

                    psa.SetCrypto(parameters, chain.ToArray(), null, PdfSignatureAppearance.WINCER_SIGNED);

                    result = true;
                }
                else
                {
                    result = false;
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                result = false;
            }

            return(result);
        }
Esempio n. 2
0
        private static PdfSignatureAppearance GetPSA(string fieldName,
                                                     PdfStamper stamper,
                                                     Bitmap graphics,
                                                     string reason,
                                                     string location,
                                                     PdfSignatureAppearance.SignatureRender renderingMode,
                                                     int certLevel)
        {
            PdfSignatureAppearance psa = stamper.SignatureAppearance;

            psa.Acro6Layers        = true;
            psa.SignatureGraphic   = iTextSharp.text.Image.GetInstance(graphics, ImageFormat.Png);
            psa.Render             = renderingMode;
            psa.CertificationLevel = certLevel;
            psa.Reason             = reason;
            psa.Location           = location;
            psa.SetVisibleSignature(fieldName);

            return(psa);
        }