Цифровая подпись в PDF - PullRequest
       30

Цифровая подпись в PDF

5 голосов
/ 22 декабря 2008

Я пытаюсь подписать файл PDF цифровой подписью, используя в качестве примера ЭТОТ проект.

Когда выполняется st.Close (); Я получаю печально известный «Ссылка на объект не установлена ​​на экземпляр объекта».

Я понятия не имею, почему это происходит, st является экземпляром объекта, и он используется выше. Это исключение происходит внутри .Close (), и поскольку у меня нет исходного кода, я могу только попытаться догадаться, почему ...

Все, что я могу сказать, это:

  1. Оригинальный PDF успешно читается.
  2. Создается пустой PDF-файл (я предполагаю, что .Close () запишет файл).
  3. Мой сертификат загружается, но я не уверен, что это правильный способ сделать это.

Вот как я загружаю сертификат:

private void processCert(X509Certificate2 card)
{
    X509CertificateParser cp = new org.bouncycastle.x509.X509CertificateParser(card.RawData);
    chain = new org.bouncycastle.x509.X509Certificate[] { cp.ReadCertificate() };
}

Вот так я пытаюсь подписать PDF.

public string Sign(string SigReason, string SigContact, string SigLocation, bool visible)
{
    string bugLog ="";
    try
    {
        PdfReader reader = new PdfReader(this.inputPDF);

        //Activate MultiSignatures
        PdfStamper st = PdfStamper.CreateSignature(reader, new FileStream(this.outputPDF, FileMode.Create, FileAccess.Write), '\0', null, true);

        FileStream(this.outputPDF, FileMode.Create, FileAccess.Write), '\0'); 

        st.MoreInfo = this.metadata.getMetaData();

        st.XmpMetadata = this.metadata.getStreamedMetaData();

        PdfSignatureAppearance sap = st.SignatureAppearance;

        sap.SetCrypto(this.myCert.Akp, this.myCert.Chain, null, PdfSignatureAppearance.WINCER_SIGNED);

        sap.Reason = SigReason;
        sap.Contact = SigContact;
        sap.Location = SigLocation;

        if (visible)
           sap.SetVisibleSignature(new iTextSharp.text.Rectangle(100, 100, 250, 150), 1, null);

        st.Close();
    }
    catch (Exception e)
    {
        bugLog += " ERROR Sign: " + e.Message;
    }

    return buglog;
  }

Кто-нибудь знает, почему я получаю это исключение или что мне делать, чтобы преодолеть это?

Документация iTextSharp не сильно помогла ...

1 Ответ

1 голос
/ 23 декабря 2008

Мне теперь удается заставить эту работу :) Некоторые небольшие изменения в этом примере добились цели;)

http://itextpdf.sourceforge.net/howtosign.html#signextitextsharp2

...