Hi. I'm using VB.net Itextsharp 4.1.6.

I want to sign a PDF but i get an error in "sap.PreClose(exc)" (invalid
cast) 
this is the code (taken from  How to sign a PDF using iText.mht .net 2.0)
but i can't understand why.


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
        Dim FCert As String = "\\sypdc\transito\x
davide\ItEXTtEST\Firma\SYGEST_Administrator_21_10_2009.cer"
        Dim FromF As String = "\\sypdc\transito\x
davide\ItEXTtEST\Firma\Progettista.PDF"
        Dim Tof As String = "\\sypdc\transito\x
davide\ItEXTtEST\Firma\ProgettistaFIRM.PDF"


        Dim Card As X509Certificate2 = New
X509Certificate2(X509Certificates.X509Certificate2.CreateFromCertFile(FCert))

  
        Dim ms As IO.MemoryStream = New IO.MemoryStream(Card.RawData)

        Dim bcCert As Org.BouncyCastle.X509.X509Certificate = New
Org.BouncyCastle.X509.X509Certificate(Org.BouncyCastle.Asn1.X509.X509CertificateStructure.GetInstance(New
Org.BouncyCastle.Asn1.Asn1InputStream(ms).ReadObject()))

        Dim chain() As Org.BouncyCastle.X509.X509Certificate = New
Org.BouncyCastle.X509.X509Certificate(1) {}
        chain(0) = bcCert



        Dim reader As PdfReader = New PdfReader(FromF)
        If IO.File.Exists(Tof) Then
            IO.File.Delete(Tof)
        End If
        Dim stp As PdfStamper = PdfStamper.CreateSignature(reader, New
IO.FileStream(Tof, IO.FileMode.CreateNew), PdfWriter.VERSION_1_6)

        Dim sap As PdfSignatureAppearance = stp.SignatureAppearance
        'sap.SetVisibleSignature(New Rectangle(100, 100, 300, 200), 1,
Nothing)
        With sap
            .SetVisibleSignature("Progettista")
            .SignDate = DateTime.Now
            .SetCrypto(Nothing, chain, Nothing, Nothing)
            .Reason = "I like to sign"
            .Location = "Universe"
            .Acro6Layers = True
            .Render =
PdfSignatureAppearance.SignatureRender.NameAndDescription
        End With
       


        Dim dic As PdfSignature = New PdfSignature(PdfName.ADOBE_PPKLITE,
PdfName.ADBE_PKCS7_DETACHED)
        With dic
            .Date = New PdfDate(sap.SignDate)
            .Name = PdfPKCS7.GetSubjectFields(chain(0)).GetField("CN")
            If (sap.Reason <> "") Then
                .Reason = sap.Reason
            End If
            If (sap.Location <> "") Then
                .Location = sap.Location
            End If
        End With
        sap.CryptoDictionary = dic

        Dim csize As Int64 = 4000
        Dim exc As Hashtable = New Hashtable()
        exc(PdfName.CONTENTS) = csize * 2 + 2
        sap.PreClose(exc)


        Dim s As IO.Stream = sap.RangeStream
        Dim ss As IO.MemoryStream = New IO.MemoryStream()
        Dim read As Int64 = 0
        Dim buff As Byte() = New Byte(8191) {}
        read = s.Read(buff, 0, 8192)

        While ((read) > 0)
            ss.Write(buff, 0, read)
            read = s.Read(buff, 0, 8192)
        End While
        Dim pk() As Byte = SignMsg(ss.ToArray(), Card, True)

        Dim outc As Byte() = New Byte(csize - 1) {}


        Dim dic2 As PdfDictionary = New PdfDictionary()

        Array.Copy(pk, 0, outc, 0, pk.Length)

        dic2.Put(PdfName.CONTENTS, New PdfString(outc).SetHexWriting(True))
        sap.Close(dic2)

        reader.Close()
        stp.Close()




    End Sub
    Public Shared Function SignMsg(ByVal msg As Byte(), ByVal signerCert As
X509Certificate2, ByVal detached As Boolean) As Byte()
        ' Place message in a ContentInfo object. 
        ' This is required to build a SignedCms object. 

        Dim contentInfo As System.Security.Cryptography.Pkcs.ContentInfo =
New System.Security.Cryptography.Pkcs.ContentInfo(msg)

        ' Instantiate SignedCms object with the ContentInfo above. 
        ' Has default SubjectIdentifierType IssuerAndSerialNumber. 
        Dim signedCms As System.Security.Cryptography.Pkcs.SignedCms = New
SignedCms(contentInfo, detached)

        ' Formulate a CmsSigner object for the signer. 
        Dim cmsSigner As CmsSigner = New CmsSigner(signerCert)

        ' Include the following line if the top certificate in the 
        ' smartcard is not in the trusted list. 
        cmsSigner.IncludeOption = X509IncludeOption.EndCertOnly

        ' Sign the CMS/PKCS #7 message. The second argument is 
        ' needed to ask for the pin. 
        signedCms.ComputeSignature(cmsSigner, False)

        ' Encode the CMS/PKCS #7 message. 
        Return signedCms.Encode()
    End Function


thank you
-- 
View this message in context: 
http://www.nabble.com/Sign-with-.cer-tp25770537p25770537.html
Sent from the iText - General mailing list archive at Nabble.com.


------------------------------------------------------------------------------
Come build with us! The BlackBerry&reg; Developer Conference in SF, CA
is the only developer event you need to attend this year. Jumpstart your
developing skills, take BlackBerry mobile applications to market and stay 
ahead of the curve. Join us from November 9&#45;12, 2009. Register now&#33;
http://p.sf.net/sfu/devconf
_______________________________________________
iText-questions mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/itext-questions

Buy the iText book: http://www.1t3xt.com/docs/book.php
Check the site with examples before you ask questions: 
http://www.1t3xt.info/examples/
You can also search the keywords list: http://1t3xt.info/tutorials/keywords/

Reply via email to