使用itextsharp在签名字典中自定义数据

时间:2015-10-26 07:32:09

标签: c# pdf itextsharp itext

我试图将自定义数据添加到签名字段(最后这可以是从生物识别到信息的任何内容)。

PdfFormField signatureField = stamper.AddSignature(
    signingBlock.Name, signingBlock.Page,
    signingBlock.X, signingBlock.Y, signingBlock.X + signingBlock.Width,
    signingBlock.Y + signingBlock.Height);
signatureField.Put(new PdfName("SomeRandomKey"), new PdfString("Some random text goes here"));

但是自从玩这个以来,我已经检查了PDF结构,并且值永远不会存储在文档中。将自定义数据添加到签名字段的适当方法是什么,它必须特定于签名字段,因为我不能使用/ Info字典。

任何帮助将不胜感激。 亲切的问候

1 个答案:

答案 0 :(得分:2)

stamper.AddSignature是一种方便的方法

  • 创建一个新的PDF表单字段
  • 根据参数
  • 设置签名参数
  • 创建一个外观,
  • 从交互式表单和页面注释词典中引用此表单字段,并
  • 将表单字段PDF对象写入输出流/文件

因此,您添加到从该方法检索的对象的信息添加得太晚了。

该方法实现如下:

virtual public PdfFormField AddSignature(String name, int page, float llx, float lly, float urx, float ury) {
    PdfAcroForm acroForm = stamper.AcroForm;
    PdfFormField signature = PdfFormField.CreateSignature(stamper);
    acroForm.SetSignatureParams(signature, name, llx, lly, urx, ury);
    acroForm.DrawSignatureAppearences(signature, llx, lly, urx, ury);
    AddAnnotation(signature, page);
    return signature;
} 

AddAnnotation调用隐式将表单字段对象写入stream / file。

因此,您可能希望做类似这样的事情,而不是像您一样调用它:

PdfAcroForm acroForm = stamper.Writer.AcroForm;
PdfFormField signature = PdfFormField.CreateSignature(stamper.Writer);
acroForm.SetSignatureParams(signature, signingBlock.Name, signingBlock.X, signingBlock.Y, signingBlock.X + signingBlock.Width, signingBlock.Y + signingBlock.Height);
acroForm.DrawSignatureAppearences(signature, signingBlock.X, signingBlock.Y, signingBlock.X + signingBlock.Width, signingBlock.Y + signingBlock.Height);

signature.Put(new PdfName("SomeRandomKey"), new PdfString("Some random text goes here"));

stamper.AddAnnotation(signature, signingBlock.Page);