public void Sign(String src, String name, String dest, X509Certificate[] chain, ICipherParameters pk, String digestAlgorithm, PdfSigner.CryptoStandard subfilter, String reason, String location, PdfSignatureAppearance.RenderingMode renderingMode, ImageData image) { PdfReader reader = new PdfReader(src); PdfSigner signer = new PdfSigner(reader, new FileStream(dest, FileMode.Create), new StampingProperties()); // Create the signature appearance PdfSignatureAppearance appearance = signer.GetSignatureAppearance(); appearance.SetReason(reason); appearance.SetLocation(location); // This name corresponds to the name of the field that already exists in the document. signer.SetFieldName(name); appearance.SetLayer2Text("Signed on " + DateTime.Now); // Set the rendering mode for this signature. appearance.SetRenderingMode(renderingMode); // Set the Image object to render when the rendering mode is set to RenderingMode.GRAPHIC // or RenderingMode.GRAPHIC_AND_DESCRIPTION. appearance.SetSignatureGraphic(image); PrivateKeySignature pks = new PrivateKeySignature(pk, digestAlgorithm); // Sign the document using the detached mode, CMS or CAdES equivalent. signer.SignDetached(pks, chain, null, null, null, 0, subfilter); }
public static void Sign(string input, string output, ImageData stamper, ICipherParameters privateKey, X509Certificate[] chain, string flag) { PdfDocument document = new PdfDocument(new PdfReader(input)); PdfAcroForm acroForm = PdfAcroForm.GetAcroForm(document, false); bool append = (acroForm != null && acroForm.GetSignatureFlags() != 0); int pageNumber = document.GetNumberOfPages(); RegexBasedLocationExtractionStrategy strategy = new RegexBasedLocationExtractionStrategy(flag); PdfDocumentContentParser parser = new PdfDocumentContentParser(document); parser.ProcessContent(pageNumber, strategy); var locations = new List <IPdfTextLocation>(strategy.GetResultantLocations()); document.Close(); StampingProperties properties = new StampingProperties(); properties = append ? properties.UseAppendMode() : properties; PdfSigner signer = new PdfSigner(new PdfReader(input), new FileStream(output, FileMode.Create), properties); signer.SetCertificationLevel(PdfSigner.CERTIFIED_NO_CHANGES_ALLOWED); PdfSignatureAppearance appearance = signer.GetSignatureAppearance(); appearance.SetPageNumber(pageNumber); int size = locations.Count; if (size != 0) { IPdfTextLocation location = locations[size - 1]; float flagX = location.GetRectangle().GetX(); float flagY = location.GetRectangle().GetY(); float width = stamper.GetWidth(); float height = stamper.GetHeight(); float x = flagX - width / 2; float y = flagY - height / 2; appearance.SetRenderingMode(PdfSignatureAppearance.RenderingMode.GRAPHIC); appearance.SetSignatureGraphic(stamper); appearance.SetPageRect(new Rectangle(x, y, width, height)); } PrivateKeySignature signature = new PrivateKeySignature(privateKey, DigestAlgorithms.SHA256); signer.SignDetached(signature, chain, null, null, null, 0, PdfSigner.CryptoStandard.CADES); }
private static void ConfiguraAparencia(PdfSigner objStamper, CertSimples cert, int X, int Y, int Largura, int Altura, int Pagina, int Rotation, string Contact = "", string Reason = "Assinatura Digital", string Location = "Indústrias Nucleares do Brasil S/A - INB", string Creator = "Assinador da INB", TipoAssinatura Tipo = TipoAssinatura.Normal, string Cargo = "", string CREACRM = "") { PdfDocument pdfDoc = objStamper.GetDocument(); PdfPage oPage = pdfDoc.GetPage(Pagina); int LarguraAssinatura = Largura; int AlturaAssinatura = Altura; int X_Ajustado, Y_Ajustado; X_Ajustado = X; Y_Ajustado = Y; var crop = oPage.GetCropBox(); float Left, Top, Width, Height; Bitmap bmp = Graphic.ConfiguraBMP(cert, out Altura, Tipo); if (Rotation == 270) { Left = (int)crop.GetLeft() + X_Ajustado; Top = (int)crop.GetRight() - (Y_Ajustado + AlturaAssinatura + 5); } else if (Rotation == 90) { Left = (int)crop.GetRight() + X_Ajustado; Top = (int)crop.GetLeft() - (Y_Ajustado + AlturaAssinatura + 5); } else { Left = (int)crop.GetLeft() + X_Ajustado; Top = (int)crop.GetTop() - (Y_Ajustado + AlturaAssinatura + 5); } Width = LarguraAssinatura; Height = AlturaAssinatura; iText.Kernel.Geom.Rectangle oRetangulo = new iText.Kernel.Geom.Rectangle(Left, Top, Width, Height); var pageSize = pdfDoc.GetPage(Pagina).GetMediaBox(); var signaturePosition = new iText.Kernel.Geom.Rectangle(pageSize.GetLeft(), pageSize.GetBottom(), pageSize.GetWidth(), pageSize.GetHeight()); PdfSignatureAppearance signatureAppearance = objStamper.GetSignatureAppearance(); var memoryStream = new MemoryStream(); bmp.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Jpeg); iText.IO.Image.ImageData pic = iText.IO.Image.ImageDataFactory.Create(memoryStream.ToArray()); signatureAppearance.SetReason(Reason); signatureAppearance.SetLocation(Location); signatureAppearance.SetSignatureCreator(Creator); signatureAppearance.SetSignatureGraphic(pic); signatureAppearance.SetRenderingMode(PdfSignatureAppearance.RenderingMode.GRAPHIC); signatureAppearance.SetPageRect(oRetangulo); signatureAppearance.SetPageNumber(Pagina); }
protected void SignDocumentSignature(string filePath, ElectronicSignatureInfoDTO signatureInfo) { PdfSigner pdfSigner = new PdfSigner(new PdfReader(SRC), new FileStream(filePath, FileMode.Create), new StampingProperties()); pdfSigner.SetCertificationLevel(PdfSigner.CERTIFIED_NO_CHANGES_ALLOWED); // Set the name indicating the field to be signed. // The field can already be present in the document but shall not be signed pdfSigner.SetFieldName("signature"); ImageData clientSignatureImage = ImageDataFactory.Create(IMAGE_PATH); // If you create new signature field (or use SetFieldName(System.String) with // the name that doesn't exist in the document or don't specify it at all) then // the signature is invisible by default. PdfSignatureAppearance signatureAppearance = pdfSigner.GetSignatureAppearance(); signatureAppearance.SetRenderingMode(PdfSignatureAppearance.RenderingMode.GRAPHIC); signatureAppearance.SetReason(""); signatureAppearance.SetLocationCaption(""); signatureAppearance.SetSignatureGraphic(clientSignatureImage); signatureAppearance.SetPageNumber(signatureInfo.PageNumber); signatureAppearance.SetPageRect(new Rectangle(signatureInfo.Left, signatureInfo.Bottom, 25, 25)); char[] password = "******".ToCharArray(); IExternalSignature pks = GetPrivateKeySignature(CERT_PATH, password); X509Certificate[] chain = GetCertificateChain(CERT_PATH, password); OCSPVerifier ocspVerifier = new OCSPVerifier(null, null); OcspClientBouncyCastle ocspClient = new OcspClientBouncyCastle(ocspVerifier); List <ICrlClient> crlClients = new List <ICrlClient>(new[] { new CrlClientOnline() }); // Sign the document using the detached mode, CMS or CAdES equivalent. // This method closes the underlying pdf document, so the instance // of PdfSigner cannot be used after this method call pdfSigner.SignDetached(pks, chain, crlClients, ocspClient, null, 0, PdfSigner.CryptoStandard.CMS); }
public string Execute(SingInfo singInfo) { var inicioCertificado = DateTime.Now; var certificate = this.certificadoA3.Obter(); this.cadeiaTempo = this.certificadoA3.CadeiaCertificadoTempo(); this.MontarEstruturaCertificacao(certificate); var fimCertificado = DateTime.Now; var pdfAux = Path.Combine( Path.GetDirectoryName(singInfo.SourcePdf), Path.GetFileNameWithoutExtension(singInfo.SourcePdf) + "-aux.pdf"); var inicioAssinatura = DateTime.Now; using (var reader = new PdfReader(singInfo.SourcePdf)) { var stamping = new StampingProperties(); stamping.UseAppendMode(); var pdfSigner = new PdfSigner(reader, new FileStream(pdfAux, FileMode.Create), stamping); var caminhoFonte2 = @"C:\Windows\Fonts\cour.ttf"; PdfSignatureAppearance appearance = pdfSigner .GetSignatureAppearance() .SetReason(singInfo.SignatureReason) .SetLocation(singInfo.SignatureLocation) .SetReuseAppearance(false) .SetContact(singInfo.SignatureContact) .SetLayer2Font(PdfFontFactory.CreateFont(caminhoFonte2, iText.IO.Font.PdfEncodings.WINANSI, true)); appearance.SetRenderingMode(PdfSignatureAppearance.RenderingMode.DESCRIPTION); var pks = new X509Certificate2Signature(certificate, DigestAlgorithms.SHA256); Console.WriteLine("assinando..."); pdfSigner.SignDetached( pks, this.chain.ToArray(), this.crlList, this.ocspClient, this.tsaClient, EstimatedSize, CryptoStandard.CMS); } var fimAssinatura = DateTime.Now; var tempoAssinatura = fimAssinatura.Subtract(inicioAssinatura); var tempoCertificado = fimCertificado.Subtract(inicioCertificado); Console.WriteLine("Tempo Assinatura: {0}ms", tempoAssinatura.TotalMilliseconds); Console.WriteLine("Tempo Certificado: {0}ms", tempoCertificado.TotalMilliseconds); this.AdicionarLtv(pdfAux, singInfo); this.RemoverArquivoTemporario(pdfAux); return(singInfo.TargetPdf); }