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

C# 使用itextsharp在签名字典中自定义数据,c#,pdf,itextsharp,itext,C#,Pdf,Itextsharp,Itext,我正在尝试将自定义数据添加到签名字段中(最终这可以是从生物特征到信息的任何内容) 但玩了这个之后,我检查了PDF结构,这些值从未存储在文档中。将自定义数据添加到签名字段的适当方式是什么?它必须特定于签名字段,因为我要处理多个签名,因此我不能使用/Info字典 任何帮助都将不胜感激。 亲切问候压模。添加签名是一种方便的方法 创建新的PDF表单字段 根据参数设置签名参数 创造一种外观 从交互式表单和页面注释词典中引用此表单字段,以及 将表单字段PDF对象写入输出流/文件 因此,添加到从该方法检索

我正在尝试将自定义数据添加到签名字段中(最终这可以是从生物特征到信息的任何内容)

但玩了这个之后,我检查了PDF结构,这些值从未存储在文档中。将自定义数据添加到签名字段的适当方式是什么?它必须特定于签名字段,因为我要处理多个签名,因此我不能使用/Info字典

任何帮助都将不胜感激。
亲切问候压模。添加签名是一种方便的方法

  • 创建新的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;
} 
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);
AddAnnotation
调用将表单字段对象隐式写入流/文件

因此,与其像以前那样称呼它,不如这样做:

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;
} 
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);

这就解决了我的问题。但是,对于现有的签名块,不会存在同样的问题吗?i、 e.尝试向字典添加值?种类识别您可以在
PdfReader
中打开文件,操作PDF对象,并使用
PdfStamper
存储操作过的PDF。如果您使用附加模式,请使用
PdfStamper.MarkUsed
将更改的对象标记为已使用。太棒了,我发现我缺少的是MarkUsed部分:)谢谢你,mkl你是一名冠军:D