private void BuildSignatureAppearance(PdfSigner signer, Signature signing) { // Creating the appearance PdfSignatureAppearance appearance = signer.GetSignatureAppearance(); appearance.SetReason(signing.SignReason); appearance.SetContact(signing.SignContact); appearance.SetLocation(signing.SignLocation); var arial = PdfFontFactory.CreateFont(Environment.GetEnvironmentVariable("WINDIR") + "\\Fonts\\Arial.ttf", PdfName.WinAnsiEncoding.GetValue(), true); appearance.SetLayer2Font(arial); if (!signing.AllowMultiSigning) { signer.SetCertificationLevel(PdfSigner.CERTIFIED_FORM_FILLING_AND_ANNOTATIONS); appearance.SetCertificate(signer.GetSignatureAppearance().GetCertificate()); } if (signing.DisplaySignatureInDocument) { var signPage = SignPageNr(signer, signing); var left = signing.LeftX; var bottom = signing.LeftY; var width = signing.RightX - left; var height = signing.RightY - bottom; var rect = new Rectangle(left, bottom, width, height); appearance.SetPageRect(rect); appearance.SetPageNumber(signPage); } }
public byte[] GenerirajPotpisaniDokument(byte[] document, string documentName, string signingReason, string signingLocation) { try { string alias = ""; List <Org.BouncyCastle.X509.X509Certificate> chain = new List <Org.BouncyCastle.X509.X509Certificate>(); var location = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, AppDomain.CurrentDomain.RelativeSearchPath ?? ""); //var destinationPath = $@"Data\{documentName}"; //destinationPath = Path.Combine(location, destinationPath); var destinationPath = iConfig["DocumentDestinationPath"] + documentName; var certPath = @"C:\Users\Crega\Source\Repos\PdfSigner\PdfSigner\bin\Debug\netcoreapp3.0\certifikat.pfx"; certPath = Path.Combine(location, certPath); var cert = File.ReadAllBytes(certPath); Stream certStream = new MemoryStream(cert); Pkcs12Store store = new Pkcs12Store(certStream, "12345".ToCharArray()); // searching for private key foreach (string al in store.Aliases) { if (store.IsKeyEntry(al) && store.GetKey(al).Key.IsPrivate) { alias = al; break; } } AsymmetricKeyEntry pk = store.GetKey(alias); foreach (X509CertificateEntry c in store.GetCertificateChain(alias)) { chain.Add(c.Certificate); } RsaPrivateCrtKeyParameters parameters = pk.Key as RsaPrivateCrtKeyParameters; Stream documentStream = new MemoryStream(document); PdfReader reader = new PdfReader(documentStream); FileStream os = new FileStream(destinationPath, FileMode.Create); StampingProperties sp = new StampingProperties(); iText.Signatures.PdfSigner signer = new iText.Signatures.PdfSigner(reader, os, sp); PdfSignatureAppearance appearance = signer.GetSignatureAppearance(); appearance.SetReason(signingReason); appearance.SetLocation(signingLocation); appearance.SetContact("*****@*****.**"); //appearance.SetPageRect(new iText.Kernel.Geom.Rectangle(36, 748, 144, 780)); appearance.SetPageNumber(1); appearance.SetCertificate(chain[0]); // Creating the signature IExternalSignature pks = new PrivateKeySignature(parameters, DigestAlgorithms.SHA256); signer.SignDetached(pks, chain.ToArray(), null, null, null, 0, iText.Signatures.PdfSigner.CryptoStandard.CADES); //MakeSignature.SignDetached(appearance, pks, chain, null, null, null, 0, PdfSigner.CryptoStandard.CADES); os.Close(); certStream.Close(); var documentToReturn = File.ReadAllBytes(destinationPath); File.Delete(destinationPath); return(documentToReturn); } catch (Exception ex) { } return(null); }