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

Reply via email to