このプロジェクトを例として使用して、PDFファイルにデジタル署名しようとしています。
st.Close();を実行するとき。悪名高い「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というメッセージが表示されます。
なぜこれが起こっているのかわかりません。stはオブジェクトのインスタンスであり、上記で使用されています。この例外は.Close()内で発生しており、ソースコードがないため、理由を推測することしかできません...
私が言えるのはそれだけです:
- 元のPDFが正常に読み取られています。
- 空のPDFが生成されています(.Close()がファイルを書き込むと思います)。
- 証明書が読み込まれていますが、それが正しい方法かどうかはわかりません。
証明書をロードする方法は次のとおりです。
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のドキュメントはあまり役に立ちませんでした...