如何正确存储每个表单字段的附加信息并使用iTextSharp

时间:2016-12-18 10:01:36

标签: c# pdf itext

我需要创建一个带有表单的pdf文件,并使用c#和iTextSharp解析该表单。所以,如果我创建例如:一个文本框,我给它一个像text_12的id,并为其他信息我创建另一个隐藏的文本框并给它一个id:lbl_12_title_someInfo_moreInfo etc..where 12是唯一的id ..其中后来我使用c#和iTextSharp进行解析,但它看起来不像是这样做..
我需要创建一个文本框并存储其他信息,然后按名称获取字段并从中检索其他信息。我怎样才能做到这一点? 我试图存储文本框的默认值,但无论我尝试过什么都无法读取它!

1 个答案:

答案 0 :(得分:0)

基于对上述问题的评论,以及因为我找不到在pdf字段中存储元数据的地方,我最终使用了以下最简单的方法:

  1. 在Acrobat DC pro中,我创建了一个可见的文本字段,并将其命名为“Input_1”。
  2. 然后我创建另一个字段,命名为:“Info_1”,将其设置为隐藏(在 字段属性),并将其默认值设置为我需要存储的元数据 (我可以,例如在那里存储一个Json字符串:{group:1,title:'myTitle', moreInfo:'更多信息'}。
  3. 因此,对于每个输入字段,我创建一个具有相同Id(数字)的隐藏字段 并将其他信息存储在其默认值中。
  4. 保存PDF文档。
  5. 使用iTextSharp,我使用以下方法检索表单字段:

    PdfReader reader = new PdfReader(filePath);
    AcroFields formFields = reader.AcroFields;
    foreach (KeyValuePair <string, AcroFields.Item> kvp in formFields.Fields)
    {
      string fieldName = kvp.Key;
      string fieldId = fieldName.Split('_')[1];
      string fieldInfo = formFields.GetField("Info_"+fieldId);
      string fieldType = formFields.GetFieldType(fieldName);
      // Now i can parse the fieldInfo string as I wish and store all info
      // in the Database
    }