Domanda

Sto cercando di firmare digitalmente un file PDF utilizzando QUESTO progetto come un esempio.

Quando si esegue st.Close (); Mi è toccato il famigerato "riferimento oggetto non impostato a un'istanza di un oggetto".

Non ho idea del perché questo sta accadendo, st è un'istanza di un oggetto ed è usato in precedenza. Questa eccezione sta accadendo all'interno .Close () e come non ho il codice sorgente posso solo cercare di indovinare perché ...

Tutto quello che posso dire è che:

  1. Il PDF originale viene letto con successo.
  2. Un pdf vuoto viene generato (immagino che la .Close () scriverà il file).
  3. Il mio certificato viene caricata, ma non sono sicuro che sia il modo giusto per farlo.

Ecco come sto caricando il certificato:

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

Questo è il modo che sto cercando di firmare il 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;
  }

Qualcuno ha avuto un pensiero sul perché sto ottenendo questa eccezione, o che cosa devo fare per superare questo?

La documentazione iTextSharp non è stato di grande aiuto ...

È stato utile?

Soluzione

Ora ho riesco a fare questo lavoro :) Alcune piccole modifiche a questo esempio ha fatto il trucco;)

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top