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

问题描述:

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

+1

将您试过的代码添加到您的问题中。 –

+0

我在这里问一个最佳实践,我的代码是不相关的。有人使用Acrobat创建PDF表单,我解析字段名称,这是一个微不足道的代码,但似乎不是一种有效的做法。 – amira

+0

你想在该领域存储什么样的附加信息?该信息是静态的,还是可以根据字段值进行更改? –

基于上述意见,我的问题,因为我无法找到存储PDF领域内的元数据的地方,我终于用下面的方法,我觉得最简单的:

  1. 在Acrobat DC亲我创建一个可见的文本字段,并将其命名为“Input_1”。
  2. 然后我创建另一个字段,将其命名为:“Info_1”,将其设置为隐藏(在 字段属性中),并将其默认值设置为我需要存储的元数据 (例如,我可以存储Json字符串在那里:{group:1,title:'myTitle', moreInfo:'some more info'}。
  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 
    }