关闭压模时,Itextsharp错误“未知过滤器:”

时间:2015-04-24 02:09:29

标签: c# itextsharp

我正在尝试将数字签名添加到空白的现有pdf中,然后用它创建一个带有数字签名的新pdf。

这是我的代码:

FileStream fs = new FileStream(newFile, FileMode.Create, FileAccess.Write);
PdfReader pdfreader = new PdfReader(pdf);
PdfStamper stamper = PdfStamper.CreateSignature(pdfreader, fs, '\0');
stamper.Writer.CloseStream = false;

StringBuilder sb = new StringBuilder();
sb.AppendLine("SIGNATURE");

PdfSignatureAppearance sap = stamper.SignatureAppearance;
sap.SignDate = DateTime.Now;
sap.Acro6Layers = true;

Font signatureFont = new Font();
signatureFont.Size = 10;

sap.Layer2Text = sb.ToString();
sap.Layer2Font = signatureFont; 

stamper.Close();    
pdfreader.Close();
fs.Close();

压模关闭时出现异常,例外情况为“未知过滤器:” 有人可以帮忙吗? 提前谢谢。

1 个答案:

答案 0 :(得分:0)

您不会告诉iTextSharp如何签名:

  • 您不能将其指向要使用的私钥。
  • 您不能告诉它要创建哪种PDF签名。

在您的情况下,后一个问题很可能导致错误消息,PDF签名的类型基本上由过滤器和子过滤器值给出。

在旧的iText(夏普)版本中,这些值是PdfSignatureAppearance.SetCrypto方法和PdfSignature构造函数调用的参数。

在当前版本中,这些值在MakeSignature辅助方法和ExternalSignature实现构造函数中设置。

您可能想阅读Digital Signatures for PDF documents,Bruno Lowagie(iText软件)的白皮书,主题是使用iText签署PDF。可以在iTextSharp sourceforge存储库中找到示例代码的iTextSharp / C#版本。