Hellow: Here is my code for multiple signatures with Certification Level "CERTIFIED_FORM_FILLING_AND_ANNOTATIONS". When add "Signature1" at Blank Signature Form Field, the previous signature (certified) break. Excuse me. I am from Argentina. I can not write English very well.
Step 1: Add blank Signature1 field stp = new PdfStamper(reader, fout.getOutputStream(),'\0',true); PdfFormField sig = PdfFormField.createSignature(stp.getWriter()); sig.setWidget(new Rectangle(350, 100, 590, 200), null); sig.setFieldFlags(PdfAnnotation.FLAGS_PRINT); sig.put(PdfName.DA, new PdfString("/Helv 0 Tf 0 g")); sig.setFieldName("Signature1"); sig.setPage(1); stp.addAnnotation(sig, 1); stp.close(); Step 2: Add Signature2 with Certification Level stp = PdfStamper.createSignature(reader, fout.getOutputStream(), '\0',null,true); PdfSignatureAppearance sap = stp.getSignatureAppearance(); sap.setCrypto(key, chain, null, PdfSignatureAppearance.WINCER_SIGNED); sap.setReason(razon); sap.setLocation(localidad); sap.setCertificationLevel(PdfSignatureAppearance.CERTIFIED_FORM_FILLING_AND_ANNOTATIONS); int cant_paginas = reader.getNumberOfPages(); Calendar signingDate = sap.getSignDate(); Format formatter = new SimpleDateFormat("dd/MM/yyyy"); fecha_firma = new String(formatter.format(signingDate.getTime()) + " " + new Time(signingDate.getTimeInMillis()).toString()); Certificate[] certChain = sap.getCertChain(); String digitallySignedBy = "" + PdfPKCS7.getSubjectFields((X509Certificate)certChain[0]).getField("DN") + "\n"; digitallySignedBy = PdfPKCS7.getSubjectFields((X509Certificate)certChain[0]).getField("CN") + "\n"; if (PdfPKCS7.getSubjectFields((X509Certificate)certChain[0]).getField("T") != null) digitallySignedBy = digitallySignedBy + PdfPKCS7.getSubjectFields((X509Certificate)certChain[0]).getField("T") + "\n"; if (PdfPKCS7.getSubjectFields((X509Certificate)certChain[0]).getField("O") != null) digitallySignedBy = digitallySignedBy + PdfPKCS7.getSubjectFields((X509Certificate)certChain[0]).getField("O") + "\n"; if (PdfPKCS7.getSubjectFields((X509Certificate)certChain[0]).getField("OU") != null) digitallySignedBy = digitallySignedBy + PdfPKCS7.getSubjectFields((X509Certificate)certChain[0]).getField("OU") + "\n"; digitallySignedBy = digitallySignedBy + "\n"; digitallySignedBy = digitallySignedBy + "Fecha de firma:" + formatter.format(signingDate.getTime()) + "\n"; sap.setLayer2Font(new Font(Font.TIMES_ROMAN, 10, Font.ITALIC, Color.BLUE)); sap.setLayer2Text(digitallySignedBy); sap.setImage(Image.getInstance(PDFSigner.class.getClassLoader().getResource("image/marcafirma.png"))); sap.setAcro6Layers(true); sap.setVisibleSignature(rectangulo, cant_paginas, null); sap.setExternalDigest(null, new byte[20], null); sap.preClose(); MessageDigest messageDigest = MessageDigest.getInstance("SHA1"); byte buf[] = new byte[8192]; int n; InputStream inp = sap.getRangeStream(); while ((n = inp.read(buf)) > 0) { messageDigest.update(buf, 0, n); } byte hash[] = messageDigest.digest(); PdfSigGenericPKCS sg = sap.getSigStandard(); PdfLiteral slit = (PdfLiteral)sg.get(PdfName.CONTENTS); byte[] outc = new byte[(slit.getPosLength() - 2) / 2]; PdfPKCS7 sig = sg.getSigner(); sig.setExternalDigest(null, hash, null); PdfDictionary dic = new PdfDictionary(); byte[] ssig = sig.getEncodedPKCS7(); System.arraycopy(ssig, 0, outc, 0, ssig.length); dic.put(PdfName.CONTENTS, new PdfString(outc).setHexWriting(true)); sap.close(dic); Step 3: Fill form field Signature1 stp = PdfStamper.createSignature(reader, fout.getOutputStream(),'\0',null,true)); PdfSignatureAppearance sap = stp.getSignatureAppearance(); sap.setVisibleSignature("Signature1"); sap.setCrypto(key, chain, null, PdfSignatureAppearance.WINCER_SIGNED); sap.setReason(razon); sap.setLocation(localidad); int cant_paginas = reader.getNumberOfPages(); Calendar signingDate = sap.getSignDate(); Format formatter = new SimpleDateFormat("dd/MM/yyyy"); fecha_firma = new String(formatter.format(signingDate.getTime()) + " " + new Time(signingDate.getTimeInMillis()).toString()); Certificate[] certChain = sap.getCertChain(); String digitallySignedBy = "" + PdfPKCS7.getSubjectFields((X509Certificate)certChain[0]).getField("DN") + "\n"; digitallySignedBy = PdfPKCS7.getSubjectFields((X509Certificate)certChain[0]).getField("CN") + "\n"; if (PdfPKCS7.getSubjectFields((X509Certificate)certChain[0]).getField("T") != null) digitallySignedBy = digitallySignedBy + PdfPKCS7.getSubjectFields((X509Certificate)certChain[0]).getField("T") + "\n"; if (PdfPKCS7.getSubjectFields((X509Certificate)certChain[0]).getField("O") != null) digitallySignedBy = digitallySignedBy + PdfPKCS7.getSubjectFields((X509Certificate)certChain[0]).getField("O") + "\n"; if (PdfPKCS7.getSubjectFields((X509Certificate)certChain[0]).getField("OU") != null) digitallySignedBy = digitallySignedBy + PdfPKCS7.getSubjectFields((X509Certificate)certChain[0]).getField("OU") + "\n"; digitallySignedBy = digitallySignedBy + "\n"; digitallySignedBy = digitallySignedBy + "Fecha de firma:" + formatter.format(signingDate.getTime()) + "\n"; sap.setLayer2Font(new Font(Font.TIMES_ROMAN, 10, Font.ITALIC, Color.BLUE)); sap.setLayer2Text(digitallySignedBy); sap.setImage(Image.getInstance(PDFSigner.class.getClassLoader().getResource("image/marcafirma.png"))); sap.setAcro6Layers(true); sap.setExternalDigest(null, new byte[20], null); sap.preClose(); MessageDigest messageDigest = MessageDigest.getInstance("SHA1"); byte buf[] = new byte[8192]; int n; InputStream inp = sap.getRangeStream(); while ((n = inp.read(buf)) > 0) { messageDigest.update(buf, 0, n); } byte hash[] = messageDigest.digest(); PdfSigGenericPKCS sg = sap.getSigStandard(); PdfLiteral slit = (PdfLiteral)sg.get(PdfName.CONTENTS); byte[] outc = new byte[(slit.getPosLength() - 2) / 2]; PdfPKCS7 sig = sg.getSigner(); sig.setExternalDigest(null, hash, null); PdfDictionary dic = new PdfDictionary(); byte[] ssig = sig.getEncodedPKCS7(); System.arraycopy(ssig, 0, outc, 0, ssig.length); dic.put(PdfName.CONTENTS, new PdfString(outc).setHexWriting(true)); sap.close(dic); Please, can you help me to see my error? Thanks ----------------------------------- Visite nuestra página en Internet: http://www.mendoza.edu.ar Dirección General de Escuelas MENDOZA - ARGENTINA ----------------------------------- ~ ------------------------------------------------------------------------- This SF.net email is sponsored by the 2008 JavaOne(SM) Conference Don't miss this year's exciting event. There's still time to save $100. Use priority code J8TL2D2. http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone _______________________________________________ iText-questions mailing list iText-questions@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/itext-questions Do you like iText? Buy the iText book: http://www.1t3xt.com/docs/book.php Or leave a tip: https://tipit.to/itexttipjar