Подпишите форму PDF с iTextSharp - PullRequest
0 голосов
/ 13 апреля 2011

У меня есть PDF-форма с полем подписи известного имени root [0] .containerpage [0] .footer [0] .SignatureField1 [0]
Также у меня есть сертификат PFX.
Теперь вопрос в том, у меня есть форма, открытая в PdfStamper от itextsharp, как мне подписать ее так, чтобы

  • форма заблокирована для изменений
  • статус подписи виден в упомянутом поле

Я придумал следующий код:

Dim pk12 As Pkcs12Store = New Pkcs12Store(New FileStream(Application.StartupPath & "cert.pfx", FileMode.Open, FileAccess.Read), "pass".ToCharArray())
Dim i As IEnumerator = pk12.Aliases()
While (i.MoveNext())
    cert_alias = (i.Current)
    If (pk12.IsKeyEntry(cert_alias)) Then
        Exit Sub
    End If
End While
Dim akp As AsymmetricKeyParameter = pk12.GetKey(cert_alias).Key
Dim ce As X509CertificateEntry() = pk12.GetCertificateChain(cert_alias)
Dim chain() As X509Certificate( **%PROBLEM%** )
For k As Integer = 0 To ce.Length
    chain(k) = ce(k).getCertificate()
Next
Dim reader As PdfReader = New PdfReader("pdf.pdf")
Dim stamper As PdfStamper = PdfStamper.CreateSignature(reader, New FileStream("pdf.pdf", "pdf_signed.pdf"), FileMode.Create, FileAccess.Write), "\0")

Dim appearance As PdfSignatureAppearance = stamper.SignatureAppearance
appearance.SetVisibleSignature("mySig")
appearance.Reason = "Its personal."
appearance.Location = "Foobar"
appearance.SetCrypto(pk12, chain, Nothing, PdfSignatureAppearance.WINCER_SIGNED)
appearance.CertificationLevel = PdfSignatureAppearance.CERTIFIED_NO_CHANGES_ALLOWED

appearance.Acro6Layers = True
appearance.SignatureGraphic = Image.GetInstance(RESOURCE)
appearance.Render = PdfSignatureAppearance.SignatureRender.Graphic


stamper.Close()

не может, однако, понять, что на самом деле должно идти в X509CertificateStructure как параметре X509Certificate, где в кодовом блоке написано % ПРОБЛЕМА% .

Спасибо

1 Ответ

0 голосов
/ 13 апреля 2011

Я считаю, что это должно быть:

Dim chain() As X509Certificate(ce.length)

Я всегда путаюсь с VB и объявлением размера массива, поэтому вам, возможно, придется вычесть 1

...